ヘッダーをスキップ
Oracle® Database PL/SQLパッケージおよびタイプ・リファレンス
11g リリース2(11.2)
B56262-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

78 DBMS_JOB

DBMS_JOBパッケージは、ジョブ・キュー内のジョブをスケジュールおよび管理します。


注意:

DBMS_JOBパッケージは、DBMS_SCHEDULERパッケージによって置き換えられています。特に、システム・ロードを管理するジョブを管理する場合、ユーザーのパッケージの実行権限を取り消して、DBMS_JOBを無効にすることを考慮する必要があります。

詳細は、第129章「DBMS_SCHEDULER」および『Oracle Database管理者ガイド』DBMS_JOBからDBMS_SCHEDULERへの移行に関する項を参照してください。


この章では、次の項目について説明します。


DBMS_JOBの使用方法


セキュリティ・モデル

DBMS_JOBを使用するために必要な特定のシステム権限はありません。DBMS_JOBの管理に使用できるシステム権限はありません。ユーザー所有のジョブを除き、ジョブの変更や削除はできません。これは、DBA権限が付与されているユーザーを含むすべてのユーザーにあてはまります。

ユーザーによって所有されているか、またはそれに対する明示的なEXECUTE権限がユーザーに付与されているプロシージャを実行できます。ただし、ロールによってユーザーに実行権限が付与されているプロシージャを実行することはできません。

一度ジョブを起動して実行すると、そのジョブを簡単に停止する方法はありませんので注意してください。


使用上の注意

Oracle Real Application Clustersの操作

DBMS_JOBはジョブの複数インスタンスの実行をサポートしています。デフォルトで、ジョブはどのインスタンスでも実行できますが、ジョブを実行するインスタンスは1つに限られます。さらに、ジョブを特定のインスタンスにバインドすることで、強制的にインスタンスをバインドできます。インスタンスのバインドを実装するには、インスタンス親和性パラメータにインスタンス番号を指定します。ただし、Oracle Database 10g リリース1(10.1)では、インスタンスのバインドは実装しないことをお薦めします。サービス親和性の方が適切です。この概念は、DBMS_SCHEDULERパッケージに実装されています。

次のプロシージャを使用して、インスタンス親和性のあるジョブを作成、変更または実行できます。親和性を指定しない場合、すべてのインスタンスでジョブが実行されることになるので注意してください。

DBMS_JOB.SUBMIT

ジョブをジョブ・キューに送るには、次の構文を使用します。

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の場合は、ジョブ・インスタンスとして正の整数がすべて受け入れられます。forceFALSEの場合は、指定したインスタンスが実行されている必要があり、実行されていない場合は、エラー番号ORA-23428が表示されます。


DBMS_JOB.INSTANCE

ジョブを実行するために特定のインスタンスを割り当てるには、次の構文を使用します。

   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

ジョブに関連付けられたユーザー定義可能なパラメータを変更するには、次の構文を使用します。

   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

DBMS_JOB.RUNforceパラメータはFALSEにデフォルト設定されます。forceTRUEの場合は、フォアグラウンド・プロセスでのジョブ実行にインスタンス親和性は無関係です。forceがFALSEの場合は、指定したインスタンスでのみフォアグラウンドでジョブを実行できます。forceがFALSEで、接続されたインスタンスが不適切なインスタンスである場合は、エラーORA-23428が表示されます。

   DBMS_JOB.RUN( 
      job    IN BINARY_INTEGER,
      force  IN BOOLEAN DEFAULT FALSE);

ジョブの停止

一度ジョブを起動して実行すると、そのジョブを簡単に停止する方法はありませんので注意してください。


DBMS_JOBサブプログラムの要約

表78-1 DBMS_JOBパッケージのサブプログラム

サブプログラム 説明

BROKENプロシージャ


ジョブの実行を禁止します。

CHANGEプロシージャ


ジョブに関連付けられたユーザー定義可能なパラメータをすべて変更します。

INSTANCEプロシージャ


インスタンスでジョブが実行されるように割り当てます。

INTERVALプロシージャ


指定したジョブの実行間隔を変更します。

NEXT_DATEプロシージャ


指定したジョブの次の実行時間を変更します。

