DBMS_JOB
パッケージは、ジョブ・キュー内のジョブをスケジュールおよび管理します。
注意: DBMS_JOB パッケージは、DBMS_SCHEDULER パッケージによって置き換えられています。 特に、システム・ロードを管理するジョブを管理する場合、ユーザーのパッケージの実行権限を取り消して、DBMS_JOB を無効にすることを考慮する必要があります。
詳細は、第114章「DBMS_SCHEDULER」および『Oracle Database管理者ガイド』の |
この章では、次の項目について説明します。
セキュリティ・モデル
使用上の注意
DBMS_JOB
を使用するために必要な特定のシステム権限はありません。 DBMS_JOB
の管理に使用できるシステム権限はありません。ユーザー所有のジョブを除き、ジョブの変更や削除はできません。これは、DBA権限が付与されているユーザーを含むすべてのユーザーにあてはまります。
ユーザーによって所有されているか、またはそれに対する明示的なEXECUTE
権限がユーザーに付与されているプロシージャを実行できます。ただし、ロールによってユーザーに実行権限が付与されているプロシージャを実行することはできません。
一度ジョブを起動して実行すると、そのジョブを簡単に停止する方法はありませんので注意してください。
DBMS_JOB
はジョブの複数インスタンスの実行をサポートしています。デフォルトで、ジョブはどのインスタンスでも実行できますが、ジョブを実行するインスタンスは1つに限られます。さらに、ジョブを特定のインスタンスにバインドすることで、強制的にインスタンスをバインドできます。インスタンスのバインドを実装するには、インスタンス親和性パラメータにインスタンス番号を指定します。ただし、Oracle Database 10g リリース1(10.1)では、インスタンスのバインドは実装しないことをお薦めします。サービス親和性の方が適切です。 この概念は、DBMS_SCHEDULERパッケージに実装されています。
次のプロシージャを使用して、インスタンス親和性のあるジョブを作成、変更または実行できます。親和性を指定しない場合、すべてのインスタンスでジョブが実行されることになるので注意してください。
ジョブをジョブ・キューに送るには、次の構文を使用します。
DBMS_JOB.SUBMIT( job OUT BINARY_INTEGER, what IN VARCHAR2, NEXT_DATE IN DATE DEFAULTSYSDATE, interval IN VARCHAR2 DEFAULT 'NULL', no_parse IN BOOLEAN DEFAULT FALSE, instance IN BINARY_INTEGER DEFAULT ANY_INSTANCE, force IN BOOLEAN DEFAULT FALSE);
パラメータinstance
およびforce
を使用して、ジョブおよびインスタンスの親和性を制御します。instance
のデフォルト値は0(ゼロ)で、いずれのインスタンスでもジョブを実行できることを示します。特定のインスタンスでジョブを実行するには、instance
の値を指定します。 instance
の値が負数またはNULL
の場合は、エラーORA-23319
が表示されます。
force
パラメータは、FALSE
にデフォルト設定されます。force
がTRUE
の場合は、ジョブ・インスタンスとして正の整数がすべて受け入れられます。 force
がFALSE
の場合は、指定したインスタンスが実行されている必要があります。実行されていない場合は、エラー番号ORA-23428
が表示されます。
ジョブを実行するために特定のインスタンスを割り当てるには、次の構文を使用します。
DBMS_JOB.INSTANCE( JOB IN BINARY_INTEGER, instance IN BINARY_INTEGER, force IN BOOLEAN DEFAULT FALSE);
この例のFORCE
パラメータはFALSE
にデフォルト設定されます。INSTANCEの値が0(ゼロ)の場合は、ジョブ親和性が変更され、FORCEの値に関係なく、使用可能なすべてのインスタンスがジョブを実行できます。 INSTANCE
の値が正数でFORCE
パラメータがFALSE
の場合、ジョブ親和性は、指定したインスタンスが実行されている場合のみ変更されます。実行されていない場合は、エラーORA-23428
が表示されます。
force
パラメータがTRUE
の場合は、ジョブ・インスタンスとして正の整数がすべて受け入れられ、ジョブ親和性が変更されます。 instance
の値が負数またはNULL
の場合は、エラーORA-23319が表示されます。
ジョブに関連付けられたユーザー定義可能なパラメータを変更するには、次の構文を使用します。
DBMS_JOB.CHANGE( JOB IN BINARY_INTEGER, what IN VARCHAR2 DEFAULT NULL, next_date IN DATE DEFAULT NULL, interval IN VARCHAR2 DEFAULT NULL, instance IN BINARY_INTEGER DEFAULT NULL, force IN BOOLEAN DEFAULT FALSE );
この例では、instance
およびforce
の2つのパラメータが使用されています。instance
のデフォルト値はNULL
で、ジョブ親和性を変更しないことを示しています。
force
のデフォルト値はFALSE
です。 指定したインスタンスが実行されていない場合はエラーORA-23428
が、instance
の数値が負数の場合はエラーORA-23319
が表示されます。
DBMS_JOB.RUN
のforce
パラメータはFALSE
にデフォルト設定されます。force
がTRUE
の場合は、フォアグラウンド・プロセスでのジョブ実行にインスタンス親和性は無関係です。forceがFALSE
の場合は、指定したインスタンスでのみフォアグラウンドでジョブを実行できます。 forceがFALSE
で、接続されたインスタンスが不適切なインスタンスである場合は、エラーORA-23428
が表示されます。
DBMS_JOB.RUN( job IN BINARY_INTEGER, force IN BOOLEAN DEFAULT FALSE);
一度ジョブを起動して実行すると、そのジョブを簡単に停止する方法はありませんので注意してください。
表65-1 DBMS_JOBパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
ジョブの実行を禁止します。 |
|
ジョブに関連付けられたユーザー定義可能なパラメータをすべて変更します。 |
|
インスタンスでジョブが実行されるように割り当てます。 |
|
指定したジョブの実行間隔を変更します。 |
|
指定したジョブの次の実行時間を変更します。 |
|
指定したジョブをジョブ・キューから削除します。 |
|
指定したジョブを強制的に実行します。 |
|
新規ジョブをジョブ・キューに送ります。 |
|
指定されたジョブをエクスポート用に再作成するか、またはインスタンス親和性を指定してエクスポート用に再作成します。 |
|
指定したジョブに関するジョブの記述を変更します。 |
このプロシージャは中断フラグを設定します。中断状態のジョブが実行されることはありません。
構文
DBMS_JOB.BROKEN ( job IN BINARY_INTEGER, broken IN BOOLEAN, next_date IN DATE DEFAULT SYSDATE);
パラメータ
表65-2 BROKENプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブの番号。 |
|
ジョブ中断: |
|
次回のリフレッシュ日付。 |
注意: 実行中のジョブに中断を指定すると、ジョブの完了後、ジョブのステータスはNORMALにリセットされます。したがって、このプロシージャは、実行中でないジョブに対してのみ実行してください。 |
使用上の注意
この文の直後にCOMMIT
文を実行する必要があります。
このプロシージャは、ユーザーがジョブに設定できるフィールドを変更します。
構文
DBMS_JOB.CHANGE ( job IN BINARY_INTEGER, what IN VARCHAR2, next_date IN DATE, interval IN VARCHAR2, instance IN BINARY_INTEGER DEFAULT NULL, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表65-3 CHANGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブの番号。 |
|
実行するPL/SQLプロシージャ。 |
|
次回のリフレッシュ日付。 |
|
日付ファンクション。ジョブ実行の直前に評価されます。 |
|
ジョブの送信時にそのジョブを実行できるインスタンスを指定します。デフォルトは |
|
|
使用上の注意
この文の直後にCOMMIT
文を実行する必要があります。
パラメータinstance
およびforce
がジョブ・キュー親和性のために追加されています。ジョブ・キュー親和性を使用して、ユーザーは、送信されたジョブを特定のインスタンスで実行するか、またはどのインスタンスでも実行できるようにするかを指示できます。
パラメータwhat
、next_date
またはinterval
がNULL
の場合、現在の値は変更されません。
例
BEGIN DBMS_JOB.CHANGE(14144, null, null, 'sysdate+3'); COMMIT; END;
このプロシージャは、ジョブ・インスタンス親和性を変更します。
構文
DBMS_JOB.INSTANCE ( job IN BINARY_INTEGER, instance IN BINARY_INTEGER, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表65-4 INSTANCEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブの番号。 |
|
ジョブの送信時に、ユーザーはジョブを実行できるインスタンスを指定できます。 |
|
|
使用上の注意
この文の直後にCOMMIT
文を実行する必要があります。
このプロシージャは、ジョブの実行間隔を変更します。
構文
DBMS_JOB.INTERVAL ( job IN BINARY_INTEGER, interval IN VARCHAR2);
パラメータ
使用上の注意
ジョブが正常に完了すると、next_date
にこの新しい日付が設定されます。interval
は、その日付をselect interval
into next_date
from dual;という文にはめ込むことによって評価されます。
interval
パラメータの評価結果は将来の日時に設定する必要があります。有効な間隔の例は次のとおりです。
間隔 | 説明 |
---|---|
'sysdate + 7' |
毎週1回実行 |
'next_day(sysdate,''TUESDAY'')' |
毎週火曜日に実行 |
'null' |
1回のみ実行 |
interval
の評価結果がNULL
で、ジョブが正常に完了した場合、そのジョブはキューから自動的に削除されます。
この文の直後にCOMMIT
文を実行する必要があります。
このプロシージャは、既存のジョブの次回実行時間を変更します。
構文
DBMS_JOB.NEXT_DATE ( job IN BINARY_INTEGER, next_date IN DATE);
パラメータ
表65-6 NEXT_DATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブの番号。 |
|
次回のリフレッシュ日付。この日付になるとジョブは自動的に実行されます。ただし、ジョブを実行するバックグラウンド・プロセスが存在することが前提です。 |
使用上の注意
この文の直後にCOMMIT
文を実行する必要があります。
このプロシージャは、ジョブ・キューから既存のジョブを削除します。実行中のジョブを停止する機能は、現在はありません。
構文
DBMS_JOB.REMOVE ( job IN BINARY_INTEGER );
パラメータ
使用上の注意
この文の直後にCOMMIT
文を実行する必要があります。
例
BEGIN DBMS_JOB.REMOVE(14144); COMMIT; END;
このプロシージャは、ジョブJOB
をすぐに実行します。そのジョブが中断されている場合でも実行します。
ジョブが実行されると、next_date
が再計算されます。 ビューuser_jobs
を参照してください。
構文
DBMS_JOB.RUN ( job IN BINARY_INTEGER, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表65-8 RUNプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブの番号。 |
|
|
例
EXECUTE DBMS_JOB.RUN(14144);
注意: これは、現行セッションのパッケージを再初期化します。 |
例外
force
がFALSE
で、接続インスタンスが正しくない場合は、例外が発生します。
このプロシージャは新規ジョブを送信します。順序sys
.jobseq
からジョブを選択します。
構文
DBMS_JOB.SUBMIT ( job OUT BINARY_INTEGER, what IN VARCHAR2, next_date IN DATE DEFAULT sysdate, interval IN VARCHAR2 DEFAULT 'null', no_parse IN BOOLEAN DEFAULT FALSE, instance IN BINARY_INTEGER DEFAULT any_instance, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表65-9 SUBMITプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブの番号。 |
|
実行するPL/SQLプロシージャ。 |
|
ジョブを次回実行する日付。 |
|
ジョブを次回実行する時間を計算する日付ファンクション。デフォルトは |
|
フラグ。デフォルトは たとえば、ジョブに関連付けられている表を作成する前にそのジョブを送信する場合は、この値を |
|
ジョブの送信時にそのジョブを実行できるインスタンスを指定します。 |
|
|
使用上の注意
この文の直後にCOMMIT
文を実行する必要があります。
パラメータinstance
およびforce
がジョブ・キュー親和性のために追加されています。ジョブ・キュー親和性を使用して、ユーザーは、送信されたジョブを特定のインスタンスで実行するか、またはどのインスタンスでも実行できるようにするかを指示できます。
例
新規ジョブをジョブ・キューに送る例です。 このジョブは、プロシージャDBMS_DDL
.ANALYZE_OBJECT
をコールし、表DQUON
.ACCOUNTS
に関するオプティマイザの統計情報を生成します。統計情報は、ACCOUNTS
表にある行の半分をサンプルとして使用します。このジョブは24時間ごとに実行されます。
VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno, 'dbms_ddl.analyze_object(''TABLE'', ''DQUON'', ''ACCOUNTS'', ''ESTIMATE'', NULL, 50);' SYSDATE, 'SYSDATE + 1'); COMMIT; END; / Statement processed. print jobno JOBNO ---------- 14144
2種類のオーバーロードされたプロシージャがあります。最初のプロシージャは、指定したジョブを再作成するコールのテキストを生成します。2番目のプロシージャはインスタンス親和性を変更し(8i以上)、互換性を保ちます。
構文
DBMS_JOB.USER_EXPORT ( job IN BINARY_INTEGER, mycall IN OUT VARCHAR2); DBMS_JOB.USER_EXPORT ( job IN BINARY_INTEGER, mycall IN OUT VARCHAR2, myinst IN OUT VARCHAR2);
パラメータ
表65-10 USER_EXPORTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブの番号。 |
|
指定したジョブを再作成するコールのテキスト。 |
|
インスタンス親和性を変更するコールのテキスト。 |
このプロシージャは、既存のジョブが実行する内容を変更し、その環境を置き換えます。
構文
DBMS_JOB.WHAT ( job IN BINARY_INTEGER, what IN VARCHAR2);
パラメータ
使用上の注意
この文の直後にCOMMIT
文を実行する必要があります。
次に正しいwhat
の値の例(ルーチンが存在していると仮定)を示します。
'myproc(''10-JAN-82'', next_date, broken);'
'scott.emppackage.give_raise(''JENKINS'', 30000.00);'
'dbms_job.remove(job);'