Oracleジョブチェーン(以下、チェーン)は、結合した1つの目的のために互いにリンクされた一連の名前付きタスクです。つまりリンクジョブ同士は依存しており、前のジョブの実行結果次第で次のジョブの実行有無が決定します。JP1のように可視化されていませんが、イメージとしてはジョブ管理ツールになります。チェーンは、前の1つ以上のジョブの結果に応じて異なるジョブが開始される依存性ベースのスケジューリングを実装できる手段です。
以下の流れでジョブチェーンを作成します。
順序 |
作業 |
実行例 |
1 |
チェーンオブジェクトを作成 |
「my_chain1」という名前でチェーンオブジェクトを作成する
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 BEGIN
DBMS_SCHEDULER.CREATE_CHAIN (
chain_name => 'my_chain1',
rule_set_name => NULL,
evaluation_interval => NULL,
comments => 'My first chain');
END;
/
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
|
2 |
チェーン内のステップを定義 |
「my_chain1」に2つのステップを追加する
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
BEGIN
DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
chain_name => 'my_chain1',
step_name => 'my_step1',
program_name => 'my_program1');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
chain_name => 'my_chain1',
step_name => 'my_step2',
program_name => 'my_chain2');
END;
/
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
|
3 |
ルールを追加 |
「my_chain1」にステップstep1でチェーンを開始するルールおよびstep1の完了時にステップstep2を開始するルールを定義する
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
BEGIN
DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
chain_name => 'my_chain1',
condition => 'TRUE',
action => 'START step1',
rule_name => 'my_rule1',
comments => 'start the chain');
DBMS_SCHEDULER.DEFINE_CHAIN_RULE (
chain_name => 'my_chain1',
condition => 'step1 completed',
action => 'START step2',
rule_name => 'my_rule2');
END;
/
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
|
4 |
チェーンを使用可能 |
「my_chain1」を有効化する
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
BEGIN
DBMS_SCHEDULER.ENABLE ('my_chain1');
END;
/
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
|
5 |
チェーンを指し示すジョブを作成 |
「my_chain1」を指定したチェーンジョブを作成する
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'chain_job_1',
job_type => 'CHAIN',
job_action => 'my_chain1',
repeat_interval => 'freq=daily;byhour=13;byminute=0;bysecond=0',
enabled => TRUE);
END;
/
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
|
|