2

SSIS 組み込みトランザクションを使用しています。シナリオは以下の通り

同じサーバーに 2 つのデータベースがあり、それらをマージする必要があります (INSERT/UPDATE) SQL Merge 句を使用しています。いくつかのマスター テーブルがあり、それぞれにいくつかの子テーブルがあります。Merge ステートメントは最初にマスター テーブルで実行され、次に子テーブルの ExecuteSQL タスクがあります。子テーブル ExecuteSQL は並列で実行されます。

これを行っている間、接続の取得に失敗し、並行して実行されている ExecuteSQL タスクの 1 つでタスクが失敗します。何が原因か特定できませんでした。

RetainSameConnection は false に設定されており、True に設定すると、「トランザクション コンテキストは別のセッションで使用されています」というエラーが表示されます。

私が理解しているように、RetainSameConnection = True は必要ありません。ローカル TSQL ベースのトランザクションでのみ必要です。DTC が有効で、機能しています。

私のパッケージですべてのタスクが失敗するわけではありません。これは、並列タスクで何らかの形で失敗することにより、接続を正常に取得したことを示唆しています。

4

1 に答える 1

0

「接続の取得に失敗しました」というメッセージは、ほとんどの場合、適切にセットアップする前に接続を検証するタスクがあることが原因です。

ほとんどの SSIS プロジェクトでは、接続は開発目的でローカル データベースにバインドされています。次に、実行時に実際の接続を設定する式、変数、スクリプト タスクなどを用意します。

パッケージが実行を開始するとき、「DelayValidation」属性が「False」(デフォルト値!) に設定されているすべてのコンポーネントは、タスクが実行される前にデータソースに接続しようとします。プロパティを更新する前に開発環境で設定したデータベース...

于 2013-02-22T20:00:13.823 に答える