DBCC CHECKCATALOG (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.
如果将 AdventureWorks2008R2 指定为数据库名,则 DBCC CHECKCATALOG 返回以下内容:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
权限
要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。
示例
以下示例将检查当前数据库和 AdventureWorks2008R2 数据库中的目录完整性。
-- Check the current database.
DBCC CHECKCATALOG;
GO
-- Check the AdventureWorks2008R2 database.
DBCC CHECKCATALOG (AdventureWorks2008R2);
GO