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