ORACLE Scheduler特性(5)Schedules排程Programs執行的Jobs
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特性的功能還多著哪,接著往下看吧