SqlServer實用操作數(shù)據(jù)庫一致性檢測工具(DBCC)_第1頁
SqlServer實用操作數(shù)據(jù)庫一致性檢測工具(DBCC)_第2頁
SqlServer實用操作數(shù)據(jù)庫一致性檢測工具(DBCC)_第3頁
SqlServer實用操作數(shù)據(jù)庫一致性檢測工具(DBCC)_第4頁
SqlServer實用操作數(shù)據(jù)庫一致性檢測工具(DBCC)_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、在危急時刻,數(shù)據(jù)庫一致性檢測(DBCC)可能是你最重要的工具。本文向你簡單介紹DBCC的功能,它們包括:檢測表和相關(guān)目錄的完整性。檢測整個數(shù)據(jù)庫。檢測數(shù)據(jù)庫頁的完整性。重建任何指定表中的目錄。你為何需要學(xué)習(xí)DBCC如果你甚至還不知道為何使用DBCC,下面提供一些原因:需要不斷分割數(shù)據(jù)庫頁(表和目錄),這可能會破壞分配。目錄可能遭到破壞,或效率降低。SQLServer引擎有時會誤解你的意圖。需要大量更新時,事情可能會很麻煩(記住,任何指定的更新實際為刪除和插入)。單個頁面,雖然仍然“健康”,但可能會失去它們的最優(yōu)存儲足跡。如何運行DBCC你可以用兩種方法運行DBCC:通過命令行窗口或查詢分析器(

2、QueryAnalyzer)窗口。如果你認(rèn)為必要,你還可以確定其操作的時間。(我從未感到有必要這樣做,因為在微軟的所有產(chǎn)品中,我對SQLServer的穩(wěn)定性最為自信。我認(rèn)為它是雷蒙德推出的最佳產(chǎn)品。但是,感覺也可能出錯。)DBCC命令包括以下擴展:CheckDB:檢測整個數(shù)據(jù)庫的一致性,是檢查數(shù)據(jù)庫破壞的基本方法。CheckTable:檢測特定表的問題。CheckAlloc:檢測數(shù)據(jù)庫的單個頁面,包括表和目錄。Reindex:重建某個特定表的目錄。CacheStats:說明當(dāng)前存儲在內(nèi)存緩存中的對象。DropCleanBuffers:釋放當(dāng)前存儲在緩沖區(qū)中的所有數(shù)據(jù),這樣你就可以繼續(xù)進行檢測,

3、而不必使用前面的結(jié)果。Errorlog:刪除(縮短)當(dāng)前日志。你可以考慮確定包含這個命令的操作的時間,一個星期左右運行一次。FlushProclnDB:清除特定數(shù)據(jù)庫的存儲過程緩存(使用它的數(shù)據(jù)庫id而不是名稱)。使用下列代碼找出id:SELECTdbidFROMmaster.dbo.sysdatabasesWHEREname=IndexDefrag:減少目錄分裂,但不給文件加鎖,以便用戶能夠繼續(xù)應(yīng)用數(shù)據(jù)庫。CheckCatalog:檢測特定數(shù)據(jù)庫表及表之間的一致性(后者意味著使用外鍵等。)如何使用這五個擴展DBCC首先建立一個數(shù)據(jù)庫快照(在某些情況下,如應(yīng)用一個Master、TempDB或只

4、讀數(shù)據(jù)庫時)。附帶條件:要使用DBCC,數(shù)據(jù)庫必須處于單用戶模式。使用DBCCCheckDB此命令保證:數(shù)據(jù)與目錄頁正確連接。目錄被正確分類,并保持最新。指針一致。每個頁面的數(shù)據(jù)保持最新。頁面偏移值保持最新。以下是使用CheckDB的最常見方法:DBCCCHECKDB(AdventureWorks,REPAIR_FAST)DBCCCHECKDB(AdventureWorks,REPAIR_REBUILD)DBCCCHECKDB(AdventureWorks,REPAIR_ALLOW_DATA_LOSS)你還可以指定其它幾個選項,但以上是三個最重要的選項。我按順序列出這些DBCC命令,你應(yīng)該先運

