仕事でOracle(cronジョブ)

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) 

  

转自:https://www.jb51.net/article/92575.htm

おすすめ

転載: www.cnblogs.com/shujk/p/12541676.html