Oracle資料庫定時器Job

wuwxixi發表於2018-10-17

寫法:

declare

jobno number;

begin

dbms_job.submit(

jobno,

'nextMonthInventoryCARRYFORWARD(to_char(sysdate,'||''''||'yyyy-MM-dd'||''''||'));', --what

sysdate, --next_date,可以不填

'TRUNC(LAST_DAY(SYSDATE))+1+2/24'--'Interval時間字串' --interval,關鍵設定

);

end;

Oracle資料庫 中,我們經常會用到 定時器Job 來讓資料庫定時的自動執行一些指令碼,或做資料庫備份,或做資料的提煉,或做資料庫的效能最佳化,包括重建索引等等的工作。但是,Oracle定時器Job時間的處理上,千變萬化,還是比較靈活的。本文我們總結了一些Oracle資料庫定時器Job在各個時間段得寫法,接下來我們就開始介紹這些。

Job引數是有Submit()過程返回的binary_integer。

what引數是將被執行的PL/SQL程式碼塊。

next_date引數指何時將執行這個工作。寫Job的時候可以不指定該值。

interval引數何時這個工作將被重執行。

其中Interval這個值是決定Job何時,被重新執行的關鍵。

1、每分鐘執行

Interval => TRUNC(sysdate, 'mi')+1/(24*60)

2、每天定時執行

例如:每天的凌晨2點執行

Interval => TRUNC(sysdate)+1+2/(24)

3、每週定時執行

例如:每週一凌晨2點執行

Interval => TRUNC(next_day(sysdate, 2))+2/24 --星期一,一週的第二天

4、每月定時執行

例如:每月1日凌晨2點執行

Interval => TRUNC(LAST_DAY(SYSDATE))+1+2/24

5、每季度定時執行

例如每季度的第一天凌晨2點執行

Interval => TRUNC(ADD_MONTH(SYSDATE), 3),'Q')+2/24

6、每半年定時執行

例如:每年7月1日和1月1日凌晨2點

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24

7、每年定時執行

例如:每年1月1日凌晨2點執行

Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24

-------------查詢JOB-----------------

select job, what, next_date, next_sec, sysdate, failures, broken,interval

from user_jobs a;

-------------修改JOB-----------------

begin

dbms_job.change(62 ,'MY_JOP;', sysdate,'sysdate+2/(24*60)' );

commit;

end;

begin

dbms_job.change(62 ,'MY_JOP;', to_date('2011-08-01 22:00:00', 'yyyy-mm-dd hh24:mi:ss'),'sysdate+1');

commit;

end;

-------------刪除JOB-----------------

begin

dbms_job.remove(41);

end;

-------------執行Job-----------------------

begin

dbms_job.run(41);

end;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31557820/viewspace-2216702/,如需轉載,請註明出處,否則將追究法律責任。

相關文章