一括インポートのロック動作の制御
更新 : 2005 年 12 月 5 日
bcp コマンド、BULK INSERT ステートメント、および INSERT ...SELECT * FROM OPENROWSET(BULK...) ステートメントを使用すると、一括インポート操作時にテーブルがロックされるように指定できます。
テーブル ロックを指定すると、一括インポート操作の実行中に一括更新テーブルレベル ロックが行われます。テーブルをロックすると、テーブルでのロック競合を低減することにより、一括インポート操作のパフォーマンスを向上させることができます。
テーブル ロックを使用しないと、table lock on bulk load オプションが on に設定されていない限り、既定では行レベル ロックが使用されます。sp_tableoption を使用して table lock on bulk load オプションを設定すると、一括インポート操作時のテーブルのロック動作が設定されます。
一括インポート時のテーブル ロック | テーブル ロック動作 |
---|---|
Off |
行レベル ロックが使用されます。 |
On |
テーブルレベル ロックが使用されます。 |
テーブル ロックを指定した場合、一括インポート操作の実行中に、sp_tableoption で設定されたテーブルの既定の設定が上書きされます。
メモ : |
---|
複数のクライアントからテーブルにデータを並行して一括インポートするためにテーブル ロックを使用する必要はありませんが、テーブル ロックを使用するとパフォーマンスを向上させることができます。 |
コマンド修飾子
次の表は、一括インポート コマンドでテーブル ロックを指定するための修飾子をまとめたものです。
コマンド | 修飾子 | 修飾子の種類 |
---|---|---|
bcp |
-h"TABLOCK" |
ヒント |
BULK INSERT |
TABLOCK |
引数 |
INSERT ...SELECT * FROM OPENROWSET(BULK...) |
WITH(TABLOCK) |
テーブル ヒント |
メモ : |
---|
SQL Server 2005 では、クラスタ化インデックス付きテーブルで TABLOCK を指定すると、データの並行一括インポートができなくなります。このようなケースで並行一括インポートを実行したい場合は、TABLOCK を使用しないでください。並行一括読み込みの詳細については、「一括インポートを最適化するためのガイドライン」を参照してください。 |
参照
概念
その他の技術情報
bcp ユーティリティ
BULK INSERT (Transact-SQL)
OPENROWSET (Transact-SQL)
sp_tableoption (Transact-SQL)