適用対象:SQL Server
完全復旧モデルのデータベースの場合、一括インポート中に実行されるすべての行挿入操作が、トランザクション ログに完全に記録されます。 完全復旧モデルを使用する場合、大きなデータをインポートするとトランザクション ログがすぐにいっぱいになってしまいます。 これとは対照的に、単純復旧モデルまたは一括ログ復旧モデルでは、一括インポート操作の最小ログ記録を行うと、一括インポート操作によってログ領域がいっぱいになる可能性が少なくなります。 最小ログ記録は完全ログ記録よりも効率的です。
Note
一括ログ復旧モデルは、大量の一括操作中に完全復旧モデルの代わりとして一時的に使用するためのものです。
一括インポート操作の最小ログ記録のためのテーブルの要件
最小ログ記録を行うテーブルは、次の条件を満たしている必要があります。
テーブルがレプリケート中ではありません。
(
TABLOCKを使用して) テーブルのロックが指定されています。Note
最小ログ一括インポート操作中は、データの挿入はトランザクション ログに記録されませんが、データベース エンジンは、新しいエクステントがテーブルに割り当てられるたびにエクステントの割り当てをログに記録します。
テーブルは、メモリ最適化テーブルではありません。
あるテーブルの最小ログ記録を行うことができるかどうかは、そのテーブルにインデックスがあるかどうか、また、インデックスが存在する場合はテーブルが空かどうかによっても異なります。
テーブルにインデックスがない場合、データ ページの最小ログ記録が行われます。
テーブルにクラスター化インデックスがなく、非クラスター化インデックスが 1 つ以上ある場合、データ ページは常に最小ログ記録が行われます。 インデックス ページのログがどのように記録されるかは、テーブルが空かどうかにより異なります。
テーブルが空の場合、インデックス ページは最小ログ記録が行われます。 空のテーブルに複数のバッチのデータを一括インポートする場合、最初のバッチについてはインデックス ページとデータ ページの最小ログ記録が行われますが、2 番目以降のバッチはデータ ページのみの最小ログ記録が行われます。
テーブルが空ではない場合、インデックス ページは完全ログ記録が行われます。
いずれかのインデックスに
IGNORE_DUP_KEY = ONがある場合、インデックス ページとデータ ページは完全にログに記録されます。
テーブルが空で、クラスター化インデックスがある場合、データ ページとインデックス ページの最小ログ記録が行われます。 これと対照的に、空ではないテーブルに B ツリー ベースのクラスター化インデックスがある場合、いずれの復旧モデルであってもデータ ページとインデックス ページの完全ログ記録が行われます。 空の行ストア テーブルから開始し、データをバッチで一括インポートする場合、インデックス ページとデータ ページの両方が最初のバッチに対して最小ログに記録されますが、2 番目のバッチ以降では、データ ページのみが一括ログに記録されます。
Note
ドキュメントでは、一般的にインデックスに関して B ツリーという用語が使用されます。 行ストア インデックスで、データベース エンジンによって B+ ツリーが実装されます。 これは、列ストア インデックスやメモリ最適化テーブルのインデックスには適用されません。 詳細については、「SQL Server と Azure SQL のインデックスのアーキテクチャとデザイン ガイド」を参照してください。
クラスター化列ストア インデックス (CCI) のログ記録の詳細については、「列ストア インデックス - データ読み込みガイダンス」を参照してください。
Note
トランザクション レプリケーションが有効になっている場合、一括ログ復旧モデルの場合でも、 BULK INSERT 操作は完全にログに記録されます。
関連タスク
- 復旧モデル (SQL Server)
- bcp ユーティリティ
- BULK INSERT (Transact-SQL)
- OPENROWSET (Transact-SQL)
- BACKUP (Transact-SQL)
- データベースを変更 (Transact-SQL)
- テーブル ヒント (Transact-SQL)
- INSERT (Transact-SQL)