5、行它們,然后檢查結(jié)果。前兩個選項不會造成數(shù)據(jù)損失,但第三個選項會引起數(shù)據(jù)損失。因此建議把第三個命令放在一個事務(wù)內(nèi),如果數(shù)據(jù)損失不可接受,你可以執(zhí)行一次回滾(ROLLBACK)。使用DBCCCheckTable大多數(shù)情況下,你遇到的問題往往與數(shù)據(jù)庫中的一個或幾個表,而不是整個數(shù)據(jù)庫有關(guān)。這時即可運行CheckTable。首先,使用相關(guān)數(shù)據(jù)庫,然后運行DBCCCheckTable命令。下面是兩個例子:DBCCCheckTable(Sales,SalesOrderHeader)DBCCCheckTable(Sales,SalesOrderHeader,REPAIR_REBUILD)使用DBCCChe

6、ckAlloc這個命令檢測數(shù)據(jù)頁及其目錄的一致性。下面是兩個例子:DBCCCHECKALLOC(Sales.SalesOrderDetails)DBCCCHECKALLOC(Sales.SalesOrderDetails,REPAIR_REBUILD)使用DBCCCheckCatalog使用這個命令來驗證一個數(shù)據(jù)庫系統(tǒng)表的一致性。你指定數(shù)據(jù)庫的名稱進行檢查,自變量WITHNO_INFOMSGS可選。下面是一個例子:DBCCCHECKCATALOG(AdventureWorks)使用DBCCReIndex這個命令促使某個特定的表或視圖中的一個或幾個目錄進行重建。你還可以應(yīng)用某個特定目錄的名稱和填

