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