DBCC CHECKALLOC (Transact-SQL)

更新日期: 2008 年 11 月 17 日

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

主题链接图标Transact-SQL 语法约定

语法

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

参数

  • database_name | database_id | 0
    要检查其分配和页使用情况的数据库的名称或 ID。如果未指定,或者指定为 0,则使用当前数据库。

    数据库名称必须符合标识符规则。

  • NOINDEX
    指定不检查用户表的非聚集索引。

    ms188422.note(zh-cn,SQL.90).gif注意:
    维护 NOINDEX 只是为了实现向后兼容性,并不会影响 DBCC CHECKALLOC。
  • REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
    指定 DBCC CHECKALLOC 修复找到的错误。database_name 必须处于单用户模式。

    • REPAIR_ALLOW_DATA_LOSS
      试图修复找到的任何错误。这些修复可能会导致一些数据丢失。REPAIR_ALLOW_DATA_LOSS 是允许修复分配错误的唯一选项。
    • REPAIR_FAST
      保留语法只是为了向后兼容。未执行修复操作。
    • REPAIR_REBUILD
      不适用。
    ms188422.note(zh-cn,SQL.90).gif重要提示:
    仅将 REPAIR 选项作为最后手段使用。若要修复错误,建议您通过备份进行还原。修复操作不会考虑表本身或表之间可能存在的任何约束。如果指定的表与一个或多个约束有关,建议您在修复操作后运行 DBCC CHECKCONSTRAINTS。如果必须使用 REPAIR,则运行不带有修复选项的 DBCC CHECKDB 来查找要使用的修复级别。如果使用 REPAIR_ALLOW_DATA_LOSS 级别,则建议您在运行带有此选项的 DBCC CHECKDB 之前备份数据库。
  • WITH
    启用要指定的选项。
  • ALL_ERRORMSGS
    显示所有错误消息。在 SQL Server 2005 Service Pack 3 (SP3) 中,默认情况下显示所有错误消息。指定或省略此选项都不起作用。在 SQL Server 的早期版本中,如果未指定 ALL_ERRORMSGS,则只为每个对象显示前 200 条错误消息。
  • NO_INFOMSGS
    取消所有信息性消息和关于所用空间的报告。
  • TABLOCK
    使 DBCC 命令获取排他数据库锁。
  • ESTIMATE ONLY
    显示当指定所有其他选项时运行 DBCC CHECKALLOC 所需的估计 tempdb 空间大小。

结果集

下表说明了 DBCC CHECKALLOC 返回的信息。

说明

FirstIAM

仅供内部使用。

Root

仅供内部使用。

Dpages

数据页计数。

Pages used

分配的页。

Dedicated extents

分配给对象的区数。

如果使用混合分配页,则可能有未分配区数的页。

DBCC CHECKALLOC 还会报告每条索引和每个文件中分区的分配摘要。此摘要说明了数据的分布情况。

说明

Reserved pages

分配给索引的页和已分配区数中未使用的页。

Used pages

分配给索引和索引正在使用的页。

Partition ID

仅供内部使用。

Alloc unit ID

仅供内部使用。

行内数据

页包含索引或堆数据。

LOB 数据

页包含 varchar(max)nvarchar(max)varbinary(max)textntextxmlimage 数据。

行溢出数据

页包含已推送到行外的可变长度列数据。

DBCC CHECKALLOC 将返回以下结果集(值可能有所不同),指定了 ESTIMATEONLY 或 NO_INFOMSGS 时除外。

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 results for 'master'. ************************************************************* Table sys.sysrowsetcolumns Object ID 4. Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). FirstIAM (1:98). Root (1:94). Dpages 7. Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). 9 pages used in 1 dedicated extents. Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). FirstIAM (0:0). Root (0:0). Dpages 0. Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). 0 pages used in 0 dedicated extents. Total number of extents is 1. ... ************************************************************* Processed 201 entries in system catalog for database ID 1. File 1. Number of extents = 44, used pages = 300, reserved pages = 345. File 1 (number of mixed extents = 29, mixed pages = 225). Object ID 4, index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data), data extents 1, pages 9, mixed extent pages 8. Object ID 5, index ID 1, partition ID 327680, alloc unit ID 327680 (type In-row data), data extents 0, pages 2, mixed extent pages 2. Object ID 7, index ID 1, partition ID 458752, alloc unit ID 458752 (type In-row data), data extents 0, pages 5, mixed extent pages 5. Object ID 8, index ID 0, partition ID 524288, alloc unit ID 524288 (type In-row data), data extents 0, pages 2, mixed extent pages 2. Object ID 13, index ID 1, partition ID 851968, alloc unit ID 851968 (type In-row data), data extents 1, pages 9, mixed extent pages 8. Object ID 15, index ID 1, partition ID 983040, alloc unit ID 983040 (type In-row data), data extents 0, pages 2, mixed extent pages 2. Object ID 26, index ID 1, partition ID 281474978414592, alloc unit ID 1703937 (type In-row data), data extents 0, pages 3, mixed extent pages 3. Object ID 27, index ID 1, partition ID 281474978480128, alloc unit ID 1769473 (type In-row data), data extents 0, pages 3, mixed extent pages 3. Object ID 27, index ID 2, partition ID 562949955190784, alloc unit ID 1769474 (type In-row data), index extents 0, pages 3, mixed extent pages 3. ... Object ID 1179151246, index ID 1, partition ID 72057594038845440, alloc unit ID 13435136 (type In-row data), data extents 2, pages 18, mixed extent pages 8. Object ID 1179151246, index ID 2, partition ID 72057594038910976, alloc unit ID 13566208 (type In-row data), index extents 1, pages 16, mixed extent pages 8. Object ID 1911677858, index ID 0, partition ID 72057594039631872, alloc unit ID 15073536 (type In-row data), data extents 0, pages 2, mixed extent pages 2. Total number of extents = 41, used pages = 289, reserved pages = 323 in this database. (number of mixed extents = 27, mixed pages = 211) 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.

