DBCC (Transact-SQL)

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

Transact-SQL 程式設計語言提供可用來作為 SQL Server 資料庫主控台命令的 DBCC 陳述式。

資料庫主控台命令陳述式的分組類別目錄如下。

命令類別目錄 執行
維護 維護資料庫、索引或檔案群組的作業。
其他 啟用追蹤旗標或從記憶體中移除 DLL 之類的其他作業。
資訊 收集和顯示各類型資訊的作業。
驗證 資料庫、資料表、索引、目錄、檔案群組或資料庫頁面配置的驗證作業。

DBCC 命令有輸入參數和傳回值。 所有 DBCC 命令參數都可以接受 Unicode 和 DBCS 常值。

DBCC 內部資料庫快照集使用方式

下列 DBCC 命令會在資料庫引擎所建立的內部唯讀資料庫快照集上運作。 快照集可以防止在執行這些命令時,發生封鎖和並行問題。 如需詳細資訊,請參閱資料庫快照集 (SQL Server)

  • DBCC CHECKALLOC
  • DBCC CHECKCATALOG
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE

當您執行這些 DBCC 命令時,資料庫引擎會建立一個資料庫快照集,且會使其進入交易一致狀態。 之後,DBCC 命令會針對這個快照集來進行檢查。 DBCC 命令完成之後,會卸除這個快照集。

有時候,並不需要或無法建立內部資料庫快照集。 當這個情況發生時,會針對實際的資料庫來執行 DBCC 命令。 如果資料庫在線上,DBCC 命令會利用資料表鎖定來確保所檢查之物件的一致性。 這個行為與指定了 WITH TABLOCK 選項的情況相同。

當在下列情況下執行 DBCC 命令時,系統不會建立內部資料庫快照集:

  • 針對 master 資料庫,SQL Server 的執行個體正在單一使用者模式下執行。
  • 針對 master 以外,但已利用 ALTER DATABASE 陳述式,使資料庫進入單一使用者模式的資料庫。
  • 針對唯讀資料庫。
  • 針對已使用 ALTER DATABASE 陳述式,設定為緊急模式的資料庫。
  • 針對 tempdb。 在這個情況下,系統會因為內部限制而無法建立資料庫快照集。
  • 使用 WITH TABLOCK 選項。 在這個情況下,DBCC 會接受要求,不會建立資料庫快照集。

當針對下列項目來執行命令時,DBCC 命令會使用資料表鎖定,而不是內部資料庫快照集:

  • 唯讀檔案群組
  • FAT 檔案系統
  • 不支援「具名資料流」的磁碟區
  • 不支援「替代資料流」的磁碟區

注意

請嘗試執行 DBCC CHECKALLOC,或 DBCC CHECKDB 的對等項目,透過使用 WITH TABLOCK 選項需要資料庫獨佔 (X) 鎖定。 這個資料庫鎖定無法在 tempdbmaster 上設定,在所有其他資料庫上可能會失敗。

注意

如果無法建立內部資料庫快照集,在針對 master 執行 DBCC CHECKDB 時會失敗。

DBCC 命令的進度報告

sys.dm_exec_requests 目錄檢視包含 DBCC CHECKDBCHECKFILEGROUPCHECKTABLE 命令的進度和目前執行階段的相關資訊。 percent_complete 資料行指出命令的完成比例,command 資料行則報告命令目前的執行階段。

進度單位的定義會隨著 DBCC 命令目前的執行階段而不同。 有時候,進度會以資料庫頁面的資料粒度來報告;在其他階段,則以單一資料庫或配置修復的資料粒度來報告。 下表描述每個執行階段,以及命令報告進度的資料粒度。

執行階段 描述 進度報告資料粒度
DBCC TABLE CHECK 在這個階段中,會檢查資料庫中各物件的邏輯和實體一致性。 資料庫頁面層級所報告的進度。

每檢查 1000 個資料庫頁面,就會更新進度報告值。
DBCC TABLE REPAIR 如果指定了 REPAIR_FASTREPAIR_REBUILDREPAIR_ALLOW_DATA_LOSS,而且有必須加以修復的物件錯誤,就會在這個階段期間執行資料庫修復。 個別修復層級所報告的進度。

每次修復完成,就會更新計數器。
DBCC ALLOC CHECK 在這個階段期間,會檢查資料庫中的配置結構。

注意:DBCC CHECKALLOC 會執行相同的檢查。
未報告進度
DBCC ALLOC REPAIR 如果指定了 REPAIR_FASTREPAIR_REBUILDREPAIR_ALLOW_DATA_LOSS,而且有必須加以修復的配置錯誤,就會在這個階段期間執行資料庫修復。 未報告進度。
DBCC SYS CHECK 在這個階段期間,會檢查資料庫系統資料表。 資料庫頁面層級所報告的進度。

每檢查 1000 個資料庫頁面,就會更新進度報告值。
DBCC SYS REPAIR 如果指定了 REPAIR_FASTREPAIR_REBUILDREPAIR_ALLOW_DATA_LOSS,而且有必須加以修復的系統資料表錯誤,就會在這個階段期間執行資料庫修復。 個別修復層級所報告的進度。

每次修復完成,就會更新計數器。
DBCC SSB CHECK 在這個階段期間,系統會檢查 SQL Server Service Broker 物件。

注意:此階段在執行 DBCC CHECKTABLE 時不會執行。
未報告進度。
DBCC CHECKCATALOG 在這個階段期間,系統會檢查資料庫目錄的一致性。

注意:此階段在執行 DBCC CHECKTABLE 時不會執行。
未報告進度。
DBCC IVIEW CHECK 在這個階段中,會檢查資料庫中任何索引檢視的邏輯一致性。 在所檢查的個別資料庫檢視層級報告的進度。

資訊陳述式

驗證陳述式

維護陳述式

其他陳述式