檢查指定表或索引視圖的數(shù)據(jù)、索引及 text、ntext 和 image 頁的完整性。
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'
是要對其數(shù)據(jù)頁完整性進(jìn)行檢查的表或索引視圖。表名和視圖名必須符合標(biāo)識符的規(guī)則。有關(guān)更多信息,請參見使用標(biāo)識符。
NOINDEX
指定不檢查非系統(tǒng)表的非聚集索引。
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
指定 DBCC CHECKTABLE 修復(fù)發(fā)現(xiàn)的錯誤。數(shù)據(jù)庫必須在單用戶模式下以使用修復(fù)選項,可以是下列值之一。
值 | 描述 |
---|---|
REPAIR_ALLOW_DATA_LOSS | 執(zhí)行由 REPAIR_REBUILD 完成的所有修復(fù),包括對行和頁進(jìn)行分配和取消分配以改正分配錯誤、結(jié)構(gòu)行或頁的錯誤,以及刪除已損壞的文本對象。這些修復(fù)可能會導(dǎo)致一些數(shù)據(jù)丟失。修復(fù)操作可以在用戶事務(wù)下完成以允許用戶回滾所做的更改。如果回滾修復(fù),則數(shù)據(jù)庫仍會含有錯誤,應(yīng)該從備份進(jìn)行恢復(fù)。如果由于所提供修復(fù)等級的緣故遺漏某個錯誤的修復(fù),則將遺漏任何取決于該修復(fù)的修復(fù)。修復(fù)完成后,備份數(shù)據(jù)庫。 |
REPAIR_FAST | 進(jìn)行小的、不耗時的修復(fù)操作,如修復(fù)非聚集索引中的附加鍵。這些修復(fù)可以很快完成,并且不會有丟失數(shù)據(jù)的危險。 |
REPAIR_REBUILD | 執(zhí)行由 REPAIR_FAST 完成的所有修復(fù),包括需要較長時間的修復(fù)(如重建索引)。執(zhí)行這些修復(fù)時不會有丟失數(shù)據(jù)的危險。 |
index_id
是要對其數(shù)據(jù)頁完整性進(jìn)行檢查的索引標(biāo)識 (ID) 號。如果指定 index_id,DBCC CHECKTABLE 只會對該索引進(jìn)行檢查。
WITH
指定有關(guān)下列內(nèi)容的選項:返回錯誤信息的數(shù)量、獲得的鎖或估計的 tempdb 要求。如果 ALL_ERRORMSGS 和 NO_INFOMSGS 都未指定,則 Microsoft® SQL Server™ 將返回全部錯誤信息。
ALL_ERRORMSGS
顯示所有錯誤信息。如果未指定,SQL Server 就按每個表最多 200 條錯誤信息進(jìn)行顯示。錯誤信息按對象 ID 進(jìn)行排序。
NO_INFOMSGS
禁止顯示所有信息性消息和關(guān)于所用空間的報告。
TABLOCK
導(dǎo)致 DBCC CHECKTABLE 獲得共享表鎖。
ESTIMATE ONLY
顯示估計的 tempdb 空間大小,要運行帶有所有其它指定選項的 DBCC CHECKTABLE 則需要該空間。
PHYSICAL_ONLY
僅限于檢查頁和記錄標(biāo)題物理結(jié)構(gòu)的完整性,以及頁對象 ID 和索引 ID 與分配結(jié)構(gòu)之間的一致性。該檢查旨在以較低的開銷檢查數(shù)據(jù)庫的物理一致性,同時還檢測會危及用戶數(shù)據(jù)安全的殘缺頁和常見的硬件故障。PHYSICAL_ONLY 始終意味著 NO_INFOMSGS,并且不能與任何修復(fù)選項一起使用。
DBCC CHECKTABLE 對表和索引視圖執(zhí)行物理一致性檢查。只用于向后兼容性的 NOINDEX 選項也適用于索引視圖。
對于指定的表,DBCC CHECKTABLE 檢查其:
DBCC CHECKTABLE 對指定表的 text、ntext 和 image 頁的鏈接及大小進(jìn)行檢查。然而,DBCC CHECKTABLE 不驗證數(shù)據(jù)庫中所有分配結(jié)構(gòu)的一致性。使用 DBCC CHECKALLOC 進(jìn)行此驗證。
默認(rèn)情況下,DBCC CHECKTABLE 不獲取表鎖。但它獲取架構(gòu)鎖,該鎖阻止對元數(shù)據(jù)進(jìn)行更改,但允許更改數(shù)據(jù)。DBCC 語句收集信息,然后掃描任何日志以查找其它所做的任何更改,在掃描的結(jié)尾將兩組信息合并在一起以產(chǎn)生數(shù)據(jù)的一致視圖。
如果指定 TABLOCK 選項,DBCC CHECKTABLE 獲取共享表鎖。這樣可允許某些類別的錯誤有更詳細(xì)的錯誤信息,并通過避免使用事務(wù)日志數(shù)據(jù)而將所要求的 tempdb 空間大小降為最低。
若要對數(shù)據(jù)庫中每個表執(zhí)行 DBCC CHECKTABLE,請使用 DBCC CHECKDB。
默認(rèn)情況下,DBCC CHECKTABLE 對對象執(zhí)行并行檢查。并行度由查詢處理器自動確定。最大并行度的配置方式與并行查詢相同。使用 sp_configure 系統(tǒng)存儲過程限制可用于 DBCC 檢查的最大處理器數(shù)。有關(guān)更多信息,請參見 max degree of parallelism 選項。
使用跟蹤標(biāo)記 2528 可禁用并行檢查。有關(guān)更多信息,請參見跟蹤標(biāo)記。
DBCC CHECKTABLE 返回以下結(jié)果集(如果只指定表名或如果提供任意選項,都返回與之相同的結(jié)果集);下例指定 pubs 數(shù)據(jù)庫中的 authors 表(值可能會有變化):
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 選項,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ù)庫角色的成員或表的所有者且不可轉(zhuǎn)讓。
下例檢查 authors 表的數(shù)據(jù)頁完整性。
DBCC CHECKTABLE ('authors')
GO
下例對 authors 表的數(shù)據(jù)頁完整性進(jìn)行檢查,但不檢查非聚集索引。
DBCC CHECKTABLE ('authors') WITH PHYSICAL_ONLY
GO
下例對通過訪問 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