CREATE_JOB プロシージャは、ジョブを作成するために使用します。
enabled プロパティを TRUE に設定すると、Schedulerがそのスケジュールに従ってジョブを自動実行します。作成したジョブが無効状態の場合、SET_ATTRIBUTE プロシージャを使用して有効にしない限り、ジョブは実行されません。
機能の適用範囲
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。
構文
既存のプログラムまたはスケジュールを使用せずにジョブを作成する構文
DBMS_SCHEDULER.CREATE_JOB (
job_name IN VARCHAR2,
job_type IN VARCHAR2,
job_action IN VARCHAR2,
number_of_argument IN BINARY_INTEGER DEFAULT 0,
start_date IN TIMESTAMP_UNCONSTRAINED DEFAULT NULL,
repeat_interval IN VARCHAR2 DEFAULT 'null',
end_date IN TIMESTAMP_UNCONSTRAINED DEFAULT NULL,
job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS',
enabled IN BOOLEAN DEFAULT FALSE,
auto_drop IN BOOLEAN DEFAULT TRUE,
comments IN VARCHAR2 DEFAULT 'null',
credential_name IN VARCHAR2 DEFAULT 'null',
destination_name IN VARCHAR2 DEFAULT 'null',
max_run_duration IN BINARY_INTEGER DEFAULT 0);
名前付きプログラムオブジェクトと内部スケジュールを使用してジョブを作成する構文
DBMS_SCHEDULER.CREATE_JOB (
job_name IN VARCHAR2,
program_name IN VARCHAR2,
start_date IN TIMESTAMP_UNCONSTRAINED DEFAULT NULL,
repeat_interval IN VARCHAR2 DEFAULT 'null',
end_date IN TIMESTAMP_UNCONSTRAINED DEFAULT NULL,
job_class IN VARCHAR2 DEFAULT 'DEFAULT_JOB_CLASS',
enabled IN BOOLEAN DEFAULT FALSE,
auto_drop IN BOOLEAN DEFAULT TRUE,
comments IN VARCHAR2 DEFAULT 'null',
job_style IN VARCHAR2 DEFAULT 'REGULER',
credential_name IN VARCHAR2 DEFAULT 'null',
destination_name IN VARCHAR2 DEFAULT 'null',
max_run_duration IN BINARY_INTEGER DEFAULT 0);
パラメータ説明
パラメータ |
説明 |
|---|---|
| job_name | ジョブの名前を指定します。この名前はSQL名前空間内で一意である必要があります。作成するジョブが別のスキーマに属する場合は、スキーマ名で限定する必要があります。ジョブ名を指定しない場合、エラーが発生します。GENERATE_JOB_NAME を使用してSchedulerによって名前を生成させることもできます。この名前はシーケンスで生成された数字に文字列をプレフィックスとして付加したもので、その後 CREATE_JOB プロセスで使用されます。 |
| job_type | 作成するジョブのタイプを指定します。指定しない場合、エラーが生成されます。現在のバージョンでは STORED_PROCEDURE のみサポートされています。このパラメータはプロシージャのみをサポートし、戻り値を持つ関数はサポートしません。 |
| job_action | ジョブの操作を指定します。インラインプログラムに job_action を指定しない場合、ジョブ作成時にエラーが発生します。job_action は自律トランザクション内で実行され、すべての自律トランザクションのガイドラインと制限に従います。ストアドプロシージャの場合、job_action はプロシージャ名です。プロシージャがジョブ外の別のスキーマにある場合は、スキーマを指定する必要があります。大文字小文字を区別する必要がある場合は、スキーマ名とストアドプロシージャ名を二重引用符で囲みます。例:job_action_proc=>'"Schema"."myProc "'。ジョブまたはプログラムのタイプが STORED_PROCEDURE の場合、job_action は INOUT または OUT パラメータを持つPLプロシージャをサポートしません。 |
| number_of_argument | ジョブに必要なパラメータ数を指定します。このパラメータの取り得る範囲は [0,255] で、デフォルト値は0です。 |
| program_name | このジョブに関連付けられるプログラムの名前。 |
| start_date | このジョブスケジュールの初回実行日時を指定します。start_date と repeat_interval が空の場合、ジョブは有効になるとすぐに実行されます。 |
| repeat_interval | ジョブの繰り返し頻度を指定します。カレンダー式またはPL式を使用して繰り返し間隔を指定できます。指定された式を評価することで、ジョブの次回実行時間が決定されます。 説明 このパラメータを空に設定するとエラーが発生しますが、機能の使用には影響しません。 このプロパティの取り得る値は以下のとおりです:
|
| end_date | ジョブの期限日時を指定します。この日時以降、ジョブは実行されません。end_date以降に、auto_dropがTRUEの場合、ジョブは削除されます。auto_dropがFALSEの場合、ジョブは無効化され、STATEはCOMPLETEDに設定されます。end_dateの値が指定されていない場合、ジョブはmax_runsまたはmax_failuresが設定されるまで繰り返し実行されます。いずれかの値に達すると、ジョブの実行は停止します。end_dateの値はstart_dateの値より後でなければならず、そうでない場合はエラーが発生します。end_dateの値がstart_dateの値と同じ場合、ジョブは実行されず、エラーも発生しません。 |
| job_class | このジョブに関連付けられるクラスを指定します。 |
| enabled | 作成するジョブを有効にするかどうかを指定します。このプロパティはTRUEまたはFALSEに設定でき、デフォルトはFALSEです。つまり、作成されるジョブは無効になります。無効なジョブは、関連するメタデータは取得され、データベースオブジェクトにも含まれますが、Schedulerはそのジョブを無視し、処理も行いません。このジョブを処理したい場合は、このパラメータをTRUEに設定するか、ENABLEプロシージャを使用してジョブを有効にします。 |
| auto_drop | ジョブが完了または自動的に無効になった後、自動的に削除されるかどうかを指定します。このプロパティはTRUEまたはFALSEに設定できます。TRUEに設定すると、ジョブは完了または自動的に無効になった後、自動的に削除されます。以下のいずれかの状況が発生した場合、ジョブは完了したと見なされます:
max_failures回失敗すると、無効になります。max_failuresもSET_ATTRIBUTEを使用して設定します。auto_dropがFALSEに設定されている場合、ジョブは削除されず、メタデータはDROP_JOBプロシージャで明示的に削除するまで保持されます。デフォルトでは、ジョブ作成時にauto_dropはTRUEに設定されます。 |
| comments | ジョブのコメントを追加します。デフォルトでは、このプロパティはNULLです。 |
| job_style | 作成するジョブのスタイルを指定します。このプロパティの可能な値は以下のとおりです:
|
| credential_name | ジョブで使用するデフォルトの資格情報を指定します。ローカルデータベースジョブの場合、その値はNULLでなければなりません。ローカル外部ジョブの場合のみ、このプロパティがNULL(デフォルト)の場合、優先(デフォルト)資格情報が選択されます。 |
| destination_name | ジョブのデータベースターゲットまたは外部ターゲットを指定します。CREATE_JOBのcredential_nameパラメータがNULLの場合、各ターゲットの前には次の形式の資格情報が必要です: sql credential.destination。 |
| max_run_duration | ジョブの最大実行時間を指定します。 |
使用方法
デフォルトでは、ユーザーが作成するジョブは無効になっています。スケジュール通りにジョブを実行するには、明示的にジョブを有効にする必要があります。
ジョブを特定のクラスやプログラムに関連付けるには、そのクラスまたはプログラムに対する EXECUTE 権限が必要です。
CREATE_JOB で設定できるジョブの属性はすべてではありません。一部のパラメータはジョブ作成後に設定する必要があります。例えば、job_priority や max_runs などのパラメータは SET_ATTRIBUTE プロシージャを使用して設定する必要があります。
例
DECLARE
i INTEGER;
BEGIN
SELECT COUNT(*) INTO i FROM user_tables WHERE table_name = 'DBMS_SCHEDULER_T1';
IF i = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE DBMS_SCHEDULER_T1(col DATE)';
END IF;
SELECT COUNT(*) INTO i FROM user_tables WHERE table_name = 'DBMS_SCHEDULER_T2';
IF i = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE DBMS_SCHEDULER_T2(col DATE, job VARCHAR(128), job_name VARCHAR(128))';
END IF;
END;
/
CREATE OR REPLACE PACKAGE JOB/utils IS
PROCEDURE insert_date;
PROCEDURE insert_date_program ( job IN VARCHAR2, job_name IN VARCHAR2);
END;
/
CREATE OR REPLACE PACKAGE BODY JOB-utils IS
PROCEDURE insert_date IS
BEGIN
INSERT INTO DBMS_SCHEDULER_T1 VALUES(TO_CHAR(sysdate));
COMMIT;
END;
PROCEDURE insert_date_program ( job IN VARCHAR2, job_name IN VARCHAR2) IS
BEGIN
INSERT INTO DBMS_SCHEDULER_T2 VALUES(sysdate, job, job_name);
COMMIT;
END;
END;
/
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => dbms_scheduler.generate_job_name,
job_type => 'STORED_PROCEDURE',
job_action => 'JOB_UTIL.insert_date',
number_of_argument => 5,
start_date => sysdate ,
repeat_interval => 'FREQ=SECONDLY; INTERVAL=8',
end_date =>sysdate + 100 ,
job_class =>'DEFAULT_JOB_CLASS',
enabled => true,
auto_drop => true,
comments =>'test' ,
credential_name => 'null',
destination_name => 'null');
COMMIT;
END;
/
--業務テナントで実行状況を確認する:
SELECT JOB_NAME,enabled,NEXT_RUN_DATE,state,last_start_date FROM DBA_SCHEDULER_JOBS;
実行結果の例は次のとおりです:
+---------------------------+---------+-------------------------------------+-----------+-------------------------------------+
| JOB_NAME | ENABLED | NEXT_RUN_DATE | STATE | LAST_START_DATE |
+---------------------------+---------+-------------------------------------+-----------+-------------------------------------+
| FRIDAY_WINDOW | 1 | 13-SEP-24 10.00.00.000000 PM +08:00 | NULL | NULL |
| JOB$_1125899907865012 | 1 | 13-SEP-24 11.09.49.000000 AM +08:00 | SCHEDULED | 13-SEP-24 11.09.41.000965 AM +08:00 |
| MONDAY_WINDOW | 1 | 16-SEP-24 10.00.00.000000 PM +08:00 | SCHEDULED | 09-SEP-24 10.00.00.020702 PM +08:00 |
| OPT_STATS_HISTORY_MANAGER | 1 | 14-SEP-24 10.50.02.365883 AM +08:00 | SCHEDULED | 13-SEP-24 10.50.02.366764 AM +08:00 |
| SATURDAY_WINDOW | 1 | 14-SEP-24 06.00.00.000000 AM +08:00 | NULL | NULL |
| SUNDAY_WINDOW | 1 | 15-SEP-24 06.00.00.000000 AM +08:00 | NULL | NULL |
| THURSDAY_WINDOW | 1 | 19-SEP-24 10.00.00.000000 PM +08:00 | SCHEDULED | 12-SEP-24 10.00.00.012722 PM +08:00 |
| TUESDAY_WINDOW | 1 | 17-SEP-24 10.00.00.000000 PM +08:00 | SCHEDULED | 10-SEP-24 10.00.00.012928 PM +08:00 |
| WEDNESDAY_WINDOW | 1 | 18-SEP-24 10.00.00.000000 PM +08:00 | SCHEDULED | 11-SEP-24 10.00.00.015659 PM +08:00 |
+---------------------------+---------+-------------------------------------+-----------+-------------------------------------+
9 rows in set