DBCC CHECKCATALOG (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

檢查指定資料庫內的目錄一致性。 資料庫必須在線上。

Transact-SQL 語法慣例

Syntax

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

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

database_name | database_id | 0

這是要檢查目錄一致性的資料庫名稱或識別碼。 若未指定,或指定 0,就會使用目前的資料庫。 資料庫名稱必須符合識別碼的規則。

WITH NO_INFOMSGS

隱藏所有參考訊息。

備註

DBCC CHECKCATALOG 命令執行完成之後,SQL Server 錯誤記錄檔中會寫入一則訊息。 如果 DBCC 命令執行成功,該訊息將指出命令已順利完成,並顯示命令執行的時間量。 如果 DBCC 命令由於發生錯誤而在完成檢查之前停止執行,則訊息中會指出命令已經終止,並顯示狀態值以及命令執行的時間量。 下表列出並描述可以包含在訊息中的狀態值。

State 描述
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 上無法使用資料庫快照集。 這表示無法取得必要的交易一致性。 重新啟動 Database Engine 服務以解決任何 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

另請參閱