REMOVEプロシージャ


指定したジョブをジョブ・キューから削除します。

RUNプロシージャ


指定したジョブを強制的に実行します。

SUBMITプロシージャ


新規ジョブをジョブ・キューに送ります。

USER_EXPORTプロシージャ


指定されたジョブをエクスポート用に再作成するか、またはインスタンス親和性を指定してエクスポート用に再作成します。

WHATプロシージャ


指定したジョブに関するジョブの記述を変更します。



BROKENプロシージャ

このプロシージャは中断フラグを設定します。中断状態のジョブが実行されることはありません。

構文

DBMS_JOB.BROKEN ( 
   job       IN  BINARY_INTEGER,
   broken    IN  BOOLEAN,
   next_date IN  DATE DEFAULT SYSDATE);

パラメータ

表78-2 BROKENプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

broken

ジョブ中断: INの値はFALSEです。

next_date

次回のリフレッシュ日付。



注意:

実行中のジョブに中断を指定すると、ジョブの完了後、ジョブのステータスはNORMALにリセットされます。したがって、このプロシージャは、実行中でないジョブに対してのみ実行してください。

使用上の注意

この文の直後にCOMMIT文を実行する必要があります。


CHANGEプロシージャ

このプロシージャは、ユーザーがジョブに設定できるフィールドを変更します。

構文

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);

パラメータ

表78-3 CHANGEプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

what

実行するPL/SQLプロシージャ。

next_date

次回のリフレッシュ日付。

interval

日付ファンクション。ジョブ実行の直前に評価されます。

instance

ジョブの送信時にそのジョブを実行できるインスタンスを指定します。デフォルトはNULLで、インスタンス親和性が変更されないことを示します。

force

FALSEの場合、(インスタンス番号を変更する対象に)指定したインスタンスが実行している必要があります。そうでない場合は、ルーチンに例外が発生します。

TRUEの場合は、ジョブ・インスタンスとして正の整数がすべて受け入れられます。


使用上の注意

  • この文の直後にCOMMIT文を実行する必要があります。

  • パラメータinstanceおよびforceがジョブ・キュー親和性のために追加されています。ジョブ・キュー親和性を使用して、ユーザーは、送信されたジョブを特定のインスタンスで実行するか、またはどのインスタンスでも実行できるようにするかを指示できます。

  • パラメータwhatnext_dateまたはintervalNULLの場合、現在の値は変更されません。

BEGIN
   DBMS_JOB.CHANGE(14144, null, null, 'sysdate+3');
   COMMIT;
END; 

INSTANCEプロシージャ

このプロシージャは、ジョブ・インスタンス親和性を変更します。

構文

DBMS_JOB.INSTANCE ( 
   job        IN BINARY_INTEGER,
   instance   IN BINARY_INTEGER,
   force      IN BOOLEAN DEFAULT FALSE);

パラメータ

表78-4 INSTANCEプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

instance

ジョブの送信時に、ユーザーはジョブを実行できるインスタンスを指定できます。

force

TRUEの場合は、ジョブ・インスタンスとして正の整数がすべて受け入れられます。FALSE(デフォルト)の場合は、指定したインスタンスが実行している必要があり、そうでない場合は、ルーチンに例外が発生します。


使用上の注意

この文の直後にCOMMIT文を実行する必要があります。


INTERVALプロシージャ

このプロシージャは、ジョブの実行間隔を変更します。

構文

DBMS_JOB.INTERVAL ( 
   job       IN  BINARY_INTEGER,
   interval  IN  VARCHAR2);

パラメータ

表78-5 INTERVALプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

interval

日付ファンクション。ジョブの実行直前に評価されます。


使用上の注意

  • ジョブが正常に完了すると、next_dateにこの新しい日付が設定されます。intervalは、その日付をselect interval into next_date from dual;という文にはめ込むことによって評価されます。

  • intervalパラメータの評価結果は将来の日時に設定する必要があります。有効な間隔の例は次のとおりです。

    間隔 説明
    'sysdate + 7' 毎週1回実行
    'next_day(sysdate,''TUESDAY'')' 毎週火曜日に実行
    'null' 1回のみ実行

  • intervalの評価結果がNULLで、ジョブが正常に完了した場合、そのジョブはキューから自動的に削除されます。

  • この文の直後にCOMMIT文を実行する必要があります。