如果指定了 ESTIMATEONLY,则 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 将检查数据库中所有页的分配,而不管其所属的页类型或对象类型。它还可验证各种内部结构,这些结构可用于跟踪这些页以及它们之间的关系。

如果未指定 NO_INFOMSGS,则 DBCC CHECKALLOC 将收集有关数据库中所有对象的空间使用情况信息。然后将这一信息与找到的任何错误一起进行打印。

ms188422.note(zh-cn,SQL.90).gif注意:
DBCC CHECKALLOC 功能包含在 DBCC CHECKDBDBCC CHECKFILEGROUP 中。这意味着您不必将 DBCC CHECKALLOC 与这些语句分开运行。

内部数据库快照

DBCC CHECKALLOC 可使用内部数据库快照来提供执行这些检查所需的事务的一致性。如果无法创建快照,或指定了 TABLOCK,则 DBCC CHECKALLOC 将尝试获取排他 (X) 数据库锁,以获取所需的一致性。有关锁的详细信息,请参阅锁模式

ms188422.note(zh-cn,SQL.90).gif注意:
在 SQL Server 2005 中,对 tempdb 运行 DBCC CHECKALLOC 不会执行任何检查。这是因为,为了提高性能,不允许对 tempdb 使用数据库快照。这意味着无法获得所需的事务一致性。停止和启动 MSSQLSERVER 服务可以解决任何 tempdb 分配问题。此操作将删除并创建 tempdb。

了解 DBCC 错误消息

DBCC CHECKALLOC 命令完成后,会将一条消息写入 SQL Server 错误日志。如果 DBCC 命令成功执行,则消息指示成功完成以及命令运行的时间。如果 DBCC 命令在完成检查之前由于错误而停止,则消息将指示命令已终止,并指示状态值和命令运行的时间。下表列出并说明了此消息中可包含的状态值。

状态 说明

0

引发了错误号 8930。这指示导致 DBCC 命令终止的元数据损坏。

1

出现错误号 8967。存在一个内部 DBCC 错误。

2

在紧急模式数据库修复过程中出错。

3

这指示导致 DBCC 命令终止的元数据损坏。

4

检测到断定或访问违规。

5

出现终止了 DBCC 命令的未知错误。

错误报告

在 SQL Server 2005 Service Pack 1 (SP1) 中,一旦 DBCC CHECKALLOC 检测到破坏错误,就将在 SQL Server LOG 目录中创建微型转储文件 (SQLDUMPnnnn.txt)。如果为 SQL Server 实例启用了“功能使用情况数据收集”和“错误报告”功能,该文件将被自动转发给 Microsoft。收集的数据将用于改进 SQL Server 功能。有关详细信息,请参阅错误和使用情况报告设置

转储文件包含 DBCC CHECKALLOC 命令的结果以及其他诊断输出数据。该文件拥有任意访问控制列表 (DACL)。只有 SQL Server 服务帐户和 sysadmin 角色的成员有权进行访问。默认情况下,sysadmin 角色包含 Windows BUILTIN\Administrators 组和本地管理员组的所有成员。如果数据收集进程失败,DBCC 命令不会失败。

纠正错误

如果 DBCC CHECKALLOC 报告了任何错误,则建议您通过数据库备份来还原该数据库,而不是运行修复。如果备份不存在,则运行修复也可纠正报告的错误;但是,纠正这些错误时可能需要删除某些页,进而删除数据。

修复可在用户事务内执行。允许回滚所做的更改。如果回滚所做的更改,则数据库仍将包含错误,因此必须通过备份进行还原。修复完成后,备份该数据库。

权限

要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。

示例

下面的示例将对当前数据库和 AdventureWorks 数据库执行 DBCC CHECKALLOC

-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks database.
DBCC CHECKALLOC (AdventureWorks);
GO

请参阅

参考

DBCC (Transact-SQL)

其他资源

表组织和索引组织
管理对象使用的空间

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2008 年 11 月 17 日

新增内容:
  • ALL_ERRORMSGS 的定义中介绍了 SP3 中的新增功能。

2006 年 4 月 14 日

新增内容:
  • 在“备注”部分中,添加了“错误报告”子部分。此部分描述了 SP1 中的新功能。

2005 年 12 月 5 日

更改的内容:
  • 更正了语法。
  • 向“LOB 数据”中的数据类型列表中添加了 xml
  • 更正了 REPAIR_FAST 定义。此选项不执行修复操作。
  • 向“备注”部分添加了有关写入 SQL Server 错误日志的消息的信息以及状态值的说明。