一括挿入タスク
一括挿入タスクは、大量のデータを SQL Server のテーブルまたはビューにコピーするための効率的な方法です。たとえば、会社で 100 万行の製品リストをメインフレーム システムに格納し、電子商取引システムで SQL Server を使用して Web ページを構成しているとします。また、メインフレームにあるマスタ製品リストを使用して、夜間に SQL Server の製品テーブルを更新する必要があるものとします。このテーブルを更新するには、製品リストをタブ区切り形式で保存し、一括挿入タスクを使用してデータを直接 SQL Server のテーブルにコピーします。
高速なデータ コピーを確実に行うため、コピー元ファイルからテーブルまたはビューへのデータ移動時に、データ変換を行うことはできません。
一括挿入タスクは、次の方法で構成できます。
コピー先の SQL Server データベース、およびデータを挿入するテーブルまたはビューに接続する OLE DB 接続マネージャを指定します。一括挿入タスクでは、コピー先データベースに対して OLE DB 接続のみをサポートします。
ファイルまたはフラット ファイル接続マネージャを指定して、コピー元ファイルにアクセスします。一括挿入タスクは、コピー元ファイルの場所にのみ接続マネージャを使用します。接続マネージャ エディタでその他のオプションを選択しても、一括挿入タスクでは無視されます。
フォーマット ファイルを使用するか、またはコピー元データの列区切り記号と行区切り記号を定義して、一括挿入タスクで使用するフォーマットを定義します。フォーマット ファイルを使用する場合は、フォーマット ファイルにアクセスするファイル接続マネージャを指定します。
タスクでデータを挿入する場合、挿入先のテーブルまたはビューで実行するアクションを指定します。オプションとして、CHECK 制約の有効化、ID 挿入の許可、NULL の保持、トリガの起動、またはテーブルのロックを選択できます。
挿入するデータのバッチに関する情報を設定します。たとえば、バッチ サイズ、挿入するファイルの先頭行と最終行、行の挿入を停止せずにタスクを実行できる挿入エラーの最大数、並べ替えの対象となる列の名前などです。
一括挿入タスクでフラット ファイル接続マネージャを使用してコピー元ファイルにアクセスする場合、タスクはフラット ファイル接続マネージャで指定されたフォーマットを使用しません。その代わり、フォーマット ファイルに指定されたフォーマットか、またはタスクの RowDelimiter プロパティおよび ColumnDelimiter プロパティの値が一括挿入タスクで使用されます。
使用に関する注意点
一括挿入タスクを使用する前に、次の点を考慮してください。
一括挿入タスクで SQL Server テーブルまたはビューに転送できるのは、テキスト ファイルのデータのみです。一括挿入タスクを使用して他のデータベース管理システム (DBMS) からデータを転送するには、データをコピー元からテキスト ファイルにエクスポートし、そのテキスト ファイルから SQL Server テーブルまたはビューにインポートする必要があります。
コピー先は、SQL Server データベースのテーブルまたはビューである必要があります。コピー先のテーブルまたはビューに既にデータがある場合、一括挿入タスクが実行されると新しいデータが既存のデータに追加されます。データを置換する場合は、一括挿入タスクを実行する前に、DELETE または TRUNCATE ステートメントを実行する SQL 実行タスクを実行します。詳細については、「SQL 実行タスク」を参照してください。
一括挿入タスク オブジェクトではフォーマット ファイルを使用できます。bcp ユーティリティを使用して作成したフォーマット ファイルを使用する場合、一括挿入タスクでフォーマット ファイルのパスを指定できます。一括挿入タスクでは、XML および XML 以外のフォーマット ファイルの両方がサポートされます。フォーマット ファイルの詳細については、「データのインポートまたはエクスポート用のフォーマット ファイル」を参照してください。
一括挿入タスクが含まれるパッケージを実行できるのは、固定サーバー ロール sysadmin のメンバのみです。
トランザクションでの一括挿入タスクの使用
バッチ サイズが設定されていないときは、一括コピー操作全体が 1 つのトランザクションとして処理されます。バッチ サイズが 0 の場合は、データが 1 つのバッチに挿入されます。バッチ サイズが設定されているときは、各バッチはバッチの実行終了時にコミットされるトランザクションを示します。詳細については、「暗黙のトランザクション」を参照してください。
一括挿入タスクがトランザクションに関連付けられている場合、その動作は、パッケージ トランザクションに結合されているかどうかによって異なります。一括挿入タスクがパッケージ トランザクションに結合する場合、エラーのない各バッチは次のバッチが実行されるまで 1 つの単位としてコミットされます。一括挿入タスクがパッケージ トランザクションに結合する場合、タスクの実行終了時にエラーのないバッチはそのままトランザクション内に残ります。これらのバッチは、パッケージのコミットまたはロールバック操作の対象となります。
一括挿入タスクに失敗した場合、正しく読み込まれたバッチは自動的にロールバックされません。同様に、一括挿入タスクが成功した場合でも、これらのバッチは自動的にコミットされません。コミットとロールバックの各操作は、パッケージおよびワークフローのプロパティ設定で指定されている場合に限り発生します。
コピー元とコピー先の指定
コピー元のテキスト ファイルの場所を指定するときは、次の点を考慮してください。
サーバーには、コピー元ファイルおよびコピー先データベースの両方にアクセスする権限が必要です。
一括挿入タスクはサーバーで実行されます。したがって、タスクが使用するすべてのフォーマット ファイルは、そのサーバー上に存在する必要があります。
一括挿入タスクが読み込むコピー元ファイルの場所は、データ挿入先の SQL Server データベースと同じサーバー上でも、リモート サーバー上でもかまいません。コピー元ファイルがリモート サーバー上にある場合、汎用名前付け規則 (UNC) を使用して、ファイル名をパスで指定する必要があります。
パフォーマンスの最適化
パフォーマンスを最適化するには、次のことを考慮してください。
テキスト ファイルがデータの挿入先の SQL Server データベースと同じコンピュータ上にある場合、データがネットワーク経由で転送されないため、コピー操作の実行速度がいっそう速くなります。
一括挿入タスクでは、エラーが発生した行はログに記録されません。この情報を取得する必要がある場合は、データ フロー コンポーネントのエラー出力を使用すれば、エラーが発生した行を例外ファイルにキャプチャできます。
一括挿入タスクで使用できるカスタム ログ エントリ
次の表は、一括挿入タスクのカスタム ログ エントリの一覧です。詳細については、「パッケージへのログ機能の実装」および「ログ記録用のカスタム メッセージ」を参照してください。
ログ エントリ |
説明 |
---|---|
DTSBulkInsertTaskBegin |
一括挿入が開始されたことを示します。 |
DTSBulkInsertTaskEnd |
一括挿入が終了したことを示します。 |
DTSBulkInsertTaskInfos |
タスクに関する説明情報を提供します。 |
一括挿入タスクの構成
プロパティを設定するには、SSIS デザイナから行うか、またはプログラムによって設定します。
SSIS デザイナで設定できるプロパティの詳細については、次のトピックのいずれかを参照してください。
SSIS デザイナでこれらのプロパティを設定する方法については、次のトピックを参照してください。
プログラムによる一括挿入タスクの構成
プログラムによってこれらのプロパティを設定する方法については、次のトピックを参照してください。
|