Oracle Schedulerは、DBMS_JOB
パッケージを置換します。
Oracle Database 11g リリース2 (11.2)において、DBMS_JOB
がOracle Schedulerに置き換えられています。Oracle Schedulerは、ジョブのスケジュールに使用されるパッケージであるDBMS_JOB
よりも、強力で柔軟性があります。DBMS_JOB
からOracle Schedulerに切り替えることをお薦めしますが、下位互換性を保つために、DBMS_JOB
もサポートされています。
JOB_QUEUE_PROCESSES
初期化パラメータには、ジョブの実行用に作成できるプロセスの最大数を指定します。
Oracle Database 11g以降では、JOB_QUEUE_PROCESSES
のデフォルトが1000になっています。ジョブ・コーディネータ・プロセスは、実行されるジョブ数と使用可能なリソースに基づいて、必要な数のジョブ・キュー・プロセスのみを起動します。JOB_QUEUE_PROCESSES
により低い数字を設定すると、ジョブ・キュー・プロセスの数を制限できます。
JOB_QUEUE_PROCESSES
を0に設定すると、DBMS_JOB
ジョブおよびDBMS_SCHEDULER
ジョブが使用不可になります。
関連項目:
JOB_QUEUE_PROCESSES
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
DBMS_JOB
とOracle Scheduler(スケジューラ)は、同じジョブ・コーディネータを使用して、ジョブ・スレーブを起動します。
JOB_QUEUE_PROCESSES
初期化パラメータを使用すると、DBMS_JOB
とスケジューラの両方のジョブ・スレーブ数を制限できます。
JOB_QUEUE_PROCESSES
が0の場合、DBMS_JOB
とOracle Schedulerジョブの両方が無効になります。
関連項目:
JOB_QUEUE_PROCESSES
初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
この項では、DBMS_JOB
パッケージで作成されたジョブを取得し、DBMS_SCHEDULER
パッケージを構成して制御するOracle Schedulerを使用してそれらをリライトする方法の例をいくつか示します。
DBMS_JOB
パッケージおよびDBMS_SCHEDULER
パッケージを使用したジョブの作成を例で示します。
次の例では、DBMS_JOB
を使用してジョブを作成します。
VARIABLE jobno NUMBER; BEGIN DBMS_JOB.SUBMIT(:jobno, 'INSERT INTO employees VALUES (7935, ''SALLY'', ''DOGAN'', ''sally.dogan@examplecorp.com'', NULL, SYSDATE, ''AD_PRES'', NULL, NULL, NULL, NULL);', SYSDATE, 'SYSDATE+1'); COMMIT; END; /
DBMS_SCHEDULER
を使用した等価の文は、次のとおりです。
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'job1', job_type => 'PLSQL_BLOCK', job_action => 'INSERT INTO employees VALUES (7935, ''SALLY'', ''DOGAN'', ''sally.dogan@examplecorp.com'', NULL, SYSDATE,''AD_PRES'', NULL, NULL, NULL, NULL);', start_date => SYSDATE, repeat_interval => 'FREQ = DAILY; INTERVAL = 1'); END; /
DBMS_JOB
パッケージおよびDBMS_SCHEDULER
パッケージを使用したジョブの変更を例で示します。
次の例では、DBMS_JOB
を使用してジョブを変更します。
BEGIN DBMS_JOB.WHAT(31, 'INSERT INTO employees VALUES (7935, ''TOM'', ''DOGAN'', ''tom.dogan@examplecorp.com'', NULL, SYSDATE,''AD_PRES'', NULL, NULL, NULL, NULL);', COMMIT; END; /
この文では、別の値を挿入するようにJOB1
の処理が変更されます。
DBMS_SCHEDULER
を使用した等価の文は、次のとおりです。
BEGIN DBMS_SCHEDULER.SET_ATTRIBUTE( name => 'JOB1', attribute => 'job_action', value => 'INSERT INTO employees VALUES (7935, ''TOM'', ''DOGAN'', ''tom.dogan@examplecorp.com'', NULL, SYSDATE, ''AD_PRES'', NULL, NULL, NULL, NULL);', END; /
DBMS_JOB
パッケージおよびDBMS_SCHEDULER
パッケージを使用したジョブの削除を例で示します。
次の例では、DBMS_JOB
を使用してジョブを削除します。14144は実行されているジョブの番号です。
BEGIN DBMS_JOB.REMOVE(14144); COMMIT; END; /
DBMS_SCHEDULER
を使用して、かわりに次のような文を発行します。
BEGIN DBMS_SCHEDULER.DROP_JOB('myjob1'); END; /
関連項目:
DBMS_SCHEDULER
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。