DBCC CHECKCATALOG (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例

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

Transact-SQL 语法约定

语法

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

注意

若要查看 SQL Server 2014 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

database_name | database_id | 0

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

WITH NO_INFOMSGS

取消显示所有信息性消息。

备注

DBCC CHECKCATALOG 命令完成后,会将一条消息写入 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.

如果 AdventureWorks2022 指定为数据库名称,则 DBCC CHECKCATALOG 返回:

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

权限

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

示例

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

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

请参阅