oracle 定時任務


以下腳本可執行,都是我在工作中用過的腳本,親測。

 1 --創建一個定時任務
 2 declare
 3   job number;
 4 BEGIN
 5   DBMS_JOB.SUBMIT(  
 6         JOB => job,  /*自動生成JOB_ID*/  
 7         WHAT => 'GET_WARNING_INFO(2, 202, ''2,44,11'');',  /*需要執行的存儲過程名稱或SQL語句*/  
 8         NEXT_DATE => sysdate,  /*初次執行時間-立即執行*/  
 9         INTERVAL => 'trunc(sysdate,''mi'')+1/(24*60)' /*每隔1分鍾執行一次*/
10       );  
11   commit;
12 end;
13 --刪除定時任務
14 begin
15   dbms_job.remove(83);  /*刪除自動執行的job,參數是 job的id*/
16   commit;
17 end;
18 
19 ----------------------------------定時任務處理啟動結束 start-----------------------
20 --    電子簽章定時任務處理  
21  DECLARE   
22   v_job NUMBER;    
23  BEGIN
24    SELECT t.JOB INTO v_job  FROM dba_jobs t WHERE t.WHAT = 'NON_FLOW_PKG.SAVE_NON_FLOW_ACT_FOR_SIGN;' 
25    dbms_job.run(v_job);     --啟動定時任務
26   --dbms_job.broken(v_job, true, sysdate);    --結束定時任務     true:結束 
27  commit;   
28 end;
29 ----------------------------------定時任務處理啟動結束 end--------------------------------
30 
31 ----------------------------------定時任務查詢  start--------------------------------
32 --
33 --查看定時任務 啟動(25 2012/9/14 1 11:06:17 0 n) 停止(25 4000/1/1 00:00:00 0 y) 狀態  
34 -- job:定時任務Id   next_date: 時間明確 就是下次執行時間,4000-1-1 定時任務處於停止狀態  failures:任務執行失敗的總次數  broken: Y:停止 N:開啟 
35  select what,job, next_date, next_sec, failures, broken from user_jobs ;  --查詢當前用戶定時任務
36  
37   SELECT t.WHAT,job, next_date, next_sec, failures, broken FROM dba_jobs t    --查詢數據庫里所有任務
38    WHERE t.WHAT = 'NON_FLOW_PKG.SAVE_NON_FLOW_ACT_FOR_SIGN;'   --定時任務名稱
39    OR t.JOB = '21';    --定時任務編號
40  -- 命令窗口查看進程數  必須大於10    這個是定時任務執行的最小進程數,當定時任務開啟但是沒執行,看下這個,小於0必須改到大於10 
41  --在命令窗口看
42 show parameter job_queue_processes;
43 -- 不大於0修改
44 alter system set job_queue_processes=10;
45 
46 ----------------------------------定時任務查詢  end--------------------------------
47   

dba_jobs 表中字段含義:

JOB 任務的唯一標識碼

LOG_USER 提交任務的用戶

PRIV_USER 賦予任務權限的用戶

SCHEMA_USER 對用戶作語法分析的用戶模式

LAST_DATE 最后一次成功執行任務的時間

LAST_SEC 最后一次成功執行任務的時間的時分秒

THIS_DATE 正在執行的任務的開始時間,若沒有則為空

THIS_SEC 正在執行的任務的開始時間的時分秒,若沒有則為空

NEXT_DATE 下一次執行定時任務的時間

NEXT_SEC 下一次執行定時任務的時間的時分秒

TOTAL_TIME 執行當前任務所需要的時間,單位:秒

BROKEN 標志參數,Y表示任務中斷,以后不會再運行

INTERTAL 計算下一次執行定時任務的時間表達式

FAILURES 當前定時任務執行失敗的總次數

WHAT 執行任務的PL/SQL代碼塊

NLS_ENV 任務執行的NLS會話設置

MISC_ENV 定時任務運行的其他一些參數設置

INSTANCE 標識當前任務運行是否受限,0 沒有受限

INTERVAL 部分參數值示例:

每天午夜12點: ‘TRUNC(SYSDATE + 1)’
每天早上8點30分: ‘TRUNC(SYSDATE + 1) + (860+30)/(2460)’
每星期二中午12點: ‘NEXT_DAY(TRUNC(SYSDATE ), ‘‘TUESDAY’’ ) + 12/24’
每個月第一天的午夜12點: ‘TRUNC(LAST_DAY(SYSDATE ) + 1)’
每個季度最后一天的晚上11點: ‘TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), ‘Q’ ) -1/24’
每星期六和日早上6點10分: 'TRUNC(LEAST(NEXT_DAY(SYSDATE, '‘SATURDAY"), NEXT_DAY(SYSDATE, “SUNDAY”))) + (6×60+10)/(24×60)’
每月25號00:00執行: ‘TRUNC(LAST_DAY(SYSDATE ) + 25)’
--------------------------
1:每分鍾執行
Interval => TRUNC(sysdate,‘mi’) + 1/ (24*60)

Interval => sysdate+1/1440

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM