DBCC CHECKALLOC (Transact-SQL)

更新 : 2008 年 11 月 17 日

指定したデータベース用のディスク領域の割り当て構造について一貫性をチェックします。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

DBCC CHECKALLOC 
[
        ( database_name | database_id | 0 
      [ , NOINDEX 
      | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
        )
    [ WITH 
        { 
          [ ALL_ERRORMSGS ]
          [ , NO_INFOMSGS ] 
          [ , TABLOCK ] 
          [ , ESTIMATEONLY ] 
        }
    ]
]

引数

  • database_name | database_id | 0
    ページの割り当てと使用状況をチェックするデータベースの名前または ID を指定します。値を指定しないか 0 を指定した場合は、現在のデータベースが使用されます。

    データベース名は、識別子のルールに従っている必要があります。

  • NOINDEX
    ユーザー テーブルの非クラスタ化インデックスをチェックしません。

    ms188422.note(ja-jp,SQL.90).gifメモ :
    NOINDEX は旧バージョンとの互換性のためにだけ用意されており、DBCC CHECKALLOC には影響しません。
  • REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD
    検出されたエラーを DBCC CHECKALLOC で修復します。database_name はシングル ユーザー モードになっている必要があります。

    • REPAIR_ALLOW_DATA_LOSS
      検出されたすべてのエラーの修復を試行します。修復を実行すると、データが失われることがあります。REPAIR_ALLOW_DATA_LOSS はアロケーション エラーを修復できる唯一のオプションです。
    • REPAIR_FAST
      構文は、旧バージョンとの互換性のためにのみ残されています。修復操作は実行されません。
    • REPAIR_REBUILD
      適用なし。
    ms188422.note(ja-jp,SQL.90).gif重要 :
    REPAIR オプションは、最後の手段としてのみ使用してください。エラーの修復では、バックアップから復元することをお勧めします。修復操作では、テーブルまたはテーブル間に制約があっても考慮されません。指定されたテーブルに 1 つでも関連する制約がある場合は、修復操作の後に DBCC CHECKCONSTRAINTS を実行することをお勧めします。REPAIR を使用する必要がある場合は、修復オプションを指定せずに DBCC CHECKDB を実行して、使用する修復レベルを確認してください。REPAIR_ALLOW_DATA_LOSS レベルを使用する場合は、このオプションを指定して DBCC CHECKDB を実行する前に、データベースをバックアップすることをお勧めします。
  • WITH
    オプションを指定可能にします。
  • ALL_ERRORMSGS
    すべてのエラー メッセージを表示します。SQL Server 2005 Service Pack 3 (SP3) では、既定ですべてのエラー メッセージが表示されます。そのため、このオプションを指定しても省略しても影響はありません。以前のバージョンの SQL Server では、ALL_ERRORMSGS を指定しない場合、オブジェクトごとにエラー メッセージが最初の 200 個まで表示されます。
  • NO_INFOMSGS
    すべての情報メッセージと使用領域に関するレポートを表示しないようにします。
  • TABLOCK
    DBCC コマンドでデータベースを排他的にロックします。
  • ESTIMATE ONLY
    他のすべてのオプションを指定したときに、DBCC CHECKALLOC の実行に必要な tempdb 領域の予測サイズを表示します。

結果セット

次の表は、DBCC CHECKALLOC によって返される情報です。

アイテム 説明

FirstIAM

内部使用のみ。

Root

内部使用のみ。

Dpages

データ ページ数。

Pages used

割り当てられているページ。

Dedicated extents

オブジェクトに割り当てられているエクステント。

混合アロケーション ページが使用されている場合は、エクステントなしで割り当てられているページが存在している可能性があります。

DBCC CHECKALLOC では、各ファイルのインデックスとパーティションの割り当ての概要もレポートされます。この概要では、データの分布が示されます。

アイテム 説明

Reserved pages

インデックスに割り当てられているページ、および割り当てられているエクステント内の未使用ページ。

Used pages

インデックスによって割り当てられ、使用中のページ。

Partition ID

内部使用のみ。

Alloc Unit ID

内部使用のみ。

In-row data

インデックスまたはヒープ データが含まれるページ。

LOB データ

varchar(max)nvarchar(max)varbinary(max)textntextxmlimage 型のデータが含まれるページ。

Row-overflow data

行外に移動した可変長の列のデータが含まれるページ。

DBCC CHECKALLOC では、ESTIMATEONLY または NO_INFOMSGS を指定した場合を除き、次の結果セットが返されます。値は変化することがあります。

DBCC results for 'master'.

************************************************************* Table sysobjects Object ID 1. Index ID 1 FirstIAM (1:11) Root (1:12) Dpages 22. Index ID 1. 24 pages used in 5 dedicated extents. Index ID 2 FirstIAM (1:1368) Root (1:1362) Dpages 10. Index ID 2. 12 pages used in 2 dedicated extents. Index ID 3 FirstIAM (1:1392) Root (1:1408) Dpages 4. Index ID 3. 6 pages used in 0 dedicated extents. Total number of extents is 7. ************************************************************* '...' ************************************************************* Table spt_server_info Object ID 1938105945. Index ID 1 FirstIAM (1:520) Root (1:508) Dpages 1. Index ID 1. 3 pages used in 0 dedicated extents. Total number of extents is 0. ************************************************************* Processed 52 entries in sysindexes for database ID 1. File 1. Number of extents = 210, used pages = 1126, reserved pages = 1280. File 1 (number of mixed extents = 73, mixed pages = 184). Object ID 1, Index ID 0, data extents 5, pages 24, mixed extent pages 9. '...' Object ID 1938105945, Index ID 0, data extents 0, pages 3, mixed extent pages 3. Total number of extents = 210, used pages = 1126, reserved pages = 1280 in this database. (number of mixed extents = 73, mixed pages = 184) in this database. CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'. DBCC results for 'master'. ************************************************************* Table sys.sysrowsetcolumns Object ID 4. Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). FirstIAM (1:98). Root (1:94). Dpages 7. Index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data). 9 pages used in 1 dedicated extents. Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). FirstIAM (0:0). Root (0:0). Dpages 0. Index ID 1, partition ID 262144, alloc unit ID 262398 (type Row-overflow data). 0 pages used in 0 dedicated extents. Total number of extents is 1. ... ************************************************************* Processed 201 entries in system catalog for database ID 1. File 1. Number of extents = 44, used pages = 300, reserved pages = 345. File 1 (number of mixed extents = 29, mixed pages = 225). Object ID 4, index ID 1, partition ID 262144, alloc unit ID 262144 (type In-row data), data extents 1, pages 9, mixed extent pages 8. Object ID 5, index ID 1, partition ID 327680, alloc unit ID 327680 (type In-row data), data extents 0, pages 2, mixed extent pages 2. Object ID 7, index ID 1, partition ID 458752, alloc unit ID 458752 (type In-row data), data extents 0, pages 5, mixed extent pages 5. Object ID 8, index ID 0, partition ID 524288, alloc unit ID 524288 (type In-row data), data extents 0, pages 2, mixed extent pages 2. Object ID 13, index ID 1, partition ID 851968, alloc unit ID 851968 (type In-row data), data extents 1, pages 9, mixed extent pages 8. Object ID 15, index ID 1, partition ID 983040, alloc unit ID 983040 (type In-row data), data extents 0, pages 2, mixed extent pages 2. Object ID 26, index ID 1, partition ID 281474978414592, alloc unit ID 1703937 (type In-row data), data extents 0, pages 3, mixed extent pages 3. Object ID 27, index ID 1, partition ID 281474978480128, alloc unit ID 1769473 (type In-row data), data extents 0, pages 3, mixed extent pages 3. Object ID 27, index ID 2, partition ID 562949955190784, alloc unit ID 1769474 (type In-row data), index extents 0, pages 3, mixed extent pages 3. ... Object ID 1179151246, index ID 1, partition ID 72057594038845440, alloc unit ID 13435136 (type In-row data), data extents 2, pages 18, mixed extent pages 8. Object ID 1179151246, index ID 2, partition ID 72057594038910976, alloc unit ID 13566208 (type In-row data), index extents 1, pages 16, mixed extent pages 8. Object ID 1911677858, index ID 0, partition ID 72057594039631872, alloc unit ID 15073536 (type In-row data), data extents 0, pages 2, mixed extent pages 2. Total number of extents = 41, used pages = 289, reserved pages = 323 in this database. (number of mixed extents = 27, mixed pages = 211) in this database. CHECKALLOC found 0 allocation errors and 0 consistency errors in database 'master'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.

ESTIMATEONLY を指定した場合、DBCC CHECKALLOC では次の結果セットが返されます。

Estimated TEMPDB space needed for CHECKALLOC (KB) 
------------------------------------------------- 
34

(1 row(s) affected)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

解説

DBCC CHECKALLOC では、ページの種類やページが属するオブジェクトの種類に関係なく、データベースのすべてのページの割り当てがチェックされます。また、ページとページ間の関係の追跡に使用されるさまざまな内部構造も検証されます。

NO_INFOMSGS を指定しない場合、DBCC CHECKALLOC ではデータベースのすべてのオブジェクトに関する領域の使用情報が収集されます。この情報は、検出されたエラーと共に出力されます。

ms188422.note(ja-jp,SQL.90).gifメモ :
DBCC CHECKALLOC 機能は、DBCC CHECKDB および DBCC CHECKFILEGROUP に含まれています。つまり、これらのステートメントと別に DBCC CHECKALLOC を実行する必要はありません。

内部データベース スナップショット

DBCC CHECKALLOC では、内部データベースのスナップショットを使用して、これらのチェックを実行するために必要なトランザクションの一貫性を確保します。スナップショットを作成できない場合や、TABLOCK が指定されている場合は、DBCC CHECKALLOC はデータベースの排他 (X) ロックを取得して、必要な一貫性を確保します。ロックの詳細については、「ロック モード」を参照してください。

ms188422.note(ja-jp,SQL.90).gifメモ :
SQL Server 2005 では、tempdb に対して DBCC CHECKALLOC を実行してもチェックは実行されません。これは、パフォーマンス上の理由から、データベースのスナップショットが tempdb では利用できないためです。つまり、必要なトランザクションの一貫性を実現できないためです。tempdb 割り当ての問題を解決するには、MSSQLSERVER サービスをいったん停止し、もう一度開始してください。この操作で、tempdb データベースが削除され、再作成されます。

DBCC エラー メッセージについて

DBCC CHECKALLOC コマンドの終了後、メッセージが SQL Server エラー ログに書き込まれます。DBCC コマンドが正常に実行された場合、メッセージでは正常完了とコマンド実行時間が示されます。エラーが発生して DBCC コマンドが完了前に停止した場合、メッセージではコマンドが終了したことと、状態の値、およびコマンド実行時間が示されます。次の表は、メッセージに含まれる可能性がある状態値の一覧と説明です。

状態 説明

0

エラー番号 8930 が発生しました。メタデータの破損が原因で DBCC コマンドが終了しました。

1

エラー番号 8967 が発生しました。内部 DBCC エラーがあります。

2

緊急モードのデータベース修復中にエラーが発生しました。

3

メタデータの破損が原因で DBCC コマンドが終了しました。

4

アサートまたはアクセス違反が検出されました。

5

不明なエラーが発生し、DBCC コマンドが終了しました。

エラー報告の使用

SQL Server 2005 Service Pack 1 (SP1) では、DBCC CHECKALLOC により破損エラーが検出されるたびに、ミニ ダンプ ファイル (SQLDUMPnnnn.txt) が SQL Server の LOG ディレクトリに生成されます。機能の使用状況データ収集とエラー報告機能が SQL Server インスタンスに対して有効になっている場合、ダンプ ファイルは自動的に Microsoft に転送されます。収集されたデータは SQL Server の機能向上のために使用されます。詳細については、「エラー レポートと使用状況レポートの設定」を参照してください。

このダンプ ファイルには、DBCC CHECKALLOC コマンドの結果と追加の診断出力が含まれます。また、制限付きの随意アクセス制御リスト (DACL) が割り当てられます。ダンプ ファイルにアクセスできるのは、SQL Server サービス アカウントとロール sysadmin のメンバだけです。既定では、sysadmin ロールには Windows の BUILTIN\Administrators グループとローカルの管理者グループのすべてのメンバが含まれます。データ収集プロセスが失敗しても、DBCC コマンドは失敗しません。

エラーの解決

DBCC CHECKALLOC でエラーがレポートされた場合は、修復を実行せずに、データベース バックアップからデータベースを復元することをお勧めします。バックアップが存在しない場合は、修復を実行することでレポートされたエラーを修正できますが、エラーを修正するためにページとデータの削除が必要になることがあります。

修復はユーザー トランザクションで実行できます。この場合、変更はロールバックできます。変更をロールバックした場合、データベースにはエラーが残っているので、データベースをバックアップから復元する必要があります。修復が完了したら、データベースをバックアップします。

権限

sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバシップが必要です。

次の例では、現在のデータベースと AdventureWorks データベースに対して DBCC CHECKALLOC を実行します。

-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks database.
DBCC CHECKALLOC (AdventureWorks);
GO

参照

関連項目

DBCC (Transact-SQL)

その他の技術情報

テーブルとインデックスの編成
オブジェクトに使用されている領域の管理

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2008 年 11 月 17 日

追加内容 :
  • ALL_ERRORMSGS の定義で SP3 における新しい機能を説明。

2006 年 4 月 14 日

追加内容 :
  • 「解説」に「エラー報告の使用」を追加。SP1 の新機能について説明。

2005 年 12 月 5 日

変更内容 :
  • 構文を修正。
  • 「LOB data」のデータ型の一覧に xml を追加。
  • REPAIR_FAST の定義を修正。このオプションで修復操作は実行されないことを明記。
  • 「解説」セクションに、SQL Server のエラー ログに書き込まれるメッセージと、状態値の説明に関する情報を追加。