A DBMS_JOBのサポート
Oracle Schedulerは、DBMS_JOBパッケージを置換します。
- DBMS_JOBからOracle Schedulerへの置換え
Oracle Database 11g リリース2 (11.2)において、DBMS_JOBがOracle Schedulerに置き換えられています。Oracle Schedulerは、ジョブのスケジュールに使用されるパッケージであるDBMS_JOBよりも、強力で柔軟性があります。DBMS_JOBは下位互換性のためにOracle Database 18cで引き続きサポートされますが、DBMS_JOBからOracle Schedulerに切り替えることをお薦めします。 - DBMS_JOBからOracle Schedulerへの移行
この項では、DBMS_JOBパッケージで作成されたジョブを取得し、DBMS_SCHEDULERパッケージで構成して制御するOracle Schedulerを使用してそれらをリライトする方法の例をいくつか示します。
親トピック: 付録
A.1 DBMS_JOBからOracle Schedulerへの置換え
Oracle Database 11g リリース2 (11.2)において、DBMS_JOBがOracle Schedulerに置き換えられています。Oracle Schedulerは、ジョブのスケジュールに使用されるパッケージであるDBMS_JOBよりも、強力で柔軟性があります。DBMS_JOBは下位互換性のためにOracle Database 18cで引き続きサポートされますが、DBMS_JOBからOracle Schedulerに切り替えることをお薦めします。
- DBMS_JOBの構成
JOB_QUEUE_PROCESSES初期化パラメータでは、ジョブの実行用に作成できるプロセスの最大数を指定します。 - DBMS_JOBとOracle Schedulerの使用
DBMS_JOBとOracle Scheduler(スケジューラ)は、同じジョブ・コーディネータを使用して、ジョブ・スレーブを起動します。
親トピック: DBMS_JOBのサポート
A.1.1 DBMS_JOBの構成
JOB_QUEUE_PROCESSES初期化パラメータには、ジョブの実行に対して作成可能なプロセスの最大数を指定する。
Oracle Database 12cリリース2以降では、JOB_QUEUE_PROCESSESのデフォルトが4000になっています。ジョブ・コーディネータ・プロセスは、実行されるジョブ数と使用可能なリソースに基づいて、必要な数のジョブ・キュー・プロセスのみを起動します。JOB_QUEUE_PROCESSESにより低い数字を設定すると、ジョブ・キュー・プロセスの数を制限できます。
JOB_QUEUE_PROCESSESを0に設定すると、DBMS_JOBジョブおよびDBMS_SCHEDULERジョブが使用不可になります。
関連項目:
JOB_QUEUE_PROCESSES初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
A.1.2 DBMS_JOBとOracle Schedulerの使用
DBMS_JOBとOracle Scheduler(スケジューラ)は、同じジョブ・コーディネータを使用して、ジョブ・スレーブを起動します。
JOB_QUEUE_PROCESSES初期化パラメータを使用すると、DBMS_JOBとスケジューラの両方のジョブ・スレーブ数を制限できます。
JOB_QUEUE_PROCESSESが0の場合、DBMS_JOBとOracle Schedulerジョブの両方が無効になります。
関連項目:
-
JOB_QUEUE_PROCESSES初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。
A.2 DBMS_JOBからOracle Schedulerへの移行
この項では、DBMS_JOBパッケージで作成されたジョブを取得し、DBMS_SCHEDULERパッケージを構成して制御するOracle Schedulerを使用してそれらをリライトする方法の例をいくつか示します。
- ジョブの作成
DBMS_JOBパッケージおよびDBMS_SCHEDULERパッケージを使用したジョブの作成を例で示します。 - ジョブの変更
DBMS_JOBパッケージおよびDBMS_SCHEDULERパッケージを使用したジョブの変更を例で示します。 - ジョブ・キューからのジョブの削除
DBMS_JOBパッケージおよびDBMS_SCHEDULERパッケージを使用したジョブの削除を例で示します。
親トピック: DBMS_JOBのサポート
A.2.1 ジョブの作成
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;
/A.2.2 ジョブの変更
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;
/A.2.3 ジョブ・キューからのジョブの削除
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パッケージおよびタイプ・リファレンス』を参照してください。