2016-06-23 28 views
0

の原因である私の制御フロー明示的なトランザクション宣言は、ここでは、SSISを使用した作業「ダブル」ロールバック例外

SSIS Coontrol Flow

しかし、ここでキャッチです:例外は、シーケンスコンテナとフローで発生した場合 Failureルートに行くと、ロールバック・トランザクションのエラーが表示され、トランザクションはすでにロールバックされています。

  • 私は(別のデータフローで使用される)私の接続マネージャの両方に真のRetainSameConnection =を使用しています:ここで

    は、キー情報です。これは分散トランザクションではなく、接続の1つは読み込み専用です。
  • シーケンスコンテナにfalseを宣言して伝播するイベントハンドラがあります。
  • すべてのトランザクションオプションが「サポート対象」に設定されています。
  • 私のトランザクションは明示的に宣言されています(Begin、Commit、Rollback)。

私のトランザクションが分散トランザクション(DTC)に登録され、シーケンスコンテナによってロールバックされているように見えるので、自分でロールバックしようとすると、パッケージ全体に失敗する2番目の例外が生成されます。

私のローカルマシンで問題を再現することができませんでした。 誰にでも分かりますか?

答えて

0

この質問への部分的な答え/ソリューションは、次のとおりです。

  • トランザクションは、SQLタイプ例外に自動的にロールバックされ(例:など、キーを複製する)それが宣言さの厳しいイベント。したがって、フローのロールバック部分は、他の例外が発生した場合にのみ使用されます。

このような動作をどのように管理しますか?

  • は、私たちは、そうでない場合、我々はunexistingトランザクションをロールバックしようとしているという例外を取得します、我々はそれをrollbacking前にトランザクションにまだあるかどうかを検証するために(私の場合のSQLServerに)いくつかのデータベースの特定のコマンドを使用する必要があります。ここで

私の場合のコードです:

IF @@TRANCOUNT > 0    
     Rollback Transaction TX_NAME; 

は、それが;-)

誰か一日お役に立てば幸いです
関連する問題