(4)使用和管理Schedules |
[君三思] 2009-8-13 |
三、使用Schedules10g 中新推出的SCHEDULER可能確實會讓很多初接觸的朋友感覺暈頭暈腦,相比之前的jobs,SCHEDULER中新增的概念太多。比如說jobs,仍然可以理解成之前版本中的jobs,不過功能更加強大(注意10g中也仍然可以使用普通jobs,這是廢話,相信看本篇文章的朋友目前應該還是這樣在用),比如說program,指的是運行的程序(把要做什么單提出來了),比如說schedule,我將其翻譯為調度(job我翻譯為任務),定義執行的頻率或者說周期。 3.1 創建和管理Schedule sSchedule ,中文直譯的話應該理解成調度,從名字來看,它是一個邏輯實體(邏輯,還實體,好矛盾),就是說當創建了schedule之后,數據庫中就肯定存在這一對象,只不過這一對象是用來描述job的執行周期。 創建schedule可以通過DBMS_SCHEDULER.CREATE_SCHEDULE過程,該過程支持的參數如下: SQL> desc dbms_scheduler.create_schedule; Parameter Type Mode Default? --------------- ------------------------ ---- -------- SCHEDULE_NAME VARCHAR2 IN START_DATE TIMESTAMP WITH TIME ZONE IN Y REPEAT_INTERVAL VARCHAR2 IN END_DATE TIMESTAMP WITH TIME ZONE IN Y COMMENTS VARCHAR2 IN Y各參數分別代表含意如下:
這其中,比較有技術含量的是REPEAT_INTERVAL參數,對于這個參數大家應該不會太陌生,因為前面介紹Jobs,也曾經提到過同名的參數,Schedules中的REPEAT_INTERVAL參數和Jobs中的REPEAT_INTERVAL參數功能完全相同,甚至參數格式也一模一樣。 REPEAT_INTERVAL 參數的語法結構要復雜的多。其中最重要的是FREQ和INTERVAL兩個關鍵字。
比如說,當指定REPEAT_INTERVAL=>¨FREQ=DAILY;INTERVAL=1¨;就表示每天執行一次,如果將INTERVAL改為7就表示每7天執行一次,效果等同于FREQ=WEEKLY;INTERVAL=1。 下面,創建一個schedule,指定調度為每周一次的頻率,執行腳本如下: SQL> begin 2 DBMS_SCHEDULER.CREATE_SCHEDULE ( 3 schedule_name => ¨my_first_schedule¨, 4 start_date => SYSDATE, 5 repeat_interval => ¨FREQ=WEEKLY; INTERVAL=1¨, 6 comments => ¨Every 1 weeks¨); 7 END; 8 / PL/SQL procedure successfully completed.查詢當前已經創建的schedules,可以通過*_SCHEDULER_SCHEDULES視圖(含DBA_,ALL_,USER_),例如,查看當前用戶擁有的schedules,執行語句如下: SQL> select schedule_name,repeat_interval from user_scheduler_schedules; SCHEDULE_NAME REPEAT_INTERVAL ------------------------------ ------------------------------ MY_FIRST_SCHEDULE FREQ=WEEKLY; INTERVAL=1如果要修改schedule屬性的話,也是使用DBMS_SCHEDULER.SET_ATTRIBUTE過程,該過程的調用方式前面已經多次演示過,這里就不再重復舉例了,僅說明一點,對于schedule來說,能夠修改的屬性包括:REPEAT_INTERVAL、COMMENTS、END_DATE、START_DATE以及EVENT_SPEC。 至于刪除schedule,再簡單不過,執行DBMS_SCHEDULER.DROP_SCHEDULE過程即可,例如: SQL> EXEC DBMS_SCHEDULER.DROP_SCHEDULE(¨MY_FIRST_SCHEDULE¨); PL/SQL procedure successfully completed. |