
自動リカバリが有効化されたジョブが実行中に失敗した場合は、リカバリモードでジョブを再度実行することができます。リカバリモードでは、Data Services によって正常に完了したステップの結果が取得され、元のジョブと同じ条件下で、未完了または失敗したステップのみが再実行されます。
リカバリの有効化

リカバリは、ジョブの実行時にデフォルトでは有効化されていません。オプションを選択する必要があります。
このオプションを有効にすると、Data Services により、完了したタスクと失敗したタスクがすべて記録されます。
ジョブが失敗した場合は、次のジョブ実行で、失敗した最後の実行からの回復という別のオプションを使用できます。このオプションはデフォルトで選択されており、ジョブはリカバリモードで実行されます。
リカバリモード
リカバリモードでは、Data Services により、前回の実行で正常に完了しなかったステップまたはリカバリユニットが実行されます。これには、失敗したステップと、Try/Catch ブロック内のステップなど、例外を生成したが正常に完了したステップが含まれます。通常のジョブ実行と同様に、ステップはワークフローダイアグラムで接続されていない場合は並列で実行され、接続されている場合は順次実行されます。
例を挙げて説明します。
リカバリ要件
この例では、ファクトテーブルが、次元テーブルにすでにロードされているデータと適切に一致するデータとともにロードされるようにします。
- リカバリジョブでは、リカバリされたデータフローの元のジョブと同じ抽出基準を使用する必要があります。
現在のシステム日付に基づくデータ抽出など、新しい抽出基準がリカバリジョブで使用される場合、テーブルのデータは、完了したデータフローに以前に抽出されたデータとは一致しません。リカバリジョブで新しい値が使用される場合、ジョブの実行は条件付きステップまたは Try/Catch ブロックを含むまったく異なるパスに従う場合があります。
- リカバリジョブは、元のジョブとまったく同じ実行パスに従う必要があります。
Data Services では、元のジョブへの外部入力が記録されるため、リカバリジョブはこれらの保存された値を使用して、同じ実行パスに従うことができます。
リカバリのための Try/Catch ブロックの使用
Data Services では、リカバリ中に使用するために Try/Catch ブロックの結果は保存されません。Try/Catch ブロック内で例外がスローされた場合、リカバリ中に、Data Services は例外をスローしたステップと後続のステップを実行します。
リカバリされたジョブでは Try/Catch ブロックの実行パスが異なる場合があるため、Try/Catch ブロックで設定された変数を使用すると、自動リカバリ中に結果が変更される可能性があります。
たとえば、Try/Catch ブロック内で変数 $i の値を定義するジョブを作成するとします。例外が発生した場合は、$i の代替値を設定します。後続のステップは、新しい値の $i に基づきます。

最初のジョブ実行時に、最初のワークフローに例外を生成するエラーが含まれており、この例外が捕捉されてから、変数が 0 に設定されます。ただし、ジョブは次のステップに進み、$i>1 のワークフローを実行します。ただし、以下の図に示すように、後続のワークフローでジョブが失敗します。

エラーを修正した後、ジョブをリカバリモードで実行します。リカバリ実行時に、最初のワークフローで例外が生成されなくなります。したがって、変数 $i の値は異なり、ジョブでは異なる後続ワークフローが選択され、以下の図に示すように異なる結果が生成されます。

リカバリユニット

ワークフロー内のステップは相互に依存し、同時に実行される場合があります。依存関係がある場合は、ワークフローをリカバリユニットとして指定します。このためには、ワークフロー全体を正常に完了する必要があります。ワークフローが正常に完了しない場合、Data Services では、リカバリ中にワークフロー全体 (前のワークフロー実行で正常に実行されたステップを含む) が実行されます。
逆に、ワークフローまたはデータフローが 1 回だけ実行されるように指定する必要がある場合があります。この設定を有効にすると、ジョブによってオブジェクトが再実行されません。
注意
