0

以下は、SSISパッケージの制御フローによって実行されるタスクのリストです。

  1. 「SQLタスクの実行」を使用してテーブルからデータを削除する
  2. txtファイルからデータを読み取り、「データフロータスク」を使用してデータをテーブルにロードします
  3. 「SQLタスクの実行」を使用して、(ビジネスロジックに基づいて)テーブルからいくつかの行を削除します
  4. 「SQLタスクの実行」を使用して、(ビジネスロジックに基づいて)テーブルの一部の行を更新します

私の疑問は、ステップ4でエラーが発生した場合、SSISはステップ1の前の状態に自動的にロールバックするのでしょうか。

誰かが正しい方向に私を助けることができますか?どんな助けでも大歓迎です。

ありがとう!

4

1 に答える 1

3

一般的に言えば、各タスクはアトミックです。タスク 4 は完了するか、完了しないか、中途半端な措置は発生しません。パッケージが全体として成功/失敗する必要がある場合は、そのように構成する必要があります。

最も簡単なオプションは、パッケージに組み込みのトランザクション オプションを使用することです。これは、Microsoft 分散トランザクション コーディネーター (MSDTC) を使用して、さまざまなサーバー間でトランザクションを処理します。パッケージで、制御フローの背景を右クリックして、TransactionOptionを SupportedからRequired

何らかの理由で MSDTC が機能しない場合は、接続マネージャーを RetainSameConnection に設定し、begin tran/commit/rollback ロジックをパッケージに追加する必要があります例ですが、すべてのタスクが同じデータベースで実行される場合にのみ機能します。

MSDTC が機能せず、複数のデータベースのデータを変更する場合は、独自の "ロールバック" スクリプトを作成し、制御フローの OnError/OnTaskFailed イベントまたはエラー ブランチで実行する必要があります。更新と削除を発行しているため、これらの操作を元に戻す前に、変更データ キャプチャ メカニズムを実装する必要があります。

于 2012-07-30T17:00:04.193 に答える