以下腳本可執行,都是我在工作中用過的腳本,親測。
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