檢查指定數(shù)據(jù)庫(kù)的磁盤空間分配結(jié)構(gòu)的一致性。
DBCC CHECKALLOC
( 'database_name'
[ , NOINDEX
|
{ REPAIR_ALLOW_DATA_LOSS
| REPAIR_FAST
| REPAIR_REBUILD
} ]
) [ WITH { [ ALL_ERRORMSGS | NO_INFOMSGS ]
[ , [ TABLOCK ] ]
[ , [ ESTIMATEONLY ] ]
}
]
'database_name'
是數(shù)據(jù)庫(kù),要對(duì)其分配和頁(yè)使用情況進(jìn)行檢查。如果未指定,則默認(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)表的非聚集索引。
說(shuō)明 NOINDEX 僅為向后兼容性保留。執(zhí)行 DBCC CHECKALLOC 時(shí),對(duì)所有索引進(jìn)行檢查。
REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
指定 DBCC CHECKALLOC 修復(fù)發(fā)現(xiàn)的錯(cuò)誤。給定的 database_name 必須在單用戶模式下以使用這些修復(fù)選項(xiàng)之一,可以為下列值中的一個(gè)值。
值 | 描述 |
---|---|
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 和 NO_INFOMSGS 都未指定,則 Microsoft® SQL Server™ 2000 將返回全部錯(cuò)誤信息。
ALL_ERRORMSGS
顯示所有錯(cuò)誤信息。如果未指定,SQL Server 就按每個(gè)對(duì)象最多 200 條錯(cuò)誤信息進(jìn)行顯示。
NO_INFOMSGS
禁止顯示所有信息性消息和關(guān)于所用空間的報(bào)告。
TABLOCK
導(dǎo)致 DBCC 命令獲取共享表鎖。對(duì) DBCC CHECKALLOC 忽略該參數(shù)。
ESTIMATE ONLY
顯示與所有其它指定選項(xiàng)一起運(yùn)行 DBCC CHECKALLOC 時(shí)所需的估計(jì) tempdb 空間大小。
DBCC CHECKALLOC 對(duì)數(shù)據(jù)庫(kù)中的分配和頁(yè)使用(包括索引視圖)情況進(jìn)行檢查。只用于向后兼容性的 NOINDEX 選項(xiàng)也適用于索引視圖。
如果已經(jīng)執(zhí)行 DBCC CHECKDB,則不必執(zhí)行 DBCC CHECKALLOC。DBCC CHECKDB 是 DBCC CHECKALLOC 的超集,除了對(duì)索引結(jié)構(gòu)和數(shù)據(jù)完整性進(jìn)行檢查之外,它還包括對(duì)分配進(jìn)行檢查。
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ù)所有錯(cuò)誤(包括分配錯(cuò)誤),請(qǐng)執(zhí)行帶有修復(fù)選項(xiàng)的 DBCC CHECKDB。DBCC CHECKALLOC 消息按對(duì)象 ID 進(jìn)行排序(從 tempdb 中生成的消息除外)。DBCC CHECKALLOC 對(duì)數(shù)據(jù)庫(kù)中所有數(shù)據(jù)頁(yè)的分配進(jìn)行驗(yàn)證;而 DBCC CHECKDB 除了對(duì)分配信息進(jìn)行驗(yàn)證外,還對(duì)數(shù)據(jù)存儲(chǔ)中使用的頁(yè)信息進(jìn)行驗(yàn)證。
默認(rèn)情況下,DBCC CHECKALLOC 不獲取表鎖。相反,它獲取架構(gòu)鎖,該鎖在 DBCC CHECKALLOC 正在執(zhí)行時(shí)阻止對(duì)元數(shù)據(jù)進(jìn)行更改,但允許更改數(shù)據(jù)。DBCC 語(yǔ)句收集信息,然后掃描日志以查找所做的任何其它更改,并在掃描的結(jié)尾將兩組信息合并在一起以產(chǎn)生數(shù)據(jù)的一致視圖。
下表描述 DBCC CHECKALLOC 返回的信息。
項(xiàng)目 | 描述 |
---|---|
FirstIAM | 僅限內(nèi)部使用。 |
Root | 僅限內(nèi)部使用。 |
Dpages | 來(lái)自 sysindexes 的數(shù)據(jù)頁(yè)計(jì)數(shù)。 |
Pages used | 分配的頁(yè)。 |
Dedicated extents | 分配給對(duì)象的擴(kuò)展盤區(qū)。 如果使用混合分配頁(yè),可能有未分配擴(kuò)展盤區(qū)的頁(yè)。 |
DBCC CHECKALLOC 報(bào)表的第二部分是每個(gè)文件中每個(gè)索引的分配摘要。該摘要使用戶對(duì)數(shù)據(jù)的分布情況有一個(gè)大概的了解。
項(xiàng)目 | 描述 |
---|---|
Reserved | 分配給索引的頁(yè)和已分配的擴(kuò)展盤區(qū)中未使用的頁(yè)。 |
Used | 分配給索引和索引正在使用的頁(yè)。 |
不管是否指定任何選項(xiàng)(WITH NO_INFOMSGS 除外),DBCC CHECKALLOC 都會(huì)返回以下的結(jié)果集(值可能會(huì)變化):
DBCC results for 'master'.
***************************************************************
Table sysobjects Object ID 1.
Index ID 1 FirstIAM (1:11) Root (1:12) Dpages 22.
Index ID 1. 24 pages used in 5 dedicated extents.
Index ID 2 FirstIAM (1:1368) Root (1:1362) Dpages 10.
Index ID 2. 12 pages used in 2 dedicated extents.
Index ID 3 FirstIAM (1:1392) Root (1:1408) Dpages 4.
Index ID 3. 6 pages used in 0 dedicated extents.
Total number of extents is 7.
***************************************************************
'...'
***************************************************************
Table spt_server_info Object ID 1938105945.
Index ID 1 FirstIAM (1:520) Root (1:508) Dpages 1.
Index ID 1. 3 pages used in 0 dedicated extents.
Total number of extents is 0.
***************************************************************
Processed 52 entries in sysindexes for database ID 1.
File 1. Number of extents = 210, used pages = 1126, reserved pages = 1280.
File 1 (number of mixed extents = 73, mixed pages = 184).
Object ID 1, Index ID 0, data extents 5, pages 24, mixed extent pages 9.
'...'
Object ID 1938105945, Index ID 0, data extents 0, pages 3, mixed extent pages 3.
Total number of extents = 210, used pages = 1126, reserved pages = 1280 in this database.
(number of mixed extents = 73, mixed pages = 184) in this database.
CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
如果指定 ESTIMATE ONLY 選項(xiàng),DBCC CHECKALLOC 會(huì)返回以下結(jié)果集。
Estimated TEMPDB space needed for CHECKALLOC (KB)
-------------------------------------------------
34
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
DBCC CHECKALLOC 權(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 CHECKALLOC。
-- Check the current database.相關(guān)文章
DBCC CHECKALLOC
GO
-- Check the pubs database.
DBCC CHECKALLOC ('pubs')
GO