Oracle job自動任務實用指南
作為Oracle的定時任務,Oracle job介於伺服器層級的crontab和應用程式(如java spring的定時任務)之間,在資料庫層對資料處理有重要的價值。
下面簡單分享一下Oracle job如何來調用預存程序。
--建立job,不帶參數的情況
variable etljobno number;
begin
dbms_job.submit(:etljobno,'proc_ctitetl;',sysdate,'sysdate+3/1440');
end;
/
--建立job,帶參數的情況
variable JOB_TEST number;
begin
dbms_job.submit(:JOB_TEST,'begin hlqtestjob(1,''aa''); end;',sysdate,'sysdate+1/1440');
commit;
end;
/
--啟動job
begin
dbms_job.run(:etljobno);
end;
/
--停止正在執行的job
begin
dbms_job.broken(:etljobno,true );
end;
/
--刪除job
begin
dbms_job.remove(:etljobno);
end;
commit;
/
--查詢job
SELECT JOB, NEXT_DATE, NEXT_SEC, FAILURES, BROKEN FROM DBA_JOBS;
如果要打斷已經scheduledjob,dbms_job.broken(:etljobno,true ),打斷之後,DBA_JOBS的BROKEN欄位為Y,如果你要停止job或者暫停job
後修改預存程序代碼,就可以broken,修改完之後再次啟動job即可。
有了oracle job,你就可以不必在每日的淩晨3點來執行必須的資料處理,或者選擇系統負載較低的時候去執行特殊的任務。以下是一些oracle
job的時間間隔的設定:
1:每分鐘執行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60)
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
--------------------------------------------------------------------------------
Linux-6-64下安裝Oracle 12C筆記
在CentOS 6.4下安裝Oracle 11gR2(x64)
Oracle 11gR2 在VMWare虛擬機器中安裝步驟
Debian 下 安裝 Oracle 11g XE R2
--------------------------------------------------------------------------------