複数のトランザクション
Integration Services パッケージには、複数の関連しないトランザクションを含めることができます。たとえば、入れ子になったコンテナの階層がパッケージに含まれていて、それらのコンテナの中にトランザクションをサポートしていないコンテナが 1 つあり、残りのコンテナはトランザクションを必要としている場合、トランザクションを必要とするコンテナは独立したトランザクションを開始します。それらのトランザクションは、入れ子になったコンテナ階層において最も内側のタスクから順にパッケージにコミットまたはロールバックされます。ただし、内側のコンテナのトランザクションがコミットされた後、その外側のトランザクションが中止された場合は、内側のトランザクションをロールバックできません。
たとえば、パッケージにシーケンス コンテナが含まれていて、このコンテナは、それぞれの 2 つの SQL 実行タスクを含む 2 つの Foreach ループ コンテナを保持しているとします。次の図は、このサンプル パッケージを示しています。
このサンプル パッケージでは、シーケンス コンテナ、Foreach ループ コンテナ、および SQL 実行タスクの TransactionOption プロパティを次のように設定します。
シーケンス コンテナの TransactionOption プロパティを Required に設定します。
Foreach ループ コンテナの TransactionOption プロパティを NotSupported に設定します。
SQL 実行タスクの TransactionOption プロパティを Required に設定します。
TransactionOption プロパティをこのように設定すると、サンプル パッケージ内に 5 つの関連しないトランザクションが存在することになります。シーケンス コンテナが 1 つのトランザクションを開始し、4 つの SQL 実行タスクがそれぞれ独自のトランザクションを開始します。さらに、SQL 実行タスクが開始したトランザクションは、シーケンス タスクのトランザクションが中止されてもロールバックされません。
|