DBMS_JOBのパケット内の機能によって実現したOracle仕事(タスクを予定)。
理論的な知識のジョブが参照することができますhttps://blog.csdn.net/apextrace/article/details/7767506
知識に関連したA、DBMS_JOB
1.ジョブの作成:
可変jobno数;
DBMS_JOB.SUBMIT(:jobno、--job番号
'your_procedure;'、 -実行するストアドプロシージャ、 ';'を省略することができない
NEXT_DATE、 -次回実行時刻
'間隔' -日間隔各時間間隔、
);
-システムは自動的にタスク番号jobnoを割り当てます。
図2に示すように、ジョブを削除:DBMS_JOB.REMOVE(jobno);
3、変更操作のジョブを実行する:dbms_job.what(jobno、どのような); --what 新しい操作(ストアドプロシージャ)である
4、次回実行時刻修正:DBMS_JOBを.next_date(jobno、NEXT_DATE);
5は、間隔修飾:(jobno、間隔)dbms_job.interval;
6、ジョブを開始します。dbms_job.run(jobno);
7、ストップジョブ:DBMS_JOB.BROKEN(jobno、壊れ、 nextdate) ; -broken Aブール
第二に、初期化パラメータJOB_QUEUE_PROCESSES
1、job_queue_process Oracleが0のjob_queue_process値は、Oracleジョブが停止されていることを示した場合に、並行ジョブの数で表すことができます。
2、ビューパラメータJOB_QUEUE_PROCESSES
方法:
ショーパラメータjob_queue_process;
方法2:
* WHERE V $パラメータ名から= 'JOB_QUEUE_PROCESSES' SELECT;
。3、JOB_QUEUE_PROCESSES修正パラメータ
ALTER SYSTEMセットJOB_QUEUE_PROCESSES = 10;
三、USER_JOBSテーブル構造
フィールド(列)タイプ説明 ジョブ番号タスク固有の識別番号の ユーザーのタスクが提出しLOG_USERのVARCHAR2(30) ユーザーの任務与えられたpriv_userのVARCHAR2(30) ユーザーモードを解析するためのタスクにSCHEMA_USERのVARCHAR2(30) 、最後のLAST_DATE日付成功タスクを実行するための時間 ミリメートル:ssの時間LAST_DATE日付形式、分、秒HH24としてlast_sec VARCHAR2(8) タスクがしたヌル実行されていない場合THIS_DATE日付開始時刻は、タスクを実行している MM:HH24としてVARCHAR2(8)this_secを:ss形式の日付THIS_DATE時間、分、秒 、通常のNEXT_DATE日付にタスクを実行する時間の
第四に、例えば、
図1に示すように、PLSQL表に作成される:
表T(登録
ID VARCHAR2(30)、
名前VARCHAR2(30)
);
2、PLSQLにストアドプロシージャを作成している:
作成または交換手順proce_tはIS
開始
INSERT INTO T(ID、名前)値(TO_CHAR(SYSDATE、 'YYYY-MM-DD HH24:MI:SS」1' ));
COMMIT;
エンドproce_t;
/
3、ジョブタスク(一度実行1分)を作成します。
:後SQL>実行
可変jobno番号;
始める
DBMS_JOB.SUBMIT(:;、SYSDATE、 'SYSDATE + 1/24/60' jobno、 'proce_t');
COMMIT;
END;
/
提出ヒント:
PL / SQLプロシージャが正常に完了しました
jobno
------ ---
25
4、トラッキング・タスク(タスクキューを参照)。
SQL> SELECT仕事、NEXT_DATE、next_sec、障害USER_JOBSから壊れた、;
次のように表示が行われた後:
壊れた障害がnext_sec仕事をNEXT_DATE
---------- ----------- ---------------- -------- - ------
25 2012年9月14日午前10時59分46秒1 0 N-
説明タスクが正常に作成されています。
トンから選択*を実行し、スケジュールされたタスクの結果を参照してください。タスクのタイミングが正常に行われていることがわかります。
図5は、タイマータスクを停止する
(1)Viewはジョブ番号のタスクをタイムアウトしました。
SQL> SELECT仕事、NEXT_DATE、next_sec、障害USER_JOBSから壊れた、;
仕事NEXT_DATE next_sec障害が壊れ
---------- ----------- --------- ------- ---------- ------
25 0、N-2012/9月14日午前11時01分48秒1。
(2)開始されたタイマータスクを停止する:
始める
DBMS_JOBを(25、trueに、SYSDATE).broken;
COMMIT;
END;
/
タスク25のための急行ストップ仕事。
(3)Viewはタスクが正常に停止したタイミングであれば
PL / SQLプロシージャが正常に完了しました
。SQL> SELECT仕事、NEXT_DATE、next_sec、障害USER_JOBSから壊れた、;
仕事NEXT_DATE next_sec障害が壊れ
---------- ----------- --- ------------- ---------- ------
25 0 4000/1/1夜十二時00分00秒Y
Yの切れ値、タイミングタスクそれは停止しました。
6、タスク開始のタイミング
(1)タイマータスクビューを停止し
、NEXT_DATE、next_sec、失敗は、USER_JOBSから壊れ、SQL> SELECT仕事を
仕事NEXT_DATE next_sec障害が壊れ
---------- -------- --- ---------------- ---------- ------
25 0 4000/1/1夜12時00分00秒Y
切れ値yに、タイミングタスクが停止されています。
(2)スケジュールされたタスクを開始し
始める
。dbms_job.run(25)を
コミット;
END;
/
(3)場合、ビューは、タスクが開始されました時限
SQL> SELECT仕事、USER_JOBSから壊れNEXT_DATE、next_sec、障害;
仕事NEXT_DATE next_sec障害が壊れ
---------- ----------- --------- ------- ---------- ------
25 0 2012年9月14日午前11時06分17秒。1:N-
切断され、N、正常にタスクを開始するタイミングを制御します。
図7に示すように、プロセスの数を参照して
、パラメータJOB_QUEUE_PROCESSESを示す図である
0よりも大きくなければならない、そうでなければ変更するには、次のコマンドを実行します
。ALTERシステム= 10 SET JOB_QUEUE_PROCESSES
:8、次いで(5分毎に一度実行)タスクを作成する
可変数ザjobno;
始める
DBMS_JOB.SUBMITを( :jobno、 'proce_t;'、 SYSDATE、 'SYSDATE + 1/24/12'); --interval の毎日の単位に
コミット;
END;
/
9の実装。
選択ジョブ、NEXT_DATE、next_sec、障害 USER_JOBSから壊れ、 ;
結果:
SQL>を選択したジョブ、NEXT_DATE、next_sec、障害、USER_JOBSから壊れました。
仕事NEXT_DATE next_sec障害が壊れました
---------- ----------- ---------------- ---------- --- ---
26 2012年9月14日11時12分08秒1 0 N
25 2012年9月14日午前11時07分18秒1 0 N
V.の概要
关于job运行时间
(1)每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/(24*60)
(2)每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/(24)
(3)每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24
(4)每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24
(5)每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24
(6)每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24
(7)每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'), 12)+1/24
job的运行频率设置
(1)每天固定时间运行,比如早上8:10分钟:Trunc(Sysdate+1) + (8*60+10)/24*60
(2)Toad中提供的:
每天:trunc(sysdate+1)
每周:trunc(sysdate+7)
每月:trunc(sysdate+30)
每个星期日:next_day(trunc(sysdate),'星期日')
每天6点:trunc(sysdate+1)+6/24
半个小时:sysdate+30/(24*60)
每个小时的第15分钟运行,比如:8:15,9:15,10:15…:trunc(sysdate,'hh')+(60+15)/(24*60)