DBCC (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Transact-SQL プログラミング言語には、SQL Server のデータベース コンソール コマンドとして機能する DBCC ステートメントが用意されています。

データベース コンソール コマンドは、次のように分類されます。

コマンドのカテゴリ 実行内容
メンテナンス データベース、インデックスまたはファイル グループを対象とするメンテナンス タスク。
その他 トレース フラグの有効化やメモリからの DLL の削除など、その他のタスク。
Informational さまざまな種類の情報を収集および表示するタスク。
検証 データベース、テーブル、インデックス、カタログ、ファイル グループ、またはデータベース ページの割り当ての検証操作。

DBCC コマンドは入力パラメーターをと受け取り、値を返します。 すべての DBCC コマンド パラメーターには、Unicode と DBCS の両方のリテラルを使用できます。

DBCC 内部データベース スナップショットの使用

次の DBCC コマンドは、データベース エンジンで作成される内部の読み取り専用データベース スナップショットに対して実行でき、 このスナップショットにより、コマンド実行時のブロックやコンカレンシーの問題を回避できます。 詳細については、「データベース スナップショット (SQL Server)」を参照してください。

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

DBCC コマンドの 1 つを実行すると、データベース エンジン ではデータベース スナップショットが作成され、スナップショットはトランザクション全体で一貫性のある状態になります。 その後、DBCC コマンドではこのスナップショットに対するチェックが行われます。 DBCC コマンドの完了後、このスナップショットは削除されます。

場合によっては、内部データベース スナップショットが必要ではないか作成できないことがあります。 DBCC コマンドは実際のデータベースに対して実行されます。 データベースがオンラインの場合、DBCC コマンドではテーブルロックを使用して、チェックするオブジェクトの一貫性を確保します。 この動作は、WITH TABLOCK オプションが指定される場合と同じです。

次の条件で DBCC コマンドを実行する場合、内部データベース スナップショットは作成されません。

  • master データベースに対して実行し、SQL Server のインスタンスがシングル ユーザー モードで実行されている場合。
  • master 以外のデータベースに対して実行するが、データベースが ALTER DATABASE ステートメントを使ってシングル ユーザー モードに設定されている場合。
  • 読み取り専用データベースに対して実行する場合。
  • ALTER DATABASE ステートメントを使って緊急モードに設定されたデータベースに対して実行する場合。
  • tempdb に対して実行する場合。 この場合、内部的な制約のため、データベース スナップショットは作成できません。
  • WITH TABLOCK オプションを使用する。 この場合、DBCC ではデータベース スナップショットは作成されず、要求が受け入れられます。

DBCC コマンドを次の対象に実行する場合は、内部データベース スナップショットの代わりにテーブル ロックが使用されます。

  • 読み取り専用のファイル グループ
  • FAT ファイル システム
  • "名前付きストリーム" がサポートされないボリューム
  • "代替ストリーム" がサポートされないボリューム

Note

WITH TABLOCK オプションを使用して、DBCC CHECKALLOC、または DBCC CHECKDB と同等の部分を実行してみる場合、データベースの排他 (X) ロックが必要です。 このデータベース ロックは tempdb または master に対しては設定できず、他のすべてのデータベースでも失敗する可能性があります。

Note

master に対して実行した場合、内部データベース スナップショットが作成できないと DBCC CHECKDB は失敗します。

DBCC コマンドの進行状況レポート

sys.dm_exec_requests カタログ ビューには、DBCC CHECKDBCHECKFILEGROUPCHECKTABLE コマンドの実行の進行状況と現在のフェーズについての情報が含まれます。 percent_complete 列にはコマンドの完了率が示され、command 列にはコマンド実行の現在のフェーズがレポートされます。

レポートされる進行状況のレベルは、DBCC コマンド実行の現在のフェーズによって異なります。 たとえば、フェーズによって、進行状況がデータベース ページ レベルでレポートされる場合と、データベース レベルまたはアロケーション修復レベルでレポートされる場合があります。 次の表は、実行の各フェーズと、コマンドでレポートされる進行状況のレベルです。

実行フェーズ 説明 進行状況レポートの単位
DBCC TABLE CHECK このフェーズでは、データベースのオブジェクトの論理的および物理的な一貫性がチェックされます。 進行状況はデータベース ページ レベルでレポートされます。

進行状況レポートの値は、1,000 データベース ページがチェックされるたびに更新されます。
DBCC TABLE REPAIR このフェーズでは、REPAIR_FASTREPAIR_REBUILD、または REPAIR_ALLOW_DATA_LOSS が指定され、修復が必要なオブジェクト エラーがある場合に、データベース修復が実行されます。 進行状況は個々の修復レベルでレポートされます。

カウンターは修復が完了するたびに更新されます。
DBCC ALLOC CHECK このフェーズでは、データベースの割り当て構造がチェックされます。

注:DBCC CHECKALLOC でも同じチェックが実行されます。
進行状況が報告されない
DBCC ALLOC REPAIR このフェーズでは、REPAIR_FASTREPAIR_REBUILD、または REPAIR_ALLOW_DATA_LOSS が指定され、修復が必要な割り当てエラーがある場合に、データベース修復が実行されます。 進行状況は報告されません。
DBCC SYS CHECK このフェーズでは、データベース システム テーブルがチェックされます。 進行状況はデータベース ページ レベルでレポートされます。

進行状況レポートの値は、1,000 データベース ページがチェックされるたびに更新されます。
DBCC SYS REPAIR このフェーズでは、REPAIR_FASTREPAIR_REBUILD、または REPAIR_ALLOW_DATA_LOSS が指定され、修復が必要なシステム テーブル エラーがある場合に、データベース修復が実行されます。 進行状況は個々の修復レベルでレポートされます。

カウンターは修復が完了するたびに更新されます。
DBCC SSB CHECK このフェーズでは、SQL Server Service Broker オブジェクトがチェックされます。

注: このフェーズは、DBCC CHECKTABLE を実行した場合は実行されません。
進行状況は報告されません。
DBCC CHECKCATALOG このフェーズでは、データベース カタログの一貫性がチェックされます。

注: このフェーズは、DBCC CHECKTABLE を実行した場合は実行されません。
進行状況は報告されません。
DBCC IVIEW CHECK このフェーズでは、データベースに存在するインデックス付きビューの論理的な一貫性がチェックされます。 進行状況は、チェックされたデータベース ビュー レベルでレポートされます。

情報ステートメント

検証ステートメント

メンテナンス ステートメント

その他のステートメント