2

接続をループするループがあります。各ループは異なる接続に接続し、次にテーブルなどをロードします。 2番目のステップでは、DWHに接続してデータをロードします。時には何らかの理由で接続が切断され、このステップで失敗することがあります。私は、この接続に失敗し続けるためにパッケージが必要です。各ループのSSISは機能しません。

私はプロポゲートに設定されている多くのことをfalseに設定していますが、これはまだ動作しません。あなたが私のスクリーンショットで見ることができるように、私は "Load ..." onErrorイベントハンドラpropogateをfalseに設定し、SequenceコンテナonError propogateをfalseに設定します。

また、シーケンスコンテナの最大エラーを0に設定して、セクションが完了するようにしました。また、接続が完了した場合や停止する場合に変数にフラグを設定するための "Load ..."のonError接続が失敗した場合はそこにあります。

私は過去にこれを行いましたが、完了時にパッケージの完全な状態を成功に設定しましたが、このループで発生する可能性のある他のエラーは検出されません。

ここにお手伝いいただきたいと思います。失敗の接続についての詳細な研究を行う

enter image description here

+0

はあなたがFalseに 'FailParentOnFailure'を設定しようとしたことがありますか? – NickyvV

+1

私はこれらすべてを偽に設定しましたが、それはまだ違いはありませんでした。私はそれを理解した。私の答えは下記をご覧ください。 – Caveman42

答えて

2

、私はジェイミートムソンによってスクリプトが見つかりました:Verify a connection before using it [SSIS]

私は少し自分の使い方にそれを修正:

  1. のみの代わりにそれらのすべてをループの単一の接続を使用していました。
  2. 私はタスクの結果を常に成功するように設定しました。
  3. FireErrorの代わりにFireWarningを行った。
  4. 私は、接続が失敗したかどうかに応じて0または1に設定する変数(connFail)を作成しました。

タスクが実行される前に、失敗した接続をキャッチするために、このスクリプトタスクを自分のテーブルロードの前に配置します。これらの変更により、接続が失敗した場合(connfail = 1)、接続が成功した場合はパッケージ上で続行する( `connFail = 0 ')電子メール警告を発することができました。私が使用し

完全なスクリプトは以下の通りです:

bool failure = false; 
bool fireAgain = true; 

try 
{ 
    Dts.Connections["Connection"].AcquireConnection(null); 
    Dts.Events.FireInformation(1, "" 
     , String.Format("Connection aquired successfully on '{0}'", Dts.Connections["Connection"].Name) 
     , "", 0, ref fireAgain); 
} 
catch (Exception e) 
{ 
    Dts.Events.FireWarning(-1, "" 
     , String.Format("Failed to aquire connection to '{0}'. Error Message='{1}'",Dts.Connections["Connection"].Name, e.Message) 
     , "", 0); 
    failure = true; 
} 

if (failure) 
{ 
    Dts.TaskResult = (int)ScriptResults.Success; 
    Dts.Variables["connFail"].Value = 1; 
} 
else 
{ 
    Dts.TaskResult = (int)ScriptResults.Success; 
    Dts.Variables["connFail"].Value = 0; 
} 
関連する問題