DBCC CHECKCATALOG (Transact-SQL)

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

主題連結圖示Transact-SQL 語法慣例

語法

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

引數

  • database_name | database_id | 0
    這是要檢查目錄一致性的資料庫名稱或識別碼。若未指定,或指定 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