| Oracle Database 管理者ガイド 11gリリース1(11.1) E05760-03 |
|
この付録の内容は次のとおりです。
DBMS_JOBはジョブのスケジュールに使用するPL/SQLパッケージです。このパッケージは、より強力で柔軟性の高いOracle Schedulerで置き換えられています。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_JOBとOracle Scheduler(スケジューラ)は、同じジョブ・コーディネータを使用して、ジョブ・キュー・プロセスを起動します。(スケジューラの場合、これらのプロセスはジョブ・スレーブ・プロセスと呼ばれます。この項では、これらの用語を同じ意味で使用します。)通常、DBMS_JOB用のジョブ・キュー・プロセス数を制限するには、JOB_QUEUE_PROCESSES初期化パラメータを使用し、スケジューラのジョブ・スレーブ・プロセス数を制限するには、スケジューラ属性max_job_slave_processesを使用しますが、スケジューラはJOB_QUEUE_PROCESSESパラメータの影響を受けます。
スケジューラのジョブ・スレーブ・プロセスの最大数は、JOB_QUEUE_PROCESSESとmax_job_slave_processesの値の小さいほうの値で決まります。次に例を示します。
JOB_QUEUE_PROCESSESが10、max_job_slave_processesが20に設定されている場合、DBMS_JOBとスケジューラの間で共有されるジョブ・スレーブ・プロセスがジョブ・コーディネータで起動される個数の最大値は10になります。
JOB_QUEUE_PROCESSESが20でmax_job_slave_processesが10の場合は、最大20個のジョブ・スレーブ・プロセスがコーディネータで起動されます。スケジューラで使用できるのは10個までですが、DBMS_JOBでは20個すべてを使用できます。
JOB_QUEUE_PROCESSESが0の場合は、DBMS_JOBが使用禁止になり、スケジューラのジョブ・スレーブ・プロセスの最大数はmax_job_slave_processesスケジューラ属性で制御されます。
この項では、DBMS_JOBパッケージで作成されたジョブを取得し、DBMS_SCHEDULERパッケージを構成して制御するOracle Schedulerを使用してそれらをリライトする方法の例をいくつか示します。
次は、DBMS_JOBを使用してジョブを作成する例です。
VARIABLE jobno NUMBER; BEGIN DBMS_JOB.SUBMIT(:jobno, 'INSERT INTO employees VALUES (7935, ''SALLY'', ''DOGAN'', ''sally.dogan@xyzcorp.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@xyzcorp.com'', NULL, SYSDATE,''AD_PRES'', NULL, NULL, NULL, NULL);'); start_date => SYSDATE, repeat_interval => 'FREQ = DAILY; INTERVAL = 1'); END; /
次は、DBMS_JOBを使用してジョブを変更する例です。
BEGIN DBMS_JOB.WHAT(31, 'INSERT INTO employees VALUES (7935, ''TOM'', ''DOGAN'', ''tom.dogan@xyzcorp.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@xyzcorp.com'', NULL, SYSDATE, ''AD_PRES'', NULL, NULL, NULL, NULL);'); END; /
次の例では、DBMS_JOBを使用してジョブを削除します。14144は実行されているジョブの番号です。
BEGIN DBMS_JOB.REMOVE(14144); COMMIT; END; /
DBMS_SCHEDULERを使用して、かわりに次のような文を発行します。
BEGIN DBMS_SCHEDULER.DROP_JOB('myjob1'); END; /
|
関連項目:
|