DBCC CHECKCATALOG (Transact-SQL)

检查指定数据库内的目录一致性。数据库必须联机。

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

语法

DBCC CHECKCATALOG 
[ 
        ( 
        database_name | database_id | 0
        )
]
    [ WITH NO_INFOMSGS ] 

参数

  • database_name | database_id | 0
    要检查其目录一致性的数据库的名称和 ID。如果未指定,或者指定为 0,则使用当前数据库。数据库名称必须符合标识符规则。

  • WITH NO_INFOMSGS
    取消显示所有信息性消息。

注释

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

状态

说明

0

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

1

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

2

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

3

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

4

检测到断定或访问违规。

5

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

DBCC CHECKCATALOG 在系统元数据表之间执行各种一致性检查。DBCC CHECKCATALOG 使用内部数据库快照来提供需要执行这些检查的事务一致性。有关详细信息,请参阅了解数据库快照中的稀疏文件大小DBCC (Transact-SQL) 中的“DBCC 内部数据库快照用法”部分。

如果无法创建快照,则 DBCC CHECKCATALOG 将获取一个排他数据库锁以获得要求的一致性。如果检测到任何不一致,则无法修复这些不一致问题,必须使用备份来还原数据库。

注意注意

tempdb 运行 DBCC CHECKCATALOG 不会执行任何检查。这是因为,为了提高性能,不允许对 tempdb 使用数据库快照。这意味着无法获得所需的事务一致性。回收服务器以解析任何 tempdb 元数据问题。

注意注意

DBCC CHECKCATALOG 不会检查 FILESTREAM 数据。FILESTREAM 在文件系统中存储二进制大型对象 (BLOB)。

DBCC CHECKCATALOG 仍作为 DBCC CHECKDB 的一部分运行。

结果集

如果未指定数据库,则 DBCC CHECKCATALOG 返回以下内容:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

如果将 AdventureWorks 指定为数据库名,则 DBCC CHECKCATALOG 返回以下内容:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

权限

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

示例

以下示例将检查当前数据库和 AdventureWorks 数据库中的目录完整性。

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