NEXT_DATEプロシージャ

このプロシージャは、既存のジョブの次回実行時間を変更します。

構文

DBMS_JOB.NEXT_DATE ( 
   job       IN  BINARY_INTEGER,
   next_date IN  DATE);

パラメータ

表78-6 NEXT_DATEプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

next_date

次回のリフレッシュ日付。この日付になるとジョブは自動的に実行されます。ただし、ジョブを実行するバックグラウンド・プロセスが存在することが前提です。


使用上の注意

この文の直後にCOMMIT文を実行する必要があります。


REMOVEプロシージャ

このプロシージャは、ジョブ・キューから既存のジョブを削除します。実行中のジョブを停止する機能は、現在はありません。

構文

DBMS_JOB.REMOVE ( 
   job       IN  BINARY_INTEGER );

パラメータ

表78-7 REMOVEプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。


使用上の注意

この文の直後にCOMMIT文を実行する必要があります。

BEGIN
   DBMS_JOB.REMOVE(14144);
   COMMIT;
END; 

RUNプロシージャ

このプロシージャは、ジョブJOBをすぐに実行します。そのジョブが中断されている場合でも実行します。

ジョブが実行されると、next_dateが再計算されます。ビューuser_jobsを参照してください。

構文

DBMS_JOB.RUN ( 
   job       IN  BINARY_INTEGER,
   force     IN  BOOLEAN DEFAULT FALSE);

パラメータ

表78-8 RUNプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

force

TRUEの場合、フォアグラウンド・プロセスでのジョブの実行にインスタンス親和性は無関係です。FALSEの場合は、指定したインスタンスでのみフォアグラウンドでジョブを実行できます。


EXECUTE DBMS_JOB.RUN(14144);

注意:

これは、現行セッションのパッケージを再初期化します。


例外

forceFALSEで、接続インスタンスが正しくない場合は、例外が発生します。


SUBMITプロシージャ

このプロシージャは、新規ジョブを送信します。順序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);

パラメータ

表78-9 SUBMITプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

what

実行するPL/SQLプロシージャ。

next_date

ジョブを次回実行する日付。

interval

ジョブを次回実行する時間を計算する日付ファンクション。デフォルトはNULLです。このファンクションは、将来の日時またはNULLに設定される必要があります。

no_parse

フラグ。デフォルトはFALSEです。FALSEに設定すると、ジョブに関連付けられているプロシージャが解析されます。TRUEに設定すると、ジョブに関連付けられているプロシージャがそのジョブの初回実行時に解析されます。

たとえば、ジョブに関連付けられている表を作成する前にそのジョブを送信する場合は、この値をTRUEに設定します。

instance

ジョブの送信時にそのジョブを実行できるインスタンスを指定します。

force

TRUEの場合は、ジョブ・インスタンスとして正の整数がすべて受け入れられます。FALSE(デフォルト)の場合は、指定したインスタンスが実行している必要があり、そうでない場合は、ルーチンに例外が発生します。


使用上の注意

  • この文の直後に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

USER_EXPORTプロシージャ

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);

パラメータ

表78-10 USER_EXPORTプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

mycall

指定したジョブを再作成するコールのテキスト。

myinst

インスタンス親和性を変更するコールのテキスト。



WHATプロシージャ

このプロシージャは、既存のジョブが実行する内容を変更し、その環境を置き換えます。

構文

DBMS_JOB.WHAT ( 
   job       IN  BINARY_INTEGER,
   what      IN  VARCHAR2);

パラメータ

表78-11 WHATプロシージャのパラメータ

パラメータ 説明

job

実行するジョブの番号。

what

実行するPL/SQLプロシージャ。


使用上の注意

  • この文の直後にCOMMIT文を実行する必要があります。

  • 次に正しいwhatの値の例(ルーチンが存在していると仮定)を示します。

    • 'myproc(''10-JAN-82'', next_date, broken);'

    • 'scott.emppackage.give_raise(''JENKINS'', 30000.00);'

    • 'dbms_job.remove(job);'