(5)Schedules調度Programs執行的Jobs |
[君三思] 2009-8-17 |
3.2 Schedules調度Programs執行的Jobs通過schedule調度program的執行的job,看到這樣的形容是不是讓你徹底暈頭了,就說明你還是沒搞明白10g中SCHEDULERS特性管理的jobs的含意,讓三思更直白地給你描述描述。10g版本中SCHEDULER將JOB分成了多個部分,program負責做什么,schedule負責啥時候做,job就簡單了,一個字:做。 前面幾個小節,三思已經分別演示了創建管理Jobs,創建管理Programs以及創建和管理Schedules,下面我們通過實例來演示,如何創建通過schedule調度program的執行的job吧。 首先,創建一個program,操作如下: SQL> BEGIN 2 DBMS_SCHEDULER.CREATE_PROGRAM ( 3 program_name => ¨my_program1¨, 4 program_action => ¨/bin/date¨, 5 program_type => ¨EXECUTABLE¨, 6 enabled => TRUE); 7 END; 8 / PL/SQL procedure successfully completed.通過上述語句,我們定義了一個program,執行操作系統命令date,并輸入到dt.log文件中。 接下來定義一個schedule,操作如下: SQL> begin 2 DBMS_SCHEDULER.CREATE_SCHEDULE ( 3 schedule_name => ¨my_first_schedule¨, 4 start_date => SYSDATE, 5 repeat_interval => ¨FREQ= DAILY ; INTERVAL=1¨, 6 comments => ¨Every 1 weeks¨); 7 END; 8 / PL/SQL procedure successfully completed.定義調試為每周執行一次。此處repeat_interval可根據實現情況進行修改。 最后,創建job,按照指定的schedule,執行program,操作如下: SQL> BEGIN 2 DBMS_SCHEDULER.CREATE_JOB ( 3 job_name => ¨execOScmd¨, 4 program_name => ¨my_program1¨, 5 schedule_name => ¨my_first_schedule¨, 6 enabled => true); 7 END; 8 / PL/SQL procedure successfully completed.創建job時,start_date,repeat_interval,job_action等均無須指定,因為這些參數將由program和schedule來控制。 這樣,操作完成后,ORACLE就會自動定時(當前設置為每周執行一次)program中定義的操作。 要查看當前的執行情況,通過*_scheduler_job_run_details即可查詢(*_scheduler_job_log也可以,不過該視圖中信息不如detail中全面)。例如,查看剛剛創建的"EXECOSCMD"任務的執行情況,執行命令如下: SQL> select log_id, log_date, status, additional_info 2 from user_scheduler_job_run_details 3 where job_name = ¨EXECOSCMD¨ 4 ; LOG_ID LOG_DATE STATUS ADDITIONAL_INFO ---------- -------------------- ---------- ------------------------------ 13760 17-AUG-09 02.47.53.7 SUCCEEDED 34050 PM +08:00看完這個示例之后,你是否對10g中的SCHEDULER特性多了些了解呢?千萬表自滿,SCHEDULER特性的功能還多著哪,接著往下看吧。 |