Oracle 10g引入dbms_scheduler來替代先前的dbms_job,在功能方面,它比dbms_job提供了更強大的功能和更靈活的機制/管理。
首先簡單講一下oracle 10g scheduler,10g引入dbms_scheduler來替代先前的dbms_job,在功能方面,它比dbms_job提供了更強大的功能和更靈活的機制/管理.它主要由以下幾大塊構成:
1.作業(job):
一個調度程式作業的實體.可以由dbms_scheduler.create_job創建生成.它可以自行指定作業屬性,也可以調用我們預先創建的一系列scheduler/ program/ chain/ job_class/ window/ window_group來匹配其作業屬性.
2.調度(scheduler):
一個任務計畫執行的時間策略.比如我們想要創建一個晚上3點執行的任務計畫,就可以創建一個調度,凡是符合這個調度要求的,都可以調用這個我們預先創建好的調度.可以用dbms_scheduler.create_schedule來創建一個調度.
比如我創建一個名字叫MYTEST_SCHEDULE的調度,每天4:00執行.
Begin dbms_scheduler.create_schedule( repeat_interval => 'FREQ=DAILY;BYHOUR=4;BYMINUTE=0;BYSECOND=0', start_date => systimestamp at time zone 'PRC', comments => '---this is my test schedule---', schedule_name => 'MYTEST_SCHEDULE'); end; |
3.程式(program):
10g下的program支持分為3種形式,PL/SQL BLOCK/STORED PROCEDURE/EXECUTABLE.可以使用DBMS_SCHEDULER.CREATE_PROGRAM來創建一個program.
BEGIN DBMS_SCHEDULER.CREATE_PROGRAM( program_name=>'mytest_program_1', program_action=>'update mytest set id=id+1;', program_type=>'PLSQL_BLOCK', number_of_arguments=>0, comments=>'', enabled=>TRUE); END; |
4.鏈(chain):
鏈可以看作是一個/幾個program/event scheduler的集合,為了維護需要,我們可能需要將很多不同的program放到一起依次執行,按照以前的模式,要么將這幾個program能整合成一個大的整體,要么分開幾個job來單獨執行,這無疑加重了維護負擔,而chain的出現,可以最佳化這個問題,我們將實現定義好的program集合到一起,然後統一制定一個job來執行,可以使用dbms_scheduler.create_chain來創建一個chain.