Transact-SQL 参考

DBCC CHECKALLOC

检查指定数据库的磁盘空间分配结构的一致性。

语法

DBCC CHECKALLOC
    ( 'database_name'
            
[ , NOINDEX
                |
                { REPAIR_ALLOW_DATA_LOSS
                    | REPAIR_FAST
                    | REPAIR_REBUILD
                } ]
    )    [ WITH { [ ALL_ERRORMSGS | NO_INFOMSGS ]
                    [ , [ TABLOCK ] ]
                    [ , [ ESTIMATEONLY ] ]
                }
        ]

参数

'database_name'

是数据库,要对其分配和页使用情况进行检查。如果未指定,则默认为当前数据库。数据库名称必须符合标识符的规则。有关更多信息,请参见使用标识符

NOINDEX

指定不检查非系统表的非聚集索引。

说明  NOINDEX 仅为向后兼容性保留。执行 DBCC CHECKALLOC 时,对所有索引进行检查。

REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD

指定 DBCC CHECKALLOC 修复发现的错误。给定的 database_name 必须在单用户模式下以使用这些修复选项之一,可以为下列值中的一个值。

描述
REPAIR_ALLOW_DATA_LOSS 执行由 REPAIR_REBUILD 完成的所有修复,包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会导致一些数据丢失。修复操作可以在用户事务下完成,以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。修复完成后,备份数据库。
REPAIR_FAST 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,并且不会有丢失数据的危险。
REPAIR_REBUILD 执行由 REPAIR_FAST 完成的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险。

WITH

指定有关下列内容的选项:返回错误信息的数量、获得的锁或估计的 tempdb 要求。如果 ALL_ERRORMSGS 和 NO_INFOMSGS 都未指定,则 Microsoft® SQL Server™ 2000 将返回全部错误信息。

ALL_ERRORMSGS

显示所有错误信息。如果未指定,SQL Server 就按每个对象最多 200 条错误信息进行显示。

NO_INFOMSGS

禁止显示所有信息性消息和关于所用空间的报告。

TABLOCK

导致 DBCC 命令获取共享表锁。对 DBCC CHECKALLOC 忽略该参数。

ESTIMATE ONLY

显示与所有其它指定选项一起运行 DBCC CHECKALLOC 时所需的估计 tempdb 空间大小。

注释

DBCC CHECKALLOC 对数据库中的分配和页使用(包括索引视图)情况进行检查。只用于向后兼容性的 NOINDEX 选项也适用于索引视图。

如果已经执行 DBCC CHECKDB,则不必执行 DBCC CHECKALLOC。DBCC CHECKDB 是 DBCC CHECKALLOC 的超集,除了对索引结构和数据完整性进行检查之外,它还包括对分配进行检查。

DBCC CHECKDB 是最安全的修复语句,因为它对最多的可能出现的错误进行标识和修复。如果只报告数据库中有分配错误,请执行带有修复选项的 DBCC CHECKALLOC 以对这些错误进行更正。然而,若要确保正确修复所有错误(包括分配错误),请执行带有修复选项的 DBCC CHECKDB。DBCC CHECKALLOC 消息按对象 ID 进行排序(从 tempdb 中生成的消息除外)。DBCC CHECKALLOC 对数据库中所有数据页的分配进行验证;而 DBCC CHECKDB 除了对分配信息进行验证外,还对数据存储中使用的页信息进行验证。

默认情况下,DBCC CHECKALLOC 不获取表锁。相反,它获取架构锁,该锁在 DBCC CHECKALLOC 正在执行时阻止对元数据进行更改,但允许更改数据。DBCC 语句收集信息,然后扫描日志以查找所做的任何其它更改,并在扫描的结尾将两组信息合并在一起以产生数据的一致视图。

结果集

下表描述 DBCC CHECKALLOC 返回的信息。

项目 描述
FirstIAM 仅限内部使用。
Root 仅限内部使用。
Dpages 来自 sysindexes 的数据页计数。
Pages used 分配的页。
Dedicated extents 分配给对象的扩展盘区。

如果使用混合分配页,可能有未分配扩展盘区的页。


DBCC CHECKALLOC 报表的第二部分是每个文件中每个索引的分配摘要。该摘要使用户对数据的分布情况有一个大概的了解。

项目 描述
Reserved 分配给索引的页和已分配的扩展盘区中未使用的页。
Used 分配给索引和索引正在使用的页。

不管是否指定任何选项(WITH NO_INFOMSGS 除外),DBCC CHECKALLOC 都会返回以下的结果集(值可能会变化):

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 选项,DBCC CHECKALLOC 会返回以下结果集。

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 权限默认授予 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员且不可转让。

示例

下例对当前数据库和 pubs 数据库执行 DBCC CHECKALLOC。

-- Check the current database.
DBCC CHECKALLOC
GO
-- Check the pubs database.
DBCC CHECKALLOC ('pubs')
GO

请参见

DBCC

DBCC NEWALLOC

空间分配和重新使用

sp_dboption