DBCC CHECKALLOC (Transact-SQL)

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

トピック リンク アイコン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
    ユーザー テーブルの非クラスター化インデックスをチェックしません。

    注意注意

    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
      適用なし。

    重要な注意事項重要

    REPAIR オプションは、最後の手段としてのみ使用してください。 エラーの修復では、バックアップから復元することをお勧めします。 修復操作では、テーブルまたはテーブル間に制約があっても考慮されません。 指定したテーブルに 1 つでも関連する制約がある場合は、修復操作の後に DBCC CHECKCONSTRAINTS を実行することをお勧めします。 REPAIR を使用する必要がある場合は、修復オプションを指定せずに DBCC CHECKDB を実行して、使用する修復レベルを確認してください。 REPAIR_ALLOW_DATA_LOSS レベルを使用する場合は、このオプションを指定して DBCC CHECKDB を実行する前に、データベースをバックアップすることをお勧めします。

  • WITH
    オプションを指定可能にします。

  • ALL_ERRORMSGS
    すべてのエラー メッセージを表示します。 SQL Server 2008 Service Pack 1 (SP1) では、既定ですべてのエラー メッセージが表示されます。 そのため、このオプションを指定しても省略しても影響はありません。 以前のバージョンの SQL Server (SQL Server 2005 SP3 を除く) では、ALL_ERRORMSGS を指定しない場合、オブジェクトごとにエラー メッセージが最初の 200 個まで表示されます。

  • NO_INFOMSGS
    すべての情報メッセージと使用領域に関するレポートを表示しないようにします。

  • TABLOCK
    DBCC コマンドでデータベースを排他的にロックします。

  • ESTIMATEONLY
    他のすべてのオプションを指定したときに、DBCC CHECKALLOC の実行に必要な tempdb 領域の予測サイズを表示します。

説明

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

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

注意注意

DBCC CHECKALLOC 機能は、DBCC CHECKDB および DBCC CHECKFILEGROUP に含まれています。 つまり、これらのステートメントと別に DBCC CHECKALLOC を実行する必要はありません。

注意注意

DBCC CHECKALLOC では、FILESTREAM データはチェックされません。 FILESTREAM はバイナリ ラージ オブジェクト (BLOB) をファイル システムに格納します。

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

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

注意注意

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 コマンドが終了しました。

エラー報告の使用

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

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

結果セット

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

項目

説明

FirstIAM

内部使用のみ。

Root

内部使用のみ。

Dpages

データ ページ数。

Pages used

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

Dedicated extents

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

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

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

項目

説明

Reserved pages

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

Used pages

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

Partition ID

内部使用のみ。

Alloc Unit ID

内部使用のみ。

In-row data

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

LOB data

varchar(max)、nvarchar(max)、varbinary(max)、text、ntext、xml、image 型のデータが含まれるページ。

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.

権限

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

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

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

変更履歴

変更内容

ALL_ERRORMSGS の定義で SQL Server 2008 SP1 における新しい機能の説明を追加しました。