Oracle定時任務


Oracle定時任務

一、創建語句

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  		/*自動生成JOB_ID*/  
        WHAT => 'proc_cam;',  
        NEXT_DATE => to_date('2022-03-14 15:40:00', 'yyyy-mm-dd hh24:mi:ss'),
        INTERVAL => 'sysdate+30/(24*60)' /*每隔30分鍾執行一次*/
      );  
  commit;
end;

參數含義:

JOB:指定定時任務的 JOB_ID,上面代碼指自動生成;

WHAT:需要執行的存儲過程名稱或SQL語句,多個以分號隔開,注意最后有個分號;

NEXT_DATE:初次執行時間;

INTERVAL:多久執行一次。

二、查詢定時任務

當前用戶定時任務

select * from user_jobs;

有權限訪問的定時任務

select * from all_jobs;

整個數據庫所有的定時任務

select * from dba_jobs;

查詢上面例子創建的定時任務:select * from dba_jobs where what like '%proc_cam%';

三、任務時間間隔設計

指定兩次任務執行的時間間隔

描述 interval 參數值
每天執行一次 'SYSDATE+1′
每小時執行一次 'SYSDATE+1/24'
每10分鍾執行一次 'SYSDATE+10/(24*60)'
每30秒執行一次 'SYSDATE+30/(24*60*60)'
每個星期執行一次 'SYSDATE+7'

也可以指定具體時間

描述 參數值
每天6點 執行 'Trunc(Sysdate+1) + 6/24'
每天08:10:00 執行 'Trunc(Sysdate+1) + (8*60+10)/24*60'
每周一凌晨1點執行 ' TRUNC(next_day(sysdate,"星期一"))+1/24'
每月1日凌晨1點執行 ' TRUNC(LAST_DAY(SYSDATE))+1+1/24'

四、操作

手動執行定時任務

BEGIN
DBMS_JOB.RUN(1283); --1283為JOB任務的 ID
commit;
END;

停止定時任務

BEGIN
dbms_job.broken(1283,true,sysdate);        --1283為JOB任務的 ID,sysdate是指在指定時間停止
commit;
END;

刪除定時任務

begin
  dbms_job.remove(1283);  --1283為JOB任務的 ID
  commit;
end;

修改定時任務的時間間隔

begin
  dbms_job.interval(1283,interval => 'TRUNC(SYSDATE)+1');  /*第一個參數為job的ID,第二個參數為interval: 計算下一次任務執行的時間表達式*/
  commit;
end;

修改下一次執行時間

begin
   dbms_job.next_date(1283,to_date('2022-03-15 12:00:00','yyyy-mm-dd hh24:mi:ss')); /*第一個參數:job的ID;第二個參數:要修改后的計算下一次執行的時間表達式*/
   commit;
end;

修改定時任務要執行的操作

begin
    dbms_job.what(1283,'testJob2();');   /* 第一個參數:job的ID;第二個參數:要更改的新操作名稱(存儲過程名稱或SQL語句,必須存在)*/
commit;
end;


免責聲明!

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



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