天天看點

DBCC詳解

      一、 資料庫一緻性檢查工具(Database Consistenecy Checker,簡稱DBCC)。DBCC是一個實用指令集,用來檢查一個資料庫的邏輯一緻性及實體一緻性。在開發和應用中,DBCC是我們經常要使用的指令。

     資料庫控制台指令語句被分為以下類别。

維護

 對資料庫、索引或檔案組進行維護的任務。

雜項

 雜項任務,如啟用跟蹤标志或從記憶體中删除 DLL。

資訊

 收集并顯示各種類型資訊的任務。

驗證

 對資料庫、表、索引、目錄、檔案組或資料庫頁的配置設定進行的驗證操作。

DBCC指令的格式如下 

dbcc (checktable ((表名|表辨別( [, skip_ncindex] ) |

checkdb [(資料庫名[, skip_ncindex] )] |

checkalloc [ (資料庫名[, fix | nofix] )] |

tablealloc( {表名|表辨別}

[,{full |optimized |fast |null}

[, fix |nofix] ]]) |

indexalloc ( {表名|表辨別},索引辨別

[,{full |optimezed | fast | null}

[, fix |nofix ]] ) |

checkcatalog [ (資料庫名)] |

dbrepair(資料庫名,dropdb ) |

reindex({表名|表辨別} ) |

fix_text({表名|表辨別) } 

  dbcc的權限,對于checktable,fix_text和reindex是預設賦給表的屬主,對于checkdb,checkalloc,checkcatalog,dbrepair,indexalloc和tablealloc,是預設賦給資料庫屬主的。DBO自動獲得DBCC指令和全部選項的權限。該權限不可轉授。此外,dbcc在資料庫是活動時運作,除了dbrepair選項和帶有fix選項的dbcc checkalloc以外。

  checktable選項

  checktable是用來對一個指定的表做檢查,確定索引和資料頁正确地連接配接,索引按正确的順序存儲,所有指針的一緻性,每頁上資料資訊的合理性,頁偏移的合理性。如果日志段在它自己的(日志)裝置上,對syslogs表使用dbcc checktable指令可以報告已使用的和剩餘的日志空間,使用skip_ncindex選項使得dbcc checktable跳過對使用者表上非聚簇索引(nonclustered index)的檢查。預設是檢查所有的索引。

   DBCC 語句使用輸入參數和傳回值。所有 DBCC 語句參數都可以接受 Unicode

和 DBCS 字面值。

  使用 DBCC 結果集輸出

  許多 DBCC 指令可以産生表格格式的輸出(使用 WITH TABLERESULTS 選項)。該資訊可裝載到表中以便将來使用。

例1.檢查日志使用的空間量和未用的空間量:

dbcc checktable (syslogs) 

  若日志段在日志裝置上,則會傳回如下資訊:

SysLogs的 DBCC 結果。

對象 'SysLogs' 的 37 頁中有 4361 行。

DBCC 執行完畢。如果 DBCC 輸出了錯誤資訊,請與系統管理者聯系。

  若日志不在它自己的裝置上,則會顯示下列資訊:

消息 2501,級别 16,狀态 45,第 1 行

找不到名為 "syslogs" 的表或對象。請檢查系統目錄。

  checkdb選項

  運作checkdb選項同checktable檢查的内容一樣,但它是對一指定資料庫中的每張表都做這樣的檢查。若未指定資料庫名,checkdb檢查目前的資料庫。checkdb傳回的資訊,也同于checktable。

  checkalloc選項

  checkalloc是檢查指定資料庫,看其所有正确配置設定的頁和尚未配置設定的頁的情況。若未指定資料庫名,則checkalloc檢查目前資料庫。checkalloc會傳回已配置設定的和使用的空間數量。checkalloc的預設模式為nofix,要使用fix選項,必須把資料庫置于單使用者模式。

 例:

dbcc checkalloc (iccard13)

……

在此資料庫中,總區數 = 325,已用頁數 = 2534,保留頁數 = 2589。

       此資料庫中(混合區數 = 45,混合頁數 = 349)。

CHECKALLOC 在資料庫 'IcCard13' 中發現 0 個配置設定錯誤和 0 個一緻性錯誤。

  tablealloc選項

  tablealloc檢查指定的表以確定所有頁都被正确地配置設定。它是checkalloc的縮小版本。對單張表進行相同的完整性檢查。使用tablealloc可以生成三種類型的報表:full,optimized和fast。full選項相當于表一級的checkalloc;它報告各種類型的配置設定錯誤。optimized選項基于表的對象配置設定映像(OAM)頁裡列出的配置設定頁生成報告。它并不報告,也不能整理OAM頁裡沒有列出的在配置設定頁上沒有引用的擴充(extent)。如果沒有指明類型,或使用了null,則optimized選項是預設的設定。fast選項,并不生成配置設定報告,但生成一個被引用但并沒有在擴充裡配置設定的頁的額外的報告。fix|nofix選項決定tablealloc 是否整理表中發現的配置設定錯誤。對于所有的表,預設為fix,但系統表除外,它們的預設為nofix。要對系統表使用fix選項,必須首先将資料庫置成單使用者模式。

  indexalloc 選項

  indexalloc檢查指定的索引,確定所有的頁都被正确地配置設定,它是checkalloc的縮小版本,對單獨一條索引指定同樣的完整性檢查。其中各選項與tablealloc相同。

  checkcatalog選項

  checkcatalog選項用于檢查系統表内,系統表之間的一緻性。例如:它確定在syscolumns表中的每一(資料)類型在systypes表中都有一個相比對的記錄;對于sysobjects中的每個表和視圖在syscolumns表中應有關于它們每一列的描述記錄;確定在syslogs中的最後一個檢查點是有效的。checkcatalog也報告任何已定義的段。若不指定資料庫名,則檢查目前資料庫。

  dbrepair選項

  dbrepair(資料庫名,dropdb)選項是删除一個受破壞的資料庫。受破壞的資料庫是不能用drop database指令删除的,drop database隻能删除正常的資料庫,當執行dbrepair指令時,任何使用者(包括執行此指令的使用者)都不得使用正被删除的資料庫。該選項要在master庫中運作。

  reindex選項

  reindex選項通過運作dbcc checktable的“fast”執行方式檢查使用者表上索引的完整性。如果它檢測出索引有問題則會删除并重建索引。在SQL Server的排列順序改變之後,SA或表屬主應該執行這一選項。此選項不能在使用者定義的事務中運作。

  fix_text選項

  SQL Server的字元集由單位元組轉變為多位元組後,fix_text選項用于更新文本值。SQL Server的字元集由單位元組轉變為多位元組字元集會使文本資料的管理更加複雜。由于文本值可能較大足以覆寫若幹頁,SQL Server必須能處理(通過頁限制)可能橫跨頁的字元。為做到這點,伺服器需要在每一文本頁上添加一些資訊。SA或表屬主必須在文本資料的每一個表上運作dbcc fix_text,以計算所需要的新頁數。

  總之,DBCC指令所傳回的資訊能準确地反映資料庫及它的各個對象的狀态。

二、DBBCC維護語句:對資料庫、索引或檔案組進行維護的任務  

 1、DBCC SHRINKDATABASE  --壓縮整個資料庫的資料檔案與日志檔案。

例:DBCC SHRINKDATABASE(adventureworks,40) --将此資料庫壓縮到僅剩下40%的剩餘空間。

……DBCC SHRINKDATABASE: 已跳過資料庫 ID 6 的檔案 ID 1,因為該檔案沒有足夠的可用空間可以回收。

2、DBCC SHRINKFILE --壓縮指定的資料庫檔案或記錄檔案的大小。檔案存于sys.database_file的指令行

DBCC SHRINKFILE('AdventureWorks_log',50) --将指定的檔案壓縮到僅剩下50M

3、DBCC UPDATEUSAGE --更正任何無效的指令行或頁面計數,對象可從整個資料庫到單一的資料表或是索引,多用在資料庫更新後的處理操作。

如:DBCC UPDATEUSAGE(0)

4、DBCC CLEANTABLE。回收删除的可變長度列和文本列的空間。   

如:

use iccard13

go

DBCC CLEANTABLE(0,log,0)WITH NO_INFOMSGS

5、DBCC INDEXDEFRAG。指定表或視圖的索引碎片整理。   

6、DBCC DBREINDEX。 對指定資料庫中的表重新生成一個或多個索引。   

7、DBCC DROPCLEANBUFFERS。 從緩沖池中删除所有清除緩沖區。

8、DBCC FREEPROCCACHE。 從過程緩存中删除所有元素。

三、DBBCC驗證語句:對資料庫、表、索引、目錄、檔案組或資料庫頁的配置設定進行的驗證操作   

DBCC CHECKALLOC。檢查指定資料庫的磁盤空間配置設定結構的一緻性。   

DBCC CHECKFILEGROUP。檢查目前資料庫中指定檔案組中的所有表的配置設定和結構完整性。   

DBCC CHECKCATALOG。檢查指定資料庫内的目錄一緻性。資料庫必須聯機。   

DBCC CHECKIDENT。 檢查指定表的目前辨別值,如有必要,則更改辨別值。   

DBCC CHECKCONSTRAINTS。 檢查目前資料庫中指定表上的指定限制或所有限制的完整性。   

DBCC CHECKTABLE。檢查組成表或索引視圖的所有頁和結構的完整性。   

DBCC CHECKDB。檢查指定資料庫中所有對象的配置設定、結構和邏輯完整性。   

四、DBBCC的資訊語句   

DBCC SHOW_STATISTICS。顯示指定表上的指定目标的目前分發統計資訊。   

DBCC INPUTBUFFER.顯示從用戶端發送到 Microsoft SQL Server 2005 執行個體的最後一個語句。

DBCC INPUTBUFFER ( session_id [ , request_id ] ) [WITH NO_INFOMSGS ]   

DBCC SHOWCONTIG.顯示指定的表的資料和索引的碎片資訊。   

DBCC OPENTDBCC INPUTBUFFERRAN 如果在指定資料庫記憶體在最早的活動事務和最早的分布式和非分布式複制事務,則顯示與之有關的資訊   

DBCC SQLPERF.提供有關如何在所有資料庫中使用事務日志空間的統計資訊。   

DBCC SQLPERF ( LOGSPACE | 'sys.dm_os_latch_stats' , CLEAR | 'sys.dm_os_wait_stats' , CLEAR )   

[WITH NO_INFOMSGS ]   

DBCC OUTPUTBUFFER.以十六進制和 ASCII 格式傳回指定 session_id 的目前輸出緩沖區。DBCC OUTPUTBUFFER ( session_id [ , request_id ] )   

DBCC TRACESTATUS.顯示跟蹤标志的狀态.DBCC TRACESTATUS ( [ [ trace# [ ,...n ] ] [ , ] [ -1 ] ] )   

DBCC PROCCACHE.以表格格式顯示有關過程緩存的資訊。DBCC PROCCACHE [ WITH NO_INFOMSGS ]   

DBCC USEROPTIONS 傳回目前連接配接的活動(設定)的 SET 選項。DBCC USEROPTIONS   

五、DBBCC的雜項語句:雜項任務,如啟用跟蹤标志或從記憶體中删除 DLL   

DBCC HELP。傳回指定的 DBCC 指令的文法資訊。DBCC HELP ( 'dbcc_statement' | @dbcc_statement_var | '?' )[ WITH NO_INFOMSGS ]   

DBCC dllname (FREE)。從記憶體中上載指定的擴充存儲過程 DLL。DBCC dllname ( FREE ) [ WITH NO_INFOMSGS ]   

DBCC DBREPAIR 。禁用指定的跟蹤标記。DBCC TRACEOFF ( trace# [ ,...n ] [ , -1 ] ) [ WITH NO_INFOMSGS ]   

DBCC TRACEON。啟用指定的跟蹤标記。DBCC TRACEON ( trace# [ ,...n ][ , -1 ] ) [ WITH NO_INFOMSGS ]   

六、未公開的DBCC   

DBCC ERRLOG   初始化SQL錯誤日志   

DBCC BUFFER   顯示緩沖區頭部和頁面資訊   

DBCC FLUSHPROCINDB 清楚資料庫伺服器記憶體中的某個資料庫存儲過程的緩存内容。   

DBCC DBINFO   顯示資料庫結果資訊   

DBCC DATABLE   顯示管理資料庫的表資訊   

DBC IND  檢視某個索引使用的頁面資訊。   

DBCC REBULDLOG   

重建修複SQL資料庫事物日志檔案。   

DBCC LOG  檢視某個資料庫的事務日志資訊   

DBCC PAGE 檢視某個資料庫資料也面資訊   

DBCC PROCBUF  顯示過程緩沖池的緩沖區頭和存儲過程。   

DBCC PRTIPAGE  檢視某個索引頁面的每行指向的頁面号。   

DBCC PSS 顯示目前連接配接到SQLSERVER伺服器的程序資訊。   

DBCC RESOURCE  顯示伺服器目前使用的資源情況。   

DBCC TAB 檢視資料頁面的結構