7、充系數(shù)。列表A中包含兩個例子。第三個自變量說明我希望使用重建目錄中的一個90%的填充系數(shù)。一DBCC命令的格式dbcc(checktable(表名|表標(biāo)識(,skip_ncindex)|checkdb(數(shù)據(jù)庫名,skip_ncindex)|checkalloc(數(shù)據(jù)庫名,fix|nofix)|tablealloc(表名|表標(biāo)識,full|optimized|fast|null,fix|nofix)|indexalloc(表名|表標(biāo)識,索引標(biāo)識,full|optimezed|fast|null,fix|nofix)|checkcatalog(數(shù)據(jù)庫名)|dbrepair(數(shù)據(jù)庫名,dropdb)

8、|rei門46乂(表名|表標(biāo)識)|fix_text(表名|表標(biāo)識)dbcc的權(quán)限,對于checktable,fix_text和reindex是缺省賦給表的屬主,對于checkdb,checkalloc,checkcatalog,dbrepair,indexalloc和tablealloc,是缺省賦給數(shù)據(jù)庫屬主的。DBO自動獲得DBCC命令和全部選項的權(quán)限。該權(quán)限不可轉(zhuǎn)授。此外,dbcc在數(shù)據(jù)庫是活動時運行,除了dbrepair選項和帶有fix選項的dbcccheckalloc以外。checktable選項checktable是用來對一個指定的表做檢查,確保索引和數(shù)據(jù)頁正確地連接,索引按正確的順

9、序存儲,所有指針的一致性,每頁上數(shù)據(jù)信息的合理性,頁偏移的合理性。如果日志段在它自己的(日志)設(shè)備上,對syslogs表使用dbccchecktable命令可以報告已使用的和剩余的日志空間,使用skip_ncindex選項使得dbccchecktable跳過對用戶表上非聚簇索引(nonclusteredindex)的檢查。缺省是檢查所有的索引。例1.檢查日志使用的空間量和未用的空間量:dbccchecktable(syslogs)若日志段在日志設(shè)備上,則會返回如下信息:checkingsyslogsThetotalnumberofdatapageinthetableis1.NOTICE:Spa

10、ceusedonthelogsegmentis0.20Mbytes,0.13%.NOTICE:Spacefreeonthelogsegmentis153.4Mbytes,99.87%.DBCCexecutionCompleted.Ifdbccprintederrormessages,ContactauserwithSArole.若日志不在它自己的設(shè)備上,則會顯示下列信息:NOTICE:Notificationoflogspaceused/free.Cannotbereportedbecausethelogsegmentisnotonitsowndevice.例2.dbccchecktable(

11、titles)Thetotalnumberofdatapageinthistableis3.Tablehas18datarows.DBCCexecutionCompleted.IfDBCCprintederrormessages.contactauserwithSArole.checkdb選項運行checkdb選項同checktable檢查的內(nèi)容一樣,但它是對一指定數(shù)據(jù)庫中的每張表都做這樣的檢查。若未指定數(shù)據(jù)庫名,checkdb檢查當(dāng)前的數(shù)據(jù)庫。checkdb返回的信息,也同于checktable。checkalloc選項checkalloc是檢查指定數(shù)據(jù)庫,看其所有正確分配的頁和尚未分配的頁

12、的情況。若未指定數(shù)據(jù)庫名,則checkalloc檢查當(dāng)前數(shù)據(jù)庫。checkalloc會返回已分配的和使用的空間數(shù)量。checkalloc的缺省模式為nofix,要使用fix選項,必須把數(shù)據(jù)庫置于單用戶模式。例:dbcccheckalloc(pubs2)allocpage0(#ofextent=32usedpages=68refpages=68)allocpage256(#ofextent=32usedpages=154refpages=154)allocpage512(#ofextent=28usedpages=184refpages=184)allocpage768(#ofextent=1u

13、sedpages=1refpages=1)total(#ofextent=93usedpages=407refpages=407)inthisdatabase.DBCCexecutioncompleted.Ifdbccprintederrormessage,ContactauserwithSystemAdminstrator(SA)role.tablealloc選項tablealloc檢查指定的表以確保所有頁都被正確地分配。它是checkalloc的縮小版本。對單張表進行相同的完整性檢查。使用tablealloc可以生成三種類型的報表:full,optimized和fast。full選項相當(dāng)于

14、表一級的checkalloc;它報告各種類型的分配錯誤。optimized選項基于表的對象分配映像(OAM)頁里列出的分配頁生成報告。它并不報告,也不能整理OAM頁里沒有列出的在分配頁上沒有引用的擴展(extent)。如果沒有指明類型,或使用了null,則optimized選項是缺省的設(shè)置。fast選項,并不生成分配報告,但生成一個被引用但并沒有在擴展里分配的頁的額外的報告。fix|nofix選項決定tablealloc是否整理表中發(fā)現(xiàn)的分配錯誤。對于所有的表,缺省為fix,但系統(tǒng)表除外,它們的缺省為nofix。要對系統(tǒng)表使用fix選項,必須首先將數(shù)據(jù)庫置成單用戶模式。例:dbcctablea

15、lloc(titles)顯示信息如下:ThedefaultreportoptionofOPTIMIZEDisusedforthisrun.ThedefaultfixoptionofFIX.isusedforthisrun.Total#ofextent=3Allocpage256(#ofextent=1usedpages=2refpages=2).Allocpage256(#ofextent=1usedpages=2refpages=2)Allocpage256(#ofextent=1usedpages=2refpages=2)Total(#ofextent=3usedpages=8refpag

16、es=8)inthisdatabase.indexalloc選項indexalloc檢查指定的索引,確保所有的頁都被正確地分配,它是checkalloc的縮小版本,對單獨一條索引指定同樣的完整性檢查。其中各選項與tablealloc相同。checkcatalog選項checkcatalog選項用于檢查系統(tǒng)表內(nèi),系統(tǒng)表之間的一致性。例如:它確保在syscolumns表中的每一(數(shù)據(jù))類型在systypes表中都有一個相匹配的記錄;對于sysobjects中的每個表和視圖在syscolumns表中應(yīng)有關(guān)于它們每一列的描述記錄;確保在syslogs中的最后一個檢查點是有效的。checkcatalog

17、也報告任何已定義的段。若不指定數(shù)據(jù)庫名,則檢查當(dāng)前數(shù)據(jù)庫。dbrepair選項dbrepair(數(shù)據(jù)庫名,dropdb)選項是刪除一個受破壞的數(shù)據(jù)庫。受破壞的數(shù)據(jù)庫是不能用dropdatabase命令刪除的,dropdatabase只能刪除正常的數(shù)據(jù)庫,當(dāng)執(zhí)行dbrepair命令時,任何用戶(包括執(zhí)行此命令的用戶)都不得使用正被刪除的數(shù)據(jù)庫。該選項要在master庫中運行。reindex選項reindex選項通過運行dbccchecktable的fast執(zhí)行方式檢查用戶表上索引的完整性。如果它檢測出索引有問題則會刪除并重建索引。在SQLServer的排列順序改變之后,SA或表屬主應(yīng)該執(zhí)行這一選

18、項。此選項不能在用戶定義的事務(wù)中運行。例:dbccreindex(titles)返回信息:Oneormoreindexescorrupt.Theywillberebuilt.fix_text選項SQLServer的字符集由單字節(jié)轉(zhuǎn)變?yōu)槎嘧止?jié)后,fix_text選項用于升級文本值。SQLServer的字符集由單字節(jié)轉(zhuǎn)變?yōu)槎嘧止?jié)字符集會使文本數(shù)據(jù)的管理更加復(fù)雜。由于文本值可能較大足以覆蓋若干頁,SQLServer必須能處理(通過頁約束)可能橫跨頁的字符。為做到這點,服務(wù)器需要在每一文本頁上添加一些信息。SA或表屬主必須在文本數(shù)據(jù)的每一個表上運行dbccfix_text,以計算所需要的新頁數(shù)。二DB

