一括インポートで最小ログ記録を行うための前提条件

適用対象: はいSQL Server (サポートされているすべてのバージョン)

完全復旧モデルのデータベースの場合、一括インポート中に実行されるすべての行挿入操作が、トランザクション ログに完全に記録されます。 完全復旧モデルを使用する場合、大きなデータをインポートするとトランザクション ログがすぐにいっぱいになってしまいます。 これとは対照的に、単純復旧モデルまたは一括ログ復旧モデルでは、一括インポート操作の最小ログ記録を行うと、一括インポート操作によってログ領域がいっぱいになる可能性が少なくなります。 最小ログ記録は完全ログ記録よりも効率的です。

注意

一括ログ復旧モデルは、大量の一括操作中に完全復旧モデルの代わりとして一時的に使用するためのものです。

一括インポート操作の最小ログ記録のためのテーブルの要件

最小ログ記録を行うテーブルは、次の条件を満たしている必要があります。

  • テーブルがレプリケート中でないこと。

  • (TABLOCK を使用して) テーブル ロックが指定されていること。

    注意

    最小限のログ記録しか行われない一括インポート操作では、データを挿入してもトランザクション ログに記録されませんが、新しいエクステントがテーブルに割り当てられるたびに、 データベース エンジン によりエクステントの割り当てがログに記録されます。

  • テーブルは、メモリ最適化テーブルではありません。

あるテーブルの最小ログ記録を行うことができるかどうかは、そのテーブルにインデックスがあるかどうか、また、インデックスが存在する場合はテーブルが空かどうかによっても異なります。

  • テーブルにインデックスがない場合、データ ページの最小ログ記録が行われます。

  • テーブルにクラスター化インデックスがなく、非クラスター化インデックスが 1 つ以上ある場合、データ ページは常に最小ログ記録が行われます。 インデックス ページのログがどのように記録されるかは、テーブルが空かどうかにより異なります。

    • テーブルが空の場合、インデックス ページは最小ログ記録が行われます。 空のテーブルに複数のバッチのデータを一括インポートする場合、最初のバッチについてはインデックス ページとデータ ページの最小ログ記録が行われますが、2 番目以降のバッチはデータ ページのみの最小ログ記録が行われます。

    • テーブルが空ではない場合、インデックス ページは完全ログ記録が行われます。

  • テーブルが空で、クラスター化インデックスがある場合、データ ページとインデックス ページの最小ログ記録が行われます。 これと対照的に、空ではないテーブルに BTree ベースのクラスター化インデックスがある場合、いずれの復旧モデルであってもデータ ページとインデックス ページの完全ログ記録が行われます。 空の行ストア テーブルにバッチのデータを一括インポートする場合、最初のバッチについてはインデックス ページとデータ ページの最小ログ記録が行われますが、2 番目以降のバッチはデータ ページのみ一括ログ記録が行われます。

  • クラスター化列ストア インデックス (CCI) のログ記録の詳細については、「列ストア インデックス - データ読み込みガイダンス」を参照してください。

注意

トランザクション レプリケーションが有効な場合、BULK INSERT 操作は、一括ログ復旧モデルでも完全にログ記録されます。

参照

復旧モデル (SQL Server)
bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
BACKUP (Transact-SQL)
ALTER DATABASE (Transact-SQL)
テーブル ヒント (Transact-SQL)
INSERT (Transact-SQL)