DBMS_JOB
パッケージは、ジョブ・キュー内のジョブをスケジュールおよび管理します。
注意: DBMS_JOB パッケージは、DBMS_SCHEDULER パッケージによって置き換えられています。特に、システム・ロードを管理するジョブを管理する場合、ユーザーのパッケージの実行権限を取り消して、DBMS_JOB を無効にすることを考慮する必要があります。
詳細は、第140章「DBMS_SCHEDULER」および |
この章では、次の項目について説明します。
セキュリティ・モデル
使用上の注意
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 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);
パラメータ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
にデフォルト設定されます。インスタンスの値が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
が表示されます。
表84-1 DBMS_JOBパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
ジョブの実行を禁止します。 |
|
ジョブに関連付けられたユーザー定義可能なパラメータをすべて変更します。 |
|
インスタンスでジョブが実行されるように割り当てます。 |
|
指定したジョブの実行間隔を変更します。 |
|
指定したジョブの次の実行時間を変更します。 |
|
指定したジョブをジョブ・キューから削除します。 |
|
指定したジョブを強制的に実行します。 |
|
新規ジョブをジョブ・キューに送ります。 |
|
指定されたジョブをエクスポート用に再作成するか、またはインスタンス親和性を指定してエクスポート用に再作成します。 |
|
指定したジョブに関するジョブの記述を変更します。 |
このプロシージャは中断フラグを設定します。中断状態のジョブが実行されることはありません。
このプロシージャは、ユーザーがジョブに設定できるフィールドを変更します。
構文
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);
パラメータ
表84-3 CHANGEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブのシステム割当てID。このIDを調べるには、 |
|
実行するPL/SQLプロシージャ。 |
|
ジョブを次回実行する日付。 |
|
日付ファンクション。ジョブ実行の直前に評価されます。 |
|
ジョブの送信時にそのジョブを実行できるインスタンスを指定します。デフォルトは |
|
|
このプロシージャは、ジョブ・インスタンス親和性を変更します。
構文
DBMS_JOB.INSTANCE ( job IN BINARY_INTEGER, instance IN BINARY_INTEGER, force IN BOOLEAN DEFAULT FALSE);
このプロシージャは、ジョブの実行間隔を変更します。
使用上の注意
ジョブが正常に完了すると、next_date
にこの新しい日付が設定されます。interval
は、その日付をselect interval
into next_date
from dual;という文にはめ込むことによって評価されます。
interval
パラメータの評価結果は将来の日時に設定する必要があります。有効な間隔の例は次のとおりです。
間隔 | 説明 |
---|---|
'sysdate + 7' |
毎週1回実行 |
'next_day(sysdate,''TUESDAY'')' |
毎週火曜日に実行 |
'null' |
1回のみ実行 |
interval
の評価結果がNULL
で、ジョブが正常に完了した場合、そのジョブはキューから自動的に削除されます。
コミットされるまで、ジョブはバックグラウンドのジョブ・キューによって処理できるようになりません。
このプロシージャは、ジョブJOB
をすぐに実行します。そのジョブが中断されている場合でも実行します。
ジョブが実行されると、next_date
が再計算されます。データ・ディクショナリ・ビューUSER_JOBS
、またはDBA_JOBS
を参照してください。
このプロシージャは、新規ジョブを送信します。順序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);
パラメータ
表84-9 SUBMITプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行するジョブのシステム割当てID。このIDを調べるには、 |
|
実行するジョブのPL/SQLテキスト。これは有効なPL/SQL文、またはコードのブロックであることが必要です。たとえば、ストアド・プロシージャ DECLARE job BINARY_INTEGER := :job; next_date DATE := :mydate; broken BOOLEAN := FALSE; BEGIN WHAT :mydate := next_date; IF broken THEN :b := 1; ELSE :b := 0; END IF; END; 文に |
|
ジョブを次回実行する日付。 |
|
ジョブを次回実行する時間を計算する日付ファンクション。デフォルトは |
|
フラグ。デフォルトは たとえば、ジョブに関連付けられている表を作成する前にそのジョブを送信する場合は、この値を |
|
ジョブの送信時にそのジョブを実行できるインスタンスを指定します。 |
|
|
使用上の注意
コミットされるまで、ジョブはバックグラウンドのジョブ・キューによって処理できるようになりません。
パラメータ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以上)、互換性を保ちます。