0

これは私が遭遇した非常にユニークな問題です。詳細を説明することから始めましょう。

部分処理と完全処理の両方のキューブを処理するために設計された親パッケージ (A と呼びましょう) があります。ここで、このパッケージは他の 2 つのパッケージ (B、C など) を呼び出し、1 つはステージング データをロードし、もう 1 つはキューブを処理します。

数週間前、すべてのキューブの処理が失敗するという接続の問題が発生し始めました。それ以来、これは週に1、2回のように発生します。明らかに、SQL サーバーは接続の確立に失敗します (数秒間のみ)。しかし、この接続の喪失により、残りのすべてのキューブ処理が失敗します。

この問題を修正する唯一の方法は、親パッケージを最初からやり直すことです。パッケージ全体を再起動する前に、キューブが既に処理されているフラグを更新するスクリプトを実行します。これは、すでに正常に処理されたキューブをスキップするのに役立ちます。

そのため、キューブが失敗した場合に再処理のために自動的に送信されるように、この子パッケージ (キューブ処理を担当) を設計しようとしています。以下は、私が使用したロジックです。

ここに画像の説明を入力

このプロセス キューブ タスクを for ループ コンテナーに入れ、カウンターを 2 に設定しました。キューブの失敗回数が 2 未満の場合は再処理を試み、失敗回数が 2 より大きい場合は、ループを終了し、そのキューブの処理に失敗します。再試行を 2 回に制限することで、データに問題があり、キューブが毎回失敗する場合に発生する可能性がある無限ループのリスクを回避します。

しかし、キューブは既にスレッドを取得しており、新しいスレッドではなく同じスレッドを再処理するため、これで問題は解決しません。接続の問題を解決するには、新しいスレッドを取得する必要があります。

今、私の質問に来て、

キューブが失敗した場合に、新しいスレッドでキューブを再処理するか、さらに良い方法で、パッケージを停止し、スクリプトを実行してフラグを更新した後に親パッケージを再度実行し、キューブを再処理するように、このパッケージを設計するにはどうすればよいですか。それは可能ですか?または、この問題に取り組むためのより良い方法はありますか?

私はこれまでこの問題に直面したことがないので、どのように進めるかについて少し行き詰まっています。そのため、どんな助けでも大歓迎です。

4

1 に答える 1