我們知道,在數據庫系統的開發和應用中,必須保證數據庫的完整性和一致性。 DBCC命令的格式如下
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)的檢查。缺省是檢查所有的索引。 例1.檢查日志使用的空間量和未用的空間量:
若日志段在日志設備上,則會返回如下信息:
若日志不在它自己的設備上,則會顯示下列信息:
checkdb選項 運行checkdb選項同checktable檢查的內容一樣,但它是對一指定數據庫中的每張表都做這樣的檢查。若未指定數據庫名,checkdb檢查當前的數據庫。checkdb返回的信息,也同于checktable。 checkalloc選項 checkalloc是檢查指定數據庫,看其所有正確分配的頁和尚未分配的頁的情況。若未指定數據庫名,則checkalloc檢查當前數據庫。checkalloc會返回已分配的和使用的空間數量。checkalloc的缺省模式為nofix,要使用fix選項,必須把數據庫置于單用戶模式。 例:
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命令所返回的信息能準確地反映數據庫及它的各個對象的狀態,是我們檢測數據庫的好幫手。 |