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 使用内部数据库快照来提供需要执行这些检查的事务一致性。 有关详细信息,请参阅查看数据库快照的稀疏文件大小 (Transact-SQL)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.

如果将 AdventureWorks2012 指定为数据库名,则 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 AdventureWorks2012 database.
DBCC CHECKCATALOG (AdventureWorks2012);
GO

请参阅

参考

DBCC (Transact-SQL)

系统表 (Transact-SQL)