DBCC (Transact-SQL)
Transact-SQL 程式設計語言提供可用來作為 SQL Server 資料庫主控台命令的 DBCC 陳述式。
資料庫主控台命令陳述式的分組類別目錄如下。
命令類別目錄 |
執行 |
---|---|
維護 |
維護資料庫、索引或檔案群組的作業。 |
其他 |
啟用追蹤旗標或從記憶體中移除 DLL 之類的其他作業。 |
資訊 |
收集和顯示各類型資訊的作業。 |
驗證 |
資料庫、資料表、索引、目錄、檔案群組或資料庫頁面配置的驗證作業。 |
DBCC 命令有輸入參數和傳回值。 所有 DBCC 命令參數都可以接受 Unicode 和 DBCS 常值。
DBCC 內部資料庫快照集使用方式
下列 DBCC 命令會在 Database Engine 所建立的內部唯讀資料庫快照集上運作。 這可以防止在執行這些命令時,發生封鎖和並行問題。 如需詳細資訊,請參閱<資料庫快照集 (SQL Server)>。
DBCC CHECKALLOC |
DBCC CHECKDB |
DBCC CHECKCATALOG |
DBCC CHECKFILEGROUP |
DBCC CHECKTABLE |
|
當您執行這些 DBCC 命令時,Database Engine 會建立一個資料庫快照集,且會使它進入交易一致狀態。 之後,DBCC 命令會針對這個快照集來進行檢查。 DBCC 命令完成之後,會卸除這個快照集。
有時候,並不需要或無法建立內部資料庫快照集。 當這個情況發生時,會針對實際的資料庫來執行 DBCC 命令。 如果資料庫在線上,DBCC 命令會利用資料表鎖定來確保所檢查之物件的一致性。 這個行為與指定了 WITH TABLOCK 選項的情況相同。
當在下列情況下執行 DBCC 命令時,不會建立內部資料庫快照集:
針對 master,且 SQL Server 執行個體在執行單一使用者模式。
針對 master 以外的資料庫,但已利用 ALTER DATABASE 陳述式,使資料庫進入單一使用者模式。
針對唯讀資料庫。
針對已利用 ALTER DATABASE 陳述式,設定為緊急模式的資料庫。
針對 tempdb。 在這個情況下,會因為內部限制而無法建立資料庫快照集。
使用 WITH TABLOCK 選項。 在這個情況下,DBCC 會接受要求,不會建立資料庫快照集。
當針對下列項目來執行命令時,DBCC 命令會使用資料表鎖定,而不是內部資料庫快照集:
唯讀檔案群組
FAT 檔案系統
不支援「具名資料流」的磁碟區。
不支援「替代資料流」的磁碟區。
注意
試圖利用 WITH TABLOCK 選項來執行 DBCC CHECKALLOC 或 DBCC CHECKDB 的對等部分,需要資料庫 X 鎖定。這個資料庫鎖定無法設定在 tempdb 或 master 上,在所有其他資料庫上,也可能會失敗。
注意
如果無法建立內部資料庫快照集,在針對 master 執行 DBCC CHECKDB 時會失敗。
DBCC 命令的進度報告
sys.dm_exec_requests 目錄檢視包含 DBCC CHECKDB、CHECKFILEGROUP 和 CHECKTABLE 命令的進度和目前執行階段的相關資訊。 percent_complete 資料行指出命令的完成比例,command 資料行則報告命令目前的執行階段。
進度單位的定義會隨著 DBCC 命令目前的執行階段而不同。 有時候,進度會以資料庫頁面的資料粒度來報告;在其他階段,則以單一資料庫或配置修復的資料粒度來報告。 下表描述每個執行階段,以及命令報告進度的資料粒度。
執行階段 |
說明 |
進度報告資料粒度 |
---|---|---|
DBCC TABLE CHECK |
在這個階段中,會檢查資料庫中各物件的邏輯和實體一致性。 |
資料庫頁面層級所報告的進度。 每檢查 1000 個資料庫頁面,就會更新進度報告值。 |
DBCC TABLE REPAIR |
如果指定了 REPAIR_FAST、REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS,而且有必須加以修復的物件錯誤,就會在這個階段期間執行資料庫修復。 |
個別修復層級所報告的進度。 每次修復完成,就會更新計數器。 |
DBCC ALLOC CHECK |
在這個階段期間,會檢查資料庫中的配置結構。 注意 DBCC CHECKALLOC 會執行相同的檢查。 |
不報告進度 |
DBCC ALLOC REPAIR |
如果指定了 REPAIR_FAST、REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS,而且有必須加以修復的配置錯誤,就會在這個階段期間執行資料庫修復。 |
不報告進度。 |
DBCC SYS CHECK |
在這個階段期間,會檢查資料庫系統資料表。 |
資料庫頁面層級所報告的進度。 每檢查 1000 個資料庫頁面,就會更新進度報告值。 |
DBCC SYS REPAIR |
如果指定了 REPAIR_FAST、REPAIR_REBUILD 或 REPAIR_ALLOW_DATA_LOSS,而且有必須加以修復的系統資料表錯誤,就會在這個階段期間執行資料庫修復。 |
個別修復層級所報告的進度。 每次修復完成,就會更新計數器。 |
DBCC SSB CHECK |
在這個階段期間,會檢查 SQL Server Service Broker 物件。 注意 當執行 DBCC CHECKTABLE 時,不會執行這個階段。 |
不報告進度。 |
DBCC CHECKCATALOG |
在這個階段期間,會檢查資料庫目錄的一致性。 注意 當執行 DBCC CHECKTABLE 時,不會執行這個階段。 |
不報告進度。 |
DBCC IVIEW CHECK |
在這個階段中,會檢查資料庫中任何索引檢視的邏輯一致性。 |
在所檢查的個別資料庫檢視層級報告的進度。 |
資訊陳述式
驗證陳述式
|