DBCC CHECKALLOC (Transact-SQL)
適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
指定したデータベース用のディスク領域の割り当て構造について一貫性をチェックします。
構文
DBCC CHECKALLOC
[
( database_name | database_id | 0
[ , NOINDEX
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
)
[ WITH
{
[ ALL_ERRORMSGS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
}
]
]
Note
SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
引数
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
すべてのエラー メッセージを表示します。 既定では、すべてのエラー メッセージが表示されます。 このオプションを指定しても省略しても影響はありません。
NO_INFOMSGS
すべての情報メッセージと使用領域に関するレポートを表示しないようにします。
TABLOCK
DBCC コマンドでデータベースを排他的にロックします。
ESTIMATEONLY
他のすべてのオプションを指定したときに、
DBCC CHECKALLOC
の実行に必要なtempdb
領域の予測サイズを表示します。
解説
DBCC CHECKALLOC
では、ページの種類やページが属するオブジェクトの種類に関係なく、データベースのすべてのページの割り当てをチェックします。 また、ページとページ間の関係の追跡に使用されるさまざまな内部構造も検証されます。
NO_INFOMSGS
を指定しない場合、DBCC CHECKALLOC
ではデータベースのすべてのオブジェクトに関する領域の使用情報を収集します。 この情報は、検出されたエラーと共に出力されます。
Note
DBCC CHECKALLOC
機能は、DBCC CHECKDB と DBCC CHECKFILEGROUP に含まれています。 つまり、これらのステートメントと別に DBCC CHECKALLOC
を実行する必要はありません。 DBCC CHECKALLOC
によって、FILESTREAM データはチェックされません。 FILESTREAM はバイナリ ラージ オブジェクト (BLOB) をファイル システムに格納します。
内部データベース スナップショット
DBCC CHECKALLOC
では、内部データベースのスナップショットを使用して、これらのチェックを実行するために必要なトランザクションの一貫性を確保します。 スナップショットを作成できない場合や、TABLOCK
が指定されている場合は、DBCC CHECKALLOC
ではデータベースの排他 (X
) ロックを取得して、必要な一貫性を確保しようとします。
Note
tempdb
に対して DBCC CHECKALLOC
を実行してもチェックは実行されません。 これは、パフォーマンス上の理由から、データベースのスナップショットが tempdb
では利用できないためです。 つまり、必要なトランザクションの一貫性を実現できないためです。 tempdb
の割り当ての問題を解決するのには、データベース エンジンを停止して開始します。 この操作で、tempdb
データベースが削除され、再作成されます。
DBCC エラー メッセージについて
DBCC CHECKALLOC
コマンドの終了後、メッセージが SQL Server エラー ログに書き込まれます。 DBCC コマンドが正常に実行された場合、メッセージでは正常完了とコマンド実行時間が示されます。 エラーが発生して DBCC コマンドが完了前に停止した場合、メッセージではコマンドが終了したことと、状態の値、コマンド実行時間が示されます。 次の表は、メッセージに含まれる可能性がある状態値の一覧と説明です。
State | 説明 |
---|---|
0 | エラー番号 8930 が発生しました。 メタデータの破損が原因で DBCC コマンドが終了しました。 |
1 | エラー番号 8967 が発生しました。 内部 DBCC エラーがあります。 |
2 | 緊急モードのデータベース修復中にエラーが発生しました。 |
3 | メタデータの破損が原因で DBCC コマンドが終了しました。 |
4 | アサートまたはアクセス違反が検出されました。 |
5 | 不明なエラーが発生し、DBCC コマンドが終了しました。 |
エラー報告
DBCC CHECKALLOC
により破損エラーが検出されるたびに、ミニ ダンプ ファイル (SQLDUMP<nnnn>.txt
) が SQL Server の LOG
ディレクトリに生成されます。 機能の使用状況データ収集とエラー報告機能が SQL Server インスタンスに対して有効になっている場合、ダンプ ファイルは自動的に Microsoft に転送されます。 収集されたデータは SQL Server の機能向上のために使用されます。
このダンプ ファイルには、DBCC CHECKALLOC
コマンドの結果と追加の診断出力が含まれます。 また、制限付きの随意アクセス制御リスト (DACL) が割り当てられます。 アクセスが、SQL Server サービス アカウントと sysadmin ロールのメンバーに制限されます。 既定では、sysadmin ロールには、Windows BUILTIN\Administrators グループとローカルの管理者のグループのすべてのメンバーが含まれています。 データ収集プロセスが失敗しても、DBCC コマンドは失敗しません。
エラーの解決
DBCC CHECKALLOC
でエラーがレポートされた場合は、修復を実行せずに、データベース バックアップからデータベースを復元することをお勧めします。 バックアップが存在しない場合は、修復を実行することでレポートされたエラーを修正できますが、エラーを修正するためにページとデータの削除が必要になることがあります。
修復はユーザー トランザクションで実行できます。 この場合、変更はロールバックできます。 変更をロールバックした場合、データベースにはエラーが残っているので、データベースをバックアップから復元する必要があります。 修復が完了したら、データベースをバックアップします。
結果セット
次の表は、DBCC CHECKALLOC
によって返される情報です。
Item | 説明 |
---|---|
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)、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 固定データベース ロールのメンバーシップが必要です。
例
次の例では、現在のデータベースと AdventureWorks2022
データベースに対して DBCC CHECKALLOC
を実行します。
-- Check the current database.
DBCC CHECKALLOC;
GO
-- Check the AdventureWorks2022 database.
DBCC CHECKALLOC (AdventureWorks2022);
GO