描述 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)'
sql
select * from user_jobs
查詢做業記錄
1.確保Oracle的工做模式容許啓動任務隊列管理器
Oracle定時執行「Job Queue」的後臺程序是SNP進程,而要啓動SNP進程,首先要確保整個系統的模式是能夠啓動SNP進程的,這須要以DBA的身份去執行以下命令:
svrmgrl>; alter system enable restricted session;
或sql>; alter system disenable restricted session;
利用如上命令更改系統的會話方式爲disenable restricted,爲SNP的啓動創造條件。
2.確保Oracle的系統已經配置了任務隊列管理器的啓動參數
SNP的啓動參數位於Oracle的初始化文件中,該文件放在$ORACLE_HOME/dbs路徑下,若是Oracle的SID是myora8的話,則初始化文件就是initmyora8.ora,在文件中對SNP啓動參數的描述部分以下:
job_queue_process=n
job_queue_interval=N
第一行定義SNP進程的啓動個數爲n。系統缺省值爲0,正常定義範圍爲0~36,根據任務的多少,能夠配置不一樣的數值。
第二行定義系統每隔N秒喚醒該進程一次。系統缺省值爲60秒,正常範圍爲1~3600秒。事實上,該進程執行完當前任務後,就進入睡眠狀態,睡眠一段時間後,由系統的總控負責將其喚醒。
若是該文件中沒有上面兩行,請按照如上配置添加。配置完成後,須要從新啓動數據庫,使其生效。注意:若是任務要求執行的間隔很短的話,N的配置也要相應地小一點。
3.將任務加入到數據庫的任務隊列中
調用Oracle的dbms_job包中的存儲過程,將任務加入到任務隊列中:
dbms_job.submit( job out binary_integer,
what in archar2,
next_date in date,
interval in varchar2,
no_parse in boolean)
其中:
●job:輸出變量,是此任務在任務隊列中的編號;
●what:執行的任務的名稱及其輸入參數;
●next_date:任務執行的時間;
●interval:任務執行的時間間隔。
下面詳細討論一下dbms_job.submit中的參數interval。嚴格地講,interval是指上一次執行結束到下一次開始執行的時間間隔,當interval設置爲null時,該job執行結束後,就被從隊列中刪除。假如咱們須要該job週期性地執行,則要用‘sysdate+m’表示。
將任務加入到任務隊列以前,要肯定執行任務的數據庫用戶,若用戶是scott, 則須要確保該用戶擁有執行包dbms_job的權限;若沒有,須要以DBA的身份將權利授予scott用戶:
svrmgrl>; grant execute on dbms_job to scott;
4.將要執行的任務寫成存儲過程或其餘的數據庫可執行的pl/sql程序段
例如,咱們已經創建了一個存儲過程,其名稱爲my_job,在sql/plus中以scott用戶身份登陸,執行以下命令:
sql>; variable n number;
sql>; begin
dbms_job.submit(:n‘my_job;’,sysdate,
‘sysdate+1/360’);
commit;
end;
/
系統提示執行成功。
Sql>; print :n;
系統打印此任務的編號,例如結果爲300。
如上,咱們建立了一個每隔4分鐘執行一次的任務號爲300的任務。能夠經過Oracle提供的數據字典user_jobs察看該任務的執行狀況:
sql>; select job,next_date,next_sec,failures,broken from user_jobs;
執行結果以下:
job next_date next_sec failures broken
300 2000/10/10 11:45:15 0 N
這表示任務號爲300的任務,下一次將在2000/10/10 11:45:15執行,此任務的執行失敗記錄爲0次。注意:當執行job出現錯誤時,Oracle將其記錄在日誌裏,失敗次數每次自動加1。當執行失敗次數達到16時,Oracle就將該job標誌爲broken。此後,Oracle再也不繼續執行它,直到用戶調用過程dbms_job.broken,從新設置爲not broken,或強制調用dbms_job.run來從新執行它。
除了以上咱們討論的submit存儲過程以外,Oracle還提供了其餘許多存儲過程來操做任務。例如:dbms_job.change 、 dbms_job.what、dbms_job.interval能夠用來修改提交的任務。要想刪除該任務,只需運行dbms_job.remove(n)便可,其中n爲任務號。 數據庫