檢查指定數(shù)據(jù)庫中的所有對象的分配和結構完整性。
DBCC CHECKDB
( 'database_name'
[ , NOINDEX
| { REPAIR_ALLOW_DATA_LOSS
| REPAIR_FAST
| REPAIR_REBUILD
} ]
) [ WITH { [ ALL_ERRORMSGS ]
[ , [ NO_INFOMSGS ] ]
[ , [ TABLOCK ] ]
[ , [ ESTIMATEONLY ] ]
[ , [ PHYSICAL_ONLY ] ]
}
]
'database_name'
是要對其中的所有對象分配和結構完整性進行檢查的數(shù)據(jù)庫。如果未指定,則默認為當前數(shù)據(jù)庫。數(shù)據(jù)庫名稱必須符合標識符的規(guī)則。有關更多信息,請參見使用標識符。
NOINDEX
指定不檢查非系統(tǒng)表的非聚集索引。NOINDEX 減少執(zhí)行總時間,因為它不對用戶定義的表的非聚集索引進行檢查。NOINDEX 對系統(tǒng)表沒有影響,因為 DBCC CHECKDB 總是對所有系統(tǒng)表索引進行檢查。
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
指定 DBCC CHECKDB 修復發(fā)現(xiàn)的錯誤。給定的 database_name 必須在單用戶模式下以使用修復選項,它可以是下列值之一。
值 | 描述 |
---|---|
REPAIR_ALLOW_DATA_LOSS | 執(zhí)行由 REPAIR_REBUILD 完成的所有修復,包括對行和頁進行分配和取消分配以改正分配錯誤、結構行或頁的錯誤,以及刪除已損壞的文本對象。這些修復可能會導致一些數(shù)據(jù)丟失。修復操作可以在用戶事務下完成以允許用戶回滾所做的更改。如果回滾修復,則數(shù)據(jù)庫仍會含有錯誤,應該從備份進行恢復。如果由于所提供修復等級的緣故遺漏某個錯誤的修復,則將遺漏任何取決于該修復的修復。修復完成后,備份數(shù)據(jù)庫。 |
REPAIR_FAST | 進行小的、不耗時的修復操作,如修復非聚集索引中的附加鍵。這些修復可以很快完成,并且不會有丟失數(shù)據(jù)的危險。 |
REPAIR_REBUILD | 執(zhí)行由 REPAIR_FAST 完成的所有修復,包括需要較長時間的修復(如重建索引)。執(zhí)行這些修復時不會有丟失數(shù)據(jù)的危險。 |
WITH
指定有關下列內(nèi)容的選項:返回錯誤信息的數(shù)量、獲得的鎖或估計的 tempdb 要求。
ALL_ERRORMSGS
顯示每個對象不受限制的錯誤數(shù)。如果沒有指定 ALL_ERRORMSGS,每個對象至多顯示 200 個錯誤信息。按對象 ID 對錯誤信息進行排序(從 tempdb 中生成的消息除外)。
NO_INFOMSGS
禁止顯示所有信息性消息(嚴重級別 10)和關于所用空間的報告。
TABLOCK
導致 DBCC CHECKDB 獲得共享表鎖。TABLOCK 可使 DBCC CHECKDB 在負荷較重的數(shù)據(jù)庫上運行得更快,但 DBCC CHECKDB 運行時會減少數(shù)據(jù)庫上可獲得的并發(fā)性。
ESTIMATE ONLY
顯示估計的 tempdb 空間大小,要運行帶有所有其它指定選項的 DBCC CHECKDB 則需要該空間。不執(zhí)行該檢查。
PHYSICAL_ONLY
僅限于檢查頁和記錄標題物理結構的完整性,以及頁對象 ID 和索引 ID 與分配結構之間的一致性。該檢查旨在以較低的開銷檢查數(shù)據(jù)庫的物理一致性,同時還檢測會危及用戶數(shù)據(jù)安全的殘缺頁和常見的硬件故障。PHYSICAL_ONLY 始終意味著 NO_INFOMSGS,并且不能與任何修復選項一起使用。
DBCC CHECKDB 對索引視圖執(zhí)行物理一致性檢查。只用于向后兼容的 NOINDEX 選項也適用于索引視圖上的任何輔助索引。
DBCC CHECKDB 是最安全的修復語句,因為它對最多的可能出現(xiàn)的各種錯誤進行標識和修復。如果只報告數(shù)據(jù)庫中有分配錯誤,請執(zhí)行帶修復選項的 DBCC CHECKALLOC 以對這些錯誤進行修復。然而,若要確保正確修復所有錯誤(包括分配錯誤),請執(zhí)行帶修復選項的 DBCC CHECKDB,而不要執(zhí)行帶修復選項的 DBCC CHECKALLOC。
DBCC CHECKDB 對數(shù)據(jù)庫中所有內(nèi)容的完整性進行驗證。如果當前正在執(zhí)行或最近已執(zhí)行 DBCC CHECKDB,則不需要運行 DBCC CHECKALLOC 或 DBCC CHECKTABLE。
DBCC CHECKDB 執(zhí)行同樣的檢查,仿佛是對數(shù)據(jù)庫中的每個表執(zhí)行 DBCC CHECKALLOC 語句和 DBCC CHECKTABLE 語句。
默認情況下,DBCC CHECKDB 不獲取表鎖。但它獲取架構鎖,該鎖防止對元數(shù)據(jù)進行更改,但允許更改數(shù)據(jù)。獲取的架構鎖將防止用戶得到排它表鎖,在生成聚集索引、除去任何索引或截斷表時需要排它表鎖。
DBCC 語句收集信息,然后掃描日志以查找所做的任何其它更改,并在掃描的結尾將兩組信息合并在一起以產(chǎn)生數(shù)據(jù)的一致視圖。
如果指定 TABLOCK 選項,DBCC CHECKDB 將獲取共享表鎖。這樣可允許某些類別的錯誤有更詳細的錯誤信息,并通過避免使用事務日志數(shù)據(jù)而將所要求的 tempdb 空間大小降為最低。TABLOCK 選項不阻止日志截斷并使命令可以更快地運行。
DBCC CHECKDB 對數(shù)據(jù)庫中每個表的 text、ntext 和 image 頁的鏈接和大小及數(shù)據(jù)庫中所有頁的分配進行檢查。
對于數(shù)據(jù)庫中每個表,DBCC CHECKDB 檢查其:
錯誤表示數(shù)據(jù)庫中的潛在問題,應該立即改正。
默認情況下,DBCC CHECKDB 對對象執(zhí)行并行檢查。并行度由查詢處理器自動確定。最大并行度的配置方式與并行查詢相同。使用 sp_configure 系統(tǒng)存儲過程限制可用于 DBCC 檢查的最大處理器數(shù)。有關更多信息,請參見 max degree of parallelism 選項。
使用跟蹤標記 2528 可禁用并行檢查。有關更多信息,請參見跟蹤標記。
不管是否指定任何選項(NO_INFOMSGS 或 NOINDEX 選項除外),如果未指定數(shù)據(jù)庫,DBCC CHECKDB 返回當前數(shù)據(jù)庫的以下結果集(值可能會變化):
DBCC results for 'master'.
DBCC results for 'sysobjects'.
There are 862 rows in 13 pages for object 'sysobjects'.
DBCC results for 'sysindexes'.
There are 80 rows in 3 pages for object 'sysindexes'.
'...'
DBCC results for 'spt_provider_types'.
There are 23 rows in 1 pages for object 'spt_provider_types'.
CHECKDB found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
如果指定 NO_INFOMSGS 選項,DBCC CHECKDB 將返回以下結果集(消息):
The command(s) completed successfully.
如果指定 ESTIMATEONLY 選項,DBCC CHECKDB 將返回以下結果集。
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
13
(1 row(s) affected)
Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
57
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC CHECKDB 權限默認授予 sysadmin 固定服務器角色或 db_owner 固定數(shù)據(jù)庫角色的成員且不可轉讓。
下例對當前數(shù)據(jù)庫和 pubs 數(shù)據(jù)庫執(zhí)行 DBCC CHECKDB。
-- Check the current database.
DBCC CHECKDB
GO
-- Check the pubs database without nonclustered indexes.
DBCC CHECKDB ('pubs', NOINDEX)
GO
下例檢查當前數(shù)據(jù)庫,并禁止顯示所有信息性消息。
DBCC CHECKDB WITH NO_INFOMSGS相關文章
GO