使用Oracle job定時執(zhí)行存儲過程
Oracle job允許我們定制任務(wù)的執(zhí)行時間,并提供了靈活的處理方式,還可以通過配置,安排任務(wù)在系統(tǒng)用戶訪問量少的時段內(nèi)執(zhí)行,極大地提高了工作效率。例如,對于數(shù)據(jù)庫日常的備份、更新、刪除和復(fù)制等耗時長、重復(fù)性強的工作,我們就可以利用Oracle job去自動執(zhí)行以減少工作量。 本文以一個問題來介紹這一功能的使用。
問題:假設(shè)有一個存儲過程p_test,如何才能每20分鐘執(zhí)行一次?
解答:
1、把init.ora中如下兩個參數(shù)打開。
- JOB_QUEUE_INTERVAL=60
- JOB_QUEUE_PROCESSES=4
- job_queue_keep_connections=true
然后重啟一個庫,如果原來已經(jīng)打開了則不用這步了。
2、示例,以下由sqlplus 來執(zhí)行,具體參照一下相關(guān)的文檔。
- VARIABLE jobno number;
- BEGIN
- DBMS_JOB.SUBMIT(:jobno,
- ’p_test;’
- SYSDATE,’SYSDATE + 1/72’);
- commit;
- END;
- DBMS_JOB.SUBMIT(:jobno,//job號
- ’your_procedure;’,//要執(zhí)行的過程
- trunc(sysdate)+1/24,//下次執(zhí)行時間
- ’trunc(sysdate)+1/24+1’//每次間隔時間
- );
刪除job:dbms_job.remove(jobno);
修改job:dbms_job.what(jobno,what);
修改下次執(zhí)行時間:dbms_job.next_date(job,next_date);
修改間隔時間:dbms_job.interval(job,interval);
停止job:dbms.broken(job,broken,nextdate);
啟動job:dbms_job.run(jobno);
例子:
- VARIABLE jobno number;
- begin
- DBMS_JOB.SUBMIT(:jobno,
- ’Procdemo;’,
- SYSDATE, ’SYSDATE + 1/720’);
- commit;
- end;
本文就介紹到這里,歡迎大家批評指導(dǎo)!
【編輯推薦】