パッケージへのトランザクションの組み込み
パッケージではトランザクションを使用して、タスクがアトミック単位で実行するデータベース処理をバインドし、この処理によってデータの整合性を保ちます。トランザクションの一部であるデータベース処理はすべて同時にコミットまたはロールバックされるため、データを一貫性のある状態に保つことができます。たとえば、複数のデータ フロー タスクがあり、各タスクが別々のデータベース テーブルに対してデータ更新またはデータ挿入を行うパッケージでは、トランザクションを使用することで、データ フローで実行されるすべての変更がコミットまたはロールバックされることが保証されます。分散トランザクションではこの概念がさらに強化され、複数のオペレーティング システムでの異なる操作を、単一のトランザクションにバインドすることができます。
パッケージのトランザクションは、次の用途で使用します。
- 更新の一貫性を保つため、複数のタスクの結果を単一のトランザクションにまとめます。たとえば、2 つの異なるテーブルに保存されている受注と品目名に関する情報を 2 つのタスクによってアップロードし、これらのタスクが共に成功または失敗するようにできます。
- 複数のデータベース サーバーに対して一貫性を保持しながら更新を実行できます。たとえば、顧客の住所を異なる 2 つのオンライン トランザクション処理 (OLTP) システムで変更することができ、全体が 1 つのトランザクション内で処理されます。
- 非同期環境での更新を保証します。たとえば、パッケージがメッセージ キュー タスクを使用して、アップロードするファイルの名前を含むメッセージを読み取り、削除する場合があります。ファイルをアップロードするタスクが失敗すると、それによってロールバックが実行され、データベースの変更が取り消され、メッセージがキューに戻されます。
- 単一のパッケージで制御されている状態で、複数のトランザクションを実行できます。たとえば、パッケージ実行タスクを使用すると、終業シーケンスで、3 つの異なるサーバーに対する複数のトランザクションを同時に実行できます。
すべての種類の Microsoft SQL Server 2005 Integration Services (SSIS) コンテナ (パッケージ、For ループ コンテナ、Foreach ループ コンテナ、シーケンス コンテナ、タスクをカプセル化するタスク ホスト) でトランザクションを使用するように設定できます。Integration Services では、トランザクションを設定するオプションとして NotSupported、Supported、および Required の 3 つが用意されています。
- Required は、親コンテナで既に開始されているトランザクションがない限り、コンテナでトランザクションを開始するように指定します。開始されているトランザクションが存在する場合は、トランザクションが結合されます。たとえば、トランザクションをサポートするように設定されていないパッケージに Required オプションが設定されたシーケンス コンテナが含まれている場合、シーケンス コンテナは固有のトランザクションを開始します。パッケージが Required オプションを使用するように設定されている場合、シーケンス コンテナはパッケージのトランザクションを結合します。
- Supported は、コンテナがトランザクションを開始せず、親コンテナが開始したトランザクションを結合するように指定します。たとえば、4 つの SQL 実行タスクがあるパッケージでトランザクションが開始され、4 つのタスクすべてに Supported オプションが設定されている場合、いずれかのタスクが失敗すると、SQL 実行タスクで実行されたデータベース更新すべてがロールバックされます。パッケージでトランザクションが開始されない場合、4 つの SQL 実行タスクはトランザクションによってバインドされないため、失敗したタスクで実行されたデータベース更新以外はロールバックされません。
- NotSupported は、コンテナがトランザクションを開始せず、既存のトランザクションも結合しないように指定します。親コンテナで開始されたトランザクションは、トランザクションをサポートしないように設定された子コンテナに影響を与えません。たとえば、トランザクションを開始するように設定されたパッケージに NotSupported オプションが設定された For ループ コンテナが含まれていた場合、For ループのタスクが失敗してもロールバックは行われません。
トランザクションの設定は、コンテナの TransactionOption プロパティで設定します。このプロパティは、Business Intelligence Development Studio の [プロパティ] ウィンドウを使用して、またはプログラムによって設定できます。詳細については、「Integration Services のプログラミング」を参照してください。