檢查指定表或索引視圖的數(shù)據(jù)、索引及 text、ntext 和 image 頁(yè)的完整性。
DBCC CHECKTABLE
( 'table_name' | 'view_name'
[ , NOINDEX
| index_id
| { REPAIR_ALLOW_DATA_LOSS
| REPAIR_FAST
| REPAIR_REBUILD }
]
) [ WITH { [ ALL_ERRORMSGS | NO_INFOMSGS ]
[ , [ TABLOCK ] ]
[ , [ ESTIMATEONLY ] ]
[ , [ PHYSICAL_ONLY ] ]
}
]
參數(shù)
'table_name' | 'view_name'
是要對(duì)其數(shù)據(jù)頁(yè)完整性進(jìn)行檢查的表或索引視圖。表名和視圖名必須符合標(biāo)識(shí)符的規(guī)則。有關(guān)更多信息,請(qǐng)參見使用標(biāo)識(shí)符。
NOINDEX
指定不檢查非系統(tǒng)表的非聚集索引。
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
指定 DBCC CHECKTABLE 修復(fù)發(fā)現(xiàn)的錯(cuò)誤。數(shù)據(jù)庫(kù)必須在單用戶模式下以使用修復(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)。 |
index_id
是要對(duì)其數(shù)據(jù)頁(yè)完整性進(jìn)行檢查的索引標(biāo)識(shí) (ID) 號(hào)。如果指定 index_id,DBCC CHECKTABLE 只會(huì)對(duì)該索引進(jìn)行檢查。
WITH
指定有關(guān)下列內(nèi)容的選項(xiàng):返回錯(cuò)誤信息的數(shù)量、獲得的鎖或估計(jì)的 tempdb 要求。如果 ALL_ERRORMSGS 和 NO_INFOMSGS 都未指定,則 Microsoft® SQL Server™ 將返回全部錯(cuò)誤信息。
ALL_ERRORMSGS
顯示所有錯(cuò)誤信息。如果未指定,SQL Server 就按每個(gè)表最多 200 條錯(cuò)誤信息進(jìn)行顯示。錯(cuò)誤信息按對(duì)象 ID 進(jìn)行排序。
NO_INFOMSGS
禁止顯示所有信息性消息和關(guān)于所用空間的報(bào)告。
TABLOCK
導(dǎo)致 DBCC CHECKTABLE 獲得共享表鎖。
ESTIMATE ONLY
顯示估計(jì)的 tempdb 空間大小,要運(yùn)行帶有所有其它指定選項(xiàng)的 DBCC CHECKTABLE 則需要該空間。
PHYSICAL_ONLY
僅限于檢查頁(yè)和記錄標(biāo)題物理結(jié)構(gòu)的完整性,以及頁(yè)對(duì)象 ID 和索引 ID 與分配結(jié)構(gòu)之間的一致性。該檢查旨在以較低的開銷檢查數(shù)據(jù)庫(kù)的物理一致性,同時(shí)還檢測(cè)會(huì)危及用戶數(shù)據(jù)安全的殘缺頁(yè)和常見的硬件故障。PHYSICAL_ONLY 始終意味著 NO_INFOMSGS,并且不能與任何修復(fù)選項(xiàng)一起使用。
DBCC CHECKTABLE 對(duì)表和索引視圖執(zhí)行物理一致性檢查。只用于向后兼容性的 NOINDEX 選項(xiàng)也適用于索引視圖。
對(duì)于指定的表,DBCC CHECKTABLE 檢查其:
DBCC CHECKTABLE 對(duì)指定表的 text、ntext 和 image 頁(yè)的鏈接及大小進(jìn)行檢查。然而,DBCC CHECKTABLE 不驗(yàn)證數(shù)據(jù)庫(kù)中所有分配結(jié)構(gòu)的一致性。使用 DBCC CHECKALLOC 進(jìn)行此驗(yàn)證。
默認(rèn)情況下,DBCC CHECKTABLE 不獲取表鎖。但它獲取架構(gòu)鎖,該鎖阻止對(duì)元數(shù)據(jù)進(jìn)行更改,但允許更改數(shù)據(jù)。DBCC 語(yǔ)句收集信息,然后掃描任何日志以查找其它所做的任何更改,在掃描的結(jié)尾將兩組信息合并在一起以產(chǎn)生數(shù)據(jù)的一致視圖。
如果指定 TABLOCK 選項(xiàng),DBCC CHECKTABLE 獲取共享表鎖。這樣可允許某些類別的錯(cuò)誤有更詳細(xì)的錯(cuò)誤信息,并通過避免使用事務(wù)日志數(shù)據(jù)而將所要求的 tempdb 空間大小降為最低。
若要對(duì)數(shù)據(jù)庫(kù)中每個(gè)表執(zhí)行 DBCC CHECKTABLE,請(qǐng)使用 DBCC CHECKDB。
默認(rèn)情況下,DBCC CHECKTABLE 對(duì)對(duì)象執(zhí)行并行檢查。并行度由查詢處理器自動(dòng)確定。最大并行度的配置方式與并行查詢相同。使用 sp_configure 系統(tǒng)存儲(chǔ)過程限制可用于 DBCC 檢查的最大處理器數(shù)。有關(guān)更多信息,請(qǐng)參見 max degree of parallelism 選項(xiàng)。
使用跟蹤標(biāo)記 2528 可禁用并行檢查。有關(guān)更多信息,請(qǐng)參見跟蹤標(biāo)記。
DBCC CHECKTABLE 返回以下結(jié)果集(如果只指定表名或如果提供任意選項(xiàng),都返回與之相同的結(jié)果集);下例指定 pubs 數(shù)據(jù)庫(kù)中的 authors 表(值可能會(huì)有變化):
DBCC results for 'authors'.
There are 23 rows in 1 pages for object 'authors'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
如果指定 ESTIMATEONLY 選項(xiàng),DBCC CHECKTABLE 將返回以下結(jié)果集。
Estimated TEMPDB space needed for CHECKTABLES (KB)
--------------------------------------------------
2
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC CHECKTABLE 權(quán)限默認(rèn)授予 sysadmin 固定服務(wù)器角色、db_owner 固定數(shù)據(jù)庫(kù)角色的成員或表的所有者且不可轉(zhuǎn)讓。
下例檢查 authors 表的數(shù)據(jù)頁(yè)完整性。
DBCC CHECKTABLE ('authors')
GO
下例對(duì) authors 表的數(shù)據(jù)頁(yè)完整性進(jìn)行檢查,但不檢查非聚集索引。
DBCC CHECKTABLE ('authors') WITH PHYSICAL_ONLY
GO
下例對(duì)通過訪問 sysindexes 獲得的特定索引進(jìn)行檢查。
USE pubs相關(guān)文章
DECLARE @indid int
SELECT @indid = indid
FROM sysindexes
WHERE id = OBJECT_ID('authors') AND name = 'aunmind'
DBCC CHECKTABLE ('authors', @indid)
GO