19、CC命令分類維護語句DBCCDBREINDEX重建指定數(shù)據(jù)庫中表的一個或多個索引DBCCDBREPAIR除去損壞的數(shù)據(jù)庫DBCCINDEXDEFRAG整理指定的表或視圖的聚集索引和輔助索引碎片DBCCSHRINKDATABASE收縮指定數(shù)據(jù)庫中的數(shù)據(jù)文件大小DBCCSHRINKFILE收縮相關(guān)數(shù)據(jù)庫的指定數(shù)據(jù)文件或日志文件大小DBCCUPDATEUSAGE報告和更正sysindexes表的不正確內(nèi)容,該內(nèi)容可能會導(dǎo)致通過sp_spaceused系統(tǒng)存儲過程產(chǎn)生不正確的空間使用報表狀態(tài)語句DBCCINPUTBUFFER顯示從客戶端發(fā)送到MSSQLServer的最后一個語句DBCCOPENTRAN如果在指定數(shù)據(jù)庫內(nèi)存在最舊的活動事務(wù)和最舊的分布和非分布式復(fù)制事務(wù),則顯示與之相關(guān)的信息。只有當(dāng)存在活動事務(wù)或數(shù)據(jù)庫包含復(fù)制信息時,才顯示結(jié)果。如果沒有活動事務(wù),就顯示信息性消息DBCCOUTPUTBUFFER以十六進制或ASCII格式返回指定系統(tǒng)進程ID(SPID)的當(dāng)前輸出緩沖區(qū)DBCCPROCCACHE以報表形式顯示有關(guān)過程高速緩存的信息DBCCSHOWCONTIG顯示指定的表的數(shù)據(jù)和索引的碎片信息DBCCSHOW_STATISTICS顯示指定表上的指定目標(biāo)的當(dāng)前分布統(tǒng)計信息DBCCSQLPERF提供有關(guān)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論