この章では、Oracle Enterprise Schedulerのジョブ・セット(1つの単位として実行するためにグループ化できるジョブ定義の集合)を定義および発行する方法について説明します。
この章の内容は次のとおりです。
Oracle Enterprise Schedulerは、ジョブ・セットと呼ばれる、1つの単位として実行するためにグループ化できるジョブ定義の集合に対応しています。ジョブ・セットはネストできるため、ジョブ・セットにはジョブ定義の集合または1つ以上の子ジョブ・セットを含めることができます。ジョブ・セット内に含まれる各ジョブ定義やジョブ・セットは、ジョブ・セット・ステップと呼ばれます。
ジョブ・セットは、シリアル・ジョブ・セットまたはパラレル・ジョブ・セットとして定義されます。実行時、Oracle Enterprise Schedulerではパラレル・ジョブ・セット・ステップを並行して実行します。シリアル・ジョブ・セットが実行されるとき、Oracle Enterprise Schedulerでは、ステップを特定の順序で1つずつ実行します。Oracle Enterprise Schedulerでは、シリアル・ジョブ・セットを使用することによって、前のステップの実行ステータスに基づく、ステップ間の条件付き分岐がサポートされています。
シリアル・ジョブ・セットを定義してパラレル・ジョブ・セットを含めたり、パラレル・ジョブ・セットを定義してシリアル・ジョブ・セットを含めたりできます。パラレルおよびシリアル・ジョブ・セットが混在するジョブ・セットは、complex job setと呼ばれます。たとえば、シリアル・ジョブ・セットに子パラレル・ジョブ・セットが含まれる場合、シリアル・ジョブ・セットは子パラレル・ジョブ・セットに到達するまで、逐次実行されます。その後、子パラレル・ジョブ・セット内のすべてのジョブ定義またはジョブ・セット定義が並行して実行されます。子パラレル・ジョブ・セットが完了すると、続いて、シリアル・ジョブ・セットの残りのステップが逐次実行されます。ネストされたパラレル・ジョブ・セットは、ネストされていないパラレル・ジョブ・セットと同じように動作します。
ジョブ・セットのすべてのステップに対して、Oracle Enterprise Schedulerでは、特定のステップがジョブ・セット全体にどのように影響を及ぼすかについて、実行時の柔軟性をもたらすプロパティ(SYS_selectState
)がサポートされています。このプロパティはステップごとに定義します。表17-1に、SYS_selectStateを示します。
表17-1 ジョブ・セット・ステップのプロパティ
プロパティ | 説明 |
---|---|
|
ジョブ・セットの状態を決定するときに、ジョブ・セット・ステップの結果の状態を含めるかどうかを指定します。ステップの実行状態がジョブ・セット全体の最終的な状態に影響するかどうかを指定します。 デフォルトでは、すべてのジョブ・セット・ステップがジョブ・セットの状態に影響を及ぼします。特定のジョブ・セット・ステップの状態がジョブ・セットの状態に影響しないようにするには、そのステップに対して |
Oracle Enterprise Schedulerには、複数のアプリケーションをまたいで1つのジョブ・セットを実行する機能が備えられています。ジョブ・セットはホスティング・アプリケーションで実行され、デフォルトで、すべてのジョブ・セット・ステップもそのアプリケーションで実行されます。
次を指定して、Oracle JDeveloperでジョブ・セットを定義できます。
ジョブ・セットの名前、パッケージおよび説明
ジョブ・セットのアプリケーション定義プロパティ
ジョブ・セットのシステム・プロパティ
ジョブ・セット・ステップの指定
ジョブ・セットの内容は、ジョブ・セット・ステップを定義するときに指定します。たとえば、シリアル・ジョブ・セットの場合は、名前と実行モードを指定し、次に、ジョブ定義の順序を定義するジョブ・セット・ステップか、またはジョブ・セットの実行時に実行される子ジョブ・セットを追加します。
Oracle Enterprise Schedulerのジョブ・セットは、名前、パッケージ、ジョブ・セット実行モード、ステップ定義、アプリケーション定義プロパティおよびシステム・プロパティによって定義されます。
ジョブ・セットを作成する手順は、次のとおりです。
Oracle JDeveloperで、プロジェクト内で右クリックして「新規ギャラリ」を表示します。
「すべてのテクノロジ」タブの「カテゴリ」で、「ビジネス層」を展開し、「エンタープライズ・スケジューラ・メタデータ」を選択します。
「アイテム」で、「ジョブ・セット」を選択し、「OK」をクリックします。これにより、「ジョブ・セットの作成」ウィンドウが表示されます。
「ジョブ・セットの作成」ウィンドウで、次を指定します。
「名前」フィールドにジョブ・セットの名前を入力するか、またはデフォルト名を受け入れます。
「パッケージ」フィールドに、ジョブ・セットのパッケージ名を入力します。
「場所」フィールドに、ジョブ・セット・ファイルが格納されているディレクトリの完全パスが表示されます。
「OK」をクリックします。これにより、ジョブ・セットが作成され、図17-1に示すように、ジョブ・セット定義のページが表示されます。
図17-1 シリアル・ジョブ・セットが示されたジョブ・セット・エディタ
ジョブ・セット・エディタ・ペインで、「説明」フィールドにジョブ・セットの説明を入力します。
「ジョブ・セット・ステップ」領域で、「パラレル」または「シリアル」ラジオ・ボタンを選択してジョブ・セットに対してパラレルまたはシリアル実行モードを指定します。
ジョブ・セット・エディタ・ペインでジョブ・セット・ステップを追加します。ジョブ・セット・ステップの追加の詳細は、「シリアル・ジョブ・セット・ステップの定義方法」または「パラレル・ジョブ・セット・ステップの定義方法」を参照してください。
「アプリケーション定義プロパティ」領域で、「追加」をクリックしてジョブ・セットに関連付けられているプロパティを追加します。これらを使用して、ジョブ・セットのアプリケーション固有またはステップ固有のアプリケーション定義プロパティを表します。アプリケーション定義プロパティの使用の詳細は、「パラメータとシステム・プロパティの使用の概要」を参照してください。詳細は、「ジョブ・セット・レベル・パラメータのマテリアライズに関する必知事項」を参照してください。
「システム・プロパティ」領域で、「追加」をクリックしてジョブ・セットに関連付けられているシステム・プロパティを追加します。システム・プロパティの使用の詳細は、「システム・プロパティの使用」を参照してください。
「アクセス制御」領域で、「追加」をクリックしてこのメタデータにアクセスできるロールのリストを、そのアクセス・レベルとともに変更します。アクセスの定義の詳細は、「Oracle Enterprise Schedulerセキュリティ」を参照してください。
「ローカライゼーション」領域で、このジョブ・セットをローカライズするための次の情報を入力します。
リソース・バンドルの基準名 -- 国際化された値を指定するリソース・バンドルの基準名
表示名リソース・キー -- リソース・バンドルで表示名値を指定するリソース・キー
説明リソース・キー -- リソース・バンドルで説明テキストを指定するリソース・キー
ジョブ・セットを保存します。
シリアル・ジョブ・セット・ステップを定義するには、シリアル実行モードを選択し、次に、ジョブ・セット・ステップを追加します。ジョブ・セット・ステップは、使用可能なジョブ定義および現在のプロジェクトで定義されたジョブ・セットから作成されます。シリアル・ジョブ・セット・ステップは、ステップIDおよびそのステップに関連付けられるジョブ定義の子ジョブ・セット定義を指定する場合に定義します。次のステップを指定するために、ジョブ・セット・ステップの終了状態からのリンクも定義します。表17-2に、JDeveloperを使用して指定できる可能な終了状態を示します。
表17-2 ジョブ・セットのシリアル実行ステップの終了状態
終了状態 | 説明 |
---|---|
|
Oracle JDeveloperでは、この状態はチェックマーク・アイコンで示されます。このパスは、子ステップまたは子ジョブ・セットが正常に処理されたことを表します。 |
|
Oracle JDeveloperでは、このステップは警告ボタンで示されます。子ステップまたは子ジョブ・セットによって警告が発生しました。 |
|
Oracle JDeveloperでは、このステップはエラー・ボタンで示されます。子ステップまたは子ジョブ・セットの処理を実行するリクエストの一部の処理によって、エラーが発生しました。 |
シリアル・ジョブ・セット・ステップを追加する手順は、次のとおりです。
Oracle JDeveloperでジョブ・セットを定義すると、Oracle JDeveloperによって、定義したステップを表す要素を含むXMLファイルが作成されます。
パラレル・ジョブ・セットを定義する場合は、同時に実行される一連のジョブ・セット・ステップを指定します。パラレル・ジョブ・セットにはステップのみが含まれ、すべてのステップが同時に実行されて、相互に依存することも各ステップの実行順序に依存することもないため、ステップ間のリンクは含まれません。
ジョブ・セットを定義すると、Oracle JDeveloperによって、Oracle Enterprise Schedulerのジョブ・ステップ・スキーマに準拠するXMLドキュメントが作成されます。
シリアル・ジョブ・セットを定義する場合、関連付けられたXMLドキュメントにはジョブ・セット・ステップとリンクが含まれます。Oracle Enterprise Schedulerでは、シリアル・ジョブ・セットの定義に対して次の制限事項が適用されます。
ジョブ・セット内でのループを回避するため、ジョブ・セット定義に循環実行パスを含めることはできません。循環実行パス、すなわちループは、次のようにジョブ・セット・レベルで定義されます。ループは、1つのジョブ・セット・ステップから、任意の数の他のステップを経由するリンクに従って、同じジョブ・セット・ステップに戻るパスです。たとえば、Job_A
からJob_B
、Job_C
へのフローが定義されたジョブ・セットにおいて、Job_B
またはJob_C
からJob_A
に戻る実行パスを定義することはOracle Enterprise Schedulerによって許可されません。たとえば、成功、エラーまたは警告リンクのジョブ・セット・ステップ内のリンクの1つが同じジョブ・セット・ステップに戻る場合、循環実行パス、すなわちループを作成できます。このため、各ジョブ・セット・ステップはいずれかの使用可能なジョブ定義またはジョブ・セットにリンクするか、あるいはすべてのジョブ・セット・ステップで同じジョブ定義またはジョブ・セットを成功、エラーおよび警告の場合のリンクとして使用できます。ループとしては、ジョブ・セット・ステップIDによって識別されるジョブ・セット・ステップを経由するパスに基づくもののみが可能です。Oracle Enterprise Schedulerでは、ジョブ・セット・ステップ・レベルでのループを回避するために送信時にジョブ・セットが検証されます。また、Oracle JDeveloperではジョブ・セット・ステップ・レベルのループを含むジョブ・セットを作成することはできません。
ジョブ・セット内でのループを回避するため、ジョブ・セット定義に自己参照実行パスを含めることはできません。たとえば、Job_B
が定義されたジョブ・セットにおいて、Job_B
がERROR
の終了状態で終了した場合のためにJob_B
からJob_B
自体への実行パスを定義することは、Oracle Enterprise Schedulerによって許可されません。ただし、ジョブ定義またはジョブ・セットに使用可能なRETRIES
プロパティを使用して、構成されたRETRIES
の数だけ複数実行を行うことができます。
ステップの終了状態に対してジョブ・セット・リンクが定義されていない場合、ステップが指定されていない終了状態で終了するとジョブ・セットが停止することを意味します。たとえば、状態WARNING
のステップJob_D
に対してリンクが定義されておらず、ステップJob_D
がWARNING
の状態で終了した場合、ジョブ・セットの実行は停止します。
各ジョブ・セット・ステップは、いずれかの使用可能なジョブ定義またはジョブ・セットを使用するように定義することも、複数のステップで同じジョブ定義またはジョブ・セットを使用するように定義することもできます。
ジョブ・セットのアプリケーション定義プロパティまたはシステム・プロパティが、メタデータで設定された、またはジョブ・リクエストを発行するときに設定されたアプリケーション定義プロパティまたはシステム・プロパティと競合する場合があります。ジョブ・セットのアプリケーション定義プロパティおよびシステム・プロパティが処理される方法の詳細は、「メタデータ・サービスでのパラメータの使用」および「ランタイム・サービスでのパラメータの使用」を参照してください。
実行時、ジョブ・セットの個々のステップは、表17-2に示す様々な終了状態で終了する可能性があります。ジョブ・セット・ステップがジョブ・セットである場合、ジョブ・セット・ステップもそれらのいずれかの終了状態で終了します。Oracle Enterprise Schedulerには、ジョブ・セット・ステップの終了状態について優先度の階層があります。これは、ジョブ・セットに複数のステップがある場合に、ジョブ・セットの終了状態には最も優先度の高い終了状態のステップの終了状態が適用されることを意味します。したがって、ステップの最も優先度の高い終了状態によって、ジョブ・セット全体の結果の状態が決定されます。
ジョブ・セットの結果の状態は、システム内の後続のすべての状態依存処理に影響を及ぼします。ジョブ・セットは、すべての子リクエストが完了した後にのみ、子リクエストの終了状態に基づいて終了状態への遷移の基本的なルールに常に従います。通常、ジョブ・セットは、すべての子リクエストが終了し、終了状態に遷移した後にのみ、計算されたいずれかの終了状態に遷移します。たとえば、特定のジョブ・セットが実際は別のジョブ・セット内のステップである場合、内部ジョブ・セット・リクエストの状態が計算される方法は、外部ジョブ・セット内での条件付き実行に影響を与えます。
表17-3に、可能なジョブ・セットの終了状態および示されるレベル(優先度の列)を示します。
表17-3 ジョブ・セットの終了状態の遷移
終了状態 | 説明 | 優先度 |
---|---|---|
|
ジョブ・セットのいずれかのステップが シリアル・ジョブ・セットでは、1つのステップが |
|
|
ジョブ・セットのいずれかのステップが |
|
|
少なくとも子リクエストの1つが期限切れになり、 |
|
|
少なくとも1つの子リクエストで取消しの試行が正常に処理され、 さらに、 ジョブ・セットが取り消された場合、追加または実行されていないステップは、最終状態のために |
|
|
すべての子リクエストが |
|
表17-4に、追加の可能なジョブ・セットの状態を示します。
表17-4 可能なジョブ・セットの実行時の状態
状態 | 説明 |
---|---|
|
これは発行されたジョブ・セット・リクエストの初期状態です。ただし、ジョブ・セット・リクエストが |
|
ジョブ・セットは、 |
|
発行されたジョブ・セットは、 |
|
ユーザーがジョブ・セット全体の取消しをリクエストした場合、ジョブ・セットは このような場合、現在もアクティブでまだ終了状態に遷移していないすべての子リクエストに対して取消しが試行されます。 一方、取消しがジョブ・セットの特定の子リクエストに対して試行された場合、親リクエストの状態は変更されず、可能であれば特定の子リクエストのみが 後処理中に取消しが発生した場合、状態は |
|
この状態は、ジョブ・セットまたはジョブ・セット・ステップの実行が終了し、後処理が開始されることを示します。 |
|
ジョブ・セットの場合、他のステップが完了するか、実行中の間、個々のステップは シリアル・ジョブ・セットの場合、ジョブ・セットは ただし、パラレル・ジョブ・セットでは、複数のステップが |
|
|
図17-5に示すように、Oracle Enterprise Schedulerには、複数のアプリケーションをまたいで1つのジョブまたは1つのジョブ・セットを実行する機能が備えられています。
ジョブ・セットFINには3つのステップがあり、そのうちの2つは異なるアプリケーションで実行されるように定義されています。
ジョブ・セットFINはGLアプリケーションに対して発行されます。
ステップ1はEFFECTIVE_APPLICATION
システム・プロパティがODIに設定されているため、ODIアプリケーションで実行されます。
ステップ2には有効なアプリケーションが設定されていないため、GLアプリケーションで実行されます。
ステップ3はEFFECTIVE_APPLICATION
システム・プロパティがINVに設定されているため、INVアプリケーションで実行されます。
図17-5 アプリケーション間ジョブ・セット・ステップ
ジョブ・セットはホスティング・アプリケーションで実行され、デフォルトで、すべてのジョブ・セット・ステップもそのアプリケーションで実行されます。システム・プロパティSYS_effectiveApplication
は、ジョブ定義または(ジョブ・セット・ステップではなく)ジョブ・セットで定義する必要があります。SYS_effectiveApplication
を定義するネストされたジョブ・セットの場合、アプリケーションはネストされたジョブ・セットのすべての子リクエストに適用されます。ネストされたジョブ・セットである場合、ネストされたジョブ・セットのジョブは有効なアプリケーションで実行されます。ジョブに対してSYS_effectiveApplication
が定義されている場合、ジョブ・セットのリクエストおよびそのジョブ・セットのすべての子リクエストは有効なアプリケーションに関連付けられます。つまり、これらのリクエストのAPPLICATION
システム・プロパティは有効なアプリケーションに設定されます。
SYS_effectiveApplication
システム・プロパティは、メタデータ、具体的には、ジョブ・セット、ジョブ・セット・ステップ、ジョブ・タイプおよびジョブでのみ定義できます。プロパティSYS_effectiveApplication
は、リクエスト・パラメータではサポートされていません。有効なアプリケーションは、ホスティング・アプリケーションと同じクラスタ内にある必要があり、そうでない場合、エラーが発生します。発行されたジョブ・セットによって有効なアプリケーションが定義されている場合、その値はホスティング・アプリケーションと同じである必要があり、そうでない場合、ジョブ・セットの発行は拒否されます。
複数のアプリケーションをまたいで実行されるジョブ・セットの場合、アプリケーションによるリクエストの問合せは、すべての子を取得するには不十分です。Oracle Enterprise Schedulerでは、問合せフィールドとして絶対親IDがサポートされているため、アプリケーションに関係なく、ジョブ・セットのすべてのリクエストを問い合せることができます。絶対親IDは、ホスティング・アプリケーションに対して発行されたジョブ・セットのリクエストIDです。
Oracle Enterprise Schedulerでは、次の要件が適用されるアプリケーション間ジョブ・セットがサポートされています。
指定したジョブ・セットのすべてのアプリケーションは同じクラスタにデプロイされる必要があります。
ジョブ・セット内のすべてのアプリケーションは同じエンタープライズ・セキュリティを共有する必要があります。
すべてのリクエスト・メタデータは、ジョブ・セットの発行先のアプリケーション(ホスティング・アプリケーション)からアクセスできる必要があります。リクエストのすべてのメタデータは、ホスティング・アプリケーションのランタイム・ストアに維持される必要があります。維持されるメタデータには、発行されたジョブ・セットおよびすべてのネストされたジョブ・セットで使用されるメタデータがすべて含まれます。
サブリクエストで使用されるメタデータがジョブ・セットの発行時にランタイム・ストアにすでに維持されていないかぎり、サブリクエストのメタデータはサブリクエストを発行するアプリケーションからアクセスできる必要があります。
ジョブ・セットのステップでは、ジョブ・セットの前のステップからの入力が必要になる場合があります。Oracle Enterprise Schedulerでは、1つのステップから次のステップの入力へ出力を簡単に転送するために、2つのシステム・プロパティSYS_inputList
およびSYS_outputList
が使用されます。
ジョブ・セットの次のステップに渡す必要がある情報(出力ファイルのリストなど)がジョブで生成されると、ジョブではSYS_outputList
プロパティに情報が追加されます。ジョブ・リクエストの実行が完了すると、Oracle Enterprise Schedulerでは、次のステップが実行される前に、リクエストのSYS_outputList
プロパティを転送し、これが次のステップのSYS_inputList
プロパティになるようにします。次のステップはその入力として前のステップの出力を受け取ります。
ジョブ・セット・ステップは単一ジョブである場合とジョブ・セットである場合があり、Oracle Enterprise Schedulerでは、ネストされたジョブ・セットによる転送もサポートされています。シリアル・ジョブ・セットの場合、Oracle Enterprise Schedulerではジョブ・セットの出力がジョブ・セットの最後のステップの出力として定義されます。つまり、最後のステップのSYS_outputList
プロパティのみが次のステップに転送されます。同様に、シリアル・ジョブ・セットへの入力は、そのジョブ・セットの最初のステップにのみ転送されます。つまり、シリアル・ジョブ・セットの最初のステップのみで、SYS_inputList
プロパティが前のステップのSYS_outputList
プロパティの値に設定されます。
パラレル・ジョブ・セットの場合、Oracle Enterprise Schedulerでは、ジョブ・セットの出力はジョブ・セットのすべてのジョブのSYS_outputList
プロパティの連結(デリミタで区切られ、順序の保証なし)であることが指定されます。パラレル・ジョブ・セットへの入力はジョブ・セットのすべてのジョブに転送されます。つまり、パラレル・ジョブ・セットのすべてのジョブで、INPUT_LIST
プロパティが同じになります。システム・プロパティOUTPUT_LIST_DELIMITER
では、出力ファイルを一覧表示するときに使用するデリミタが指定されます。
ジョブ・セットに2つのジョブがあり、各ジョブで独自の出力ファイルfile1.txt
およびfile2.txt
が生成されるとします。OUTPUT_LIST_DELIMITER
の値がセミコロンである場合、そのジョブ・セットのシステム・プロパティSYS_outputList
の値はfile1.txt;file2.txt
になります。出力ファイルの連結されたリストを使用して、ジョブ・セットの次のジョブ・ステップでは、ジョブ・セット内の前のステップによって生成された出力ファイルにアクセスできます。
InputFile
クラスはジョブ定義の入力としてファイルへのアクセスを提供します。現在、ファイルをジョブ・リクエストへの入力として受け入れるためのメカニズムはありません。
ステップのSYS_outputList
プロパティの値を次のステップのSYS_inputList
プロパティの値へ転送する場合を除き、Oracle Enterprise Schedulerでは2つのプロパティは他のシステム・プロパティと同様に処理されます。Oracle Enterprise Schedulerではプロパティの値の形式は定義されません(パラレル・ジョブ・セットの場合のセミコロンのデリミタを除く)。プロパティの構文およびセマンティクスの定義は、たとえば、完全修飾名または相対パス名、およびデリミタとしてのカンマまたはスペースを使用して、ジョブで行われます。