一 . 創建job
1. 通過創建存儲過程的方式創建job
調用該存儲過程使其開始執行 call PRO_DSJ_XJTJ_JOB();
create or replace procedure PRO_DSJ_XJTJ_JOB as-- 每天凌晨2:00執行 begin declare job number; BEGIN dbms_job.submit(job,
'PRO_DSJ_XJTJ(sysdate-1);', -- 需要執行的任務
sysdate, -- 第一次執行的時間
'TRUNC(SYSDATE+1)+2/24' -- 下一次執行時間
); COMMIT; DBMS_JOB.RUN(job); END; end PRO_DSJ_XJTJ_JOB;
2.直接創建job
declare jobno number; begin dbms_job.submit( jobno,--定時器ID,系統自動獲得 'PRC_INSERT;', --what執行的過程名 sysdate,--next_date,定時器開始執行的時間,這樣寫表示立即執行 'sysdate + 15/1440'--interval,設置定時器執行的頻率,這樣寫每隔15分鍾執行一次 ); commit; end;
二. 查詢job
select * from user_jobs;--查看調度任務 select * from dba_jobs_running;--查看正在執行的調度任務 select * from dba_jobs;--查看執行完的調度任務
三. 刪除job
exec dbms_job.remove(83);--刪除一個定時器,83為定時器ID
--也可以這樣begin
dbms_job.remove(83);
commit
;
end
;
四. 運行job
exec dbms_job.run(84);--運行一個定時器
--也可以這樣 begin dbms_job.run(84); commit; end;
五. 停止job
exec DBMS_JOB.BROKEN(83,SYS.DIUTIL.INT_TO_BOOL(1));--停止一個定時器
-- sysdate (某一時刻停止)
exec dbms_job.broke(83,true,sysdate);
--停止job begin dbms_job.broken(83,true); commit; end;
六. 修改job
exec DBMS_JOB.INTERVAL(84, 'sysdate + 60/1440');--改變一個定時器的執行頻率成每隔一小時執行一次 --修改某個job名 修改下一次運行時間 exec dbms_job.next_date(84,sysdate);
七. 執行間隔
描述 INTERVAL參數值 每天午夜12點 'TRUNC(SYSDATE + 1)' 每天早上8點30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 每星期二中午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)'
create or replace procedure PRO_DSJ_XJTJ_JOB as--巡檢統計定時任務 每天凌晨2:00執行begin declare job number; BEGIN dbms_job.submit(job, 'PRO_DSJ_XJTJ(sysdate-1);', sysdate, 'TRUNC(SYSDATE+1)+2/24'); COMMIT; DBMS_JOB.RUN(job); END;end PRO_DSJ_XJTJ_JOB;