全面學習ORACLE Scheduler特性(10)管理Chains

junsansi發表於2009-09-07

5.2  管理Chains

5.2.1  修改Chains屬性

  基本上碰到修改CHAIN屬性的機率不會太大,因此確實沒啥可修改的,對於CHAIN物件來說,能夠修改的屬性只有兩個:evaluation_interval和comments,這兩個引數一般情況下甚至都不會進行設定。如果你碰到了確實需要修改的情況,沒問題,DBMS_SCHEDULER.SET_ATTRIBUTE過程還記的吧,沒錯,修改CHAIN也是用它。例如:

    SQL> select chain_name,comments from user_scheduler_chains;

    CHAIN_NAME           COMMENTS

    -------------------- --------------------------

    MY_CHAIN1

    SQL>  exec dbms_scheduler.set_attribute('my_chain1','comments','change it for a test!');

    PL/SQL procedure successfully completed.

    SQL> select chain_name,comments from user_scheduler_chains;

    CHAIN_NAME           COMMENTS

    -------------------- --------------------------

    MY_CHAIN1            change it for a test !

5.2.2  設定Chain Step執行屬性

  修改Chain Step的執行屬性就不能使用DBMS_SCHEDULER.SET_ATTRIBUTE了,而是有專門的過程DBMS_SCHEDULER.ALTER_CHAIN處理,該過程的定義如下:

    SQL> desc dbms_scheduler.alter_chain;

    Parameter  Type     Mode Default? 

    ---------- -------- ---- -------- 

    CHAIN_NAME VARCHAR2 IN            

    STEP_NAME  VARCHAR2 IN            

    ATTRIBUTE  VARCHAR2 IN            

    VALUE      BOOLEAN  IN      

  前兩個引數就不說了,ATTRIBUTE引數用來指定STEP的屬性值,可設定的屬性值有3個,每個屬性值都有TRUE和FALSE兩個選項,由VALUE引數指定:

  • PAUSE :設定該引數值為TRUE時,當step執行時,其執行狀態就會變更為PAUSED;
  • SKIP :設定該引數值為TRUE時,當step滿足執行條件時,並不是執行step中的program,而是直接跳過,注意當SKIP引數值設定為TRUE,並且PAUSE引數值也被設定為TRUE,那麼將會以PAUSE的狀態優先;
  • RESTART_ON_RECOVERY :設定該引數值為TRUE時,如果由於資料庫shutdown導致step被停止,那麼當下次資料庫啟動時,step會自動重新執行。

  DBMS_SCHEDULER.ALTER_CHAIN 過程修改Chain Step屬性後,只有當下次執行時才會生效,如果要修改當前執行中Chain Step的屬性,也有一個專門的過程DBMS_SCHEDULER.ALTER_RUNNING_CHAIN進行處理,該過程語法與DBMS_SCHEDULER.ALTER_CHAIN一模一樣,這裡就不詳細介紹了。

5.2.3  刪除Chain Rules

  Chain Rules 沒有對應的修改方法,如果要修改某個Chain的rule,只能首先刪除不適當的rule,然後重新新增新rule(所謂新增,其實就是再重新定義一個rule)。

  刪除Chain Rule有專門的過程DBMS_SCHEDULER.DROP_CHAIN_RULE,該過程語法如下:

    SQL> desc dbms_scheduler.drop_chain_rule;

    Parameter  Type     Mode Default? 

    ---------- -------- ---- -------- 

    CHAIN_NAME VARCHAR2 IN            

    RULE_NAME  VARCHAR2 IN            

    FORCE      BOOLEAN  IN   Y         

  三思一眼就能看出來,這個過程的呼叫方式那是相當簡單,因此就不對各個引數詳細介紹了,下面舉個簡單的示例,比如刪除前面定義的my_rule3,執行過程如下:

    SQL> exec dbms_scheduler.drop_chain_rule('my_chain1','my_rule3',true);

    PL/SQL procedure successfully completed.

5.2.4  刪除Chain Steps

  刪除Chain Step也有專門的過程DBMS_SCHEDULER.DROP_CHAIN_STEP進行處理,該過程語法如下:

    SQL> desc dbms_scheduler.drop_chain_step;

    Parameter  Type     Mode Default? 

    ---------- -------- ---- -------- 

    CHAIN_NAME VARCHAR2 IN            

    STEP_NAME  VARCHAR2 IN            

    FORCE      BOOLEAN  IN   Y   

  看著有點兒眼熟是吧,沒錯,與drop_chain_rule的相似度高達90%以上。例如,刪除之前定義的my_step3,執行過程如下:

    SQL> exec dbms_scheduler.drop_chain_step('my_chain1','my_step3',true);

    PL/SQL procedure successfully completed.

5.2.5  刪除Chains

  如果要刪除Chain那就更簡單了,執行dbms_scheduler.drop_chain過程即可,例如:

    SQL> exec dbms_scheduler.drop_chain('my_chain1',true);

    PL/SQL procedure successfully completed.

  注意,執行drop_chain時,如果不指定force引數為TRUE,那麼預設情況下ORACLE會首先檢查要刪除的CHAIN是否還有被依賴的物件,如果存在的話,會報ORA-27479錯誤,提示仍然有依賴的物件(所謂依賴的物件就是指,該chain仍然存在chain_step或chain_rule之類),因此無法直接刪除。這種情況下解決方案有兩種:一是手動刪除所有相關的chain_step和chain_rule,然後再執行chain的刪除,再就是附加force引數並指定引數值為true,這樣ORACLE就會自動替你清除所有依賴的物件了。

==============================================

全面學習ORACLE Scheduler特性(9)建立Chains

全面學習ORACLE Scheduler特性(8)Application丟擲的Events

全面學習ORACLE Scheduler特性(7)Scheduler丟擲的Events

全面學習ORACLE Scheduler特性(6)設定Repeat Interval引數

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-614094/,如需轉載,請註明出處,否則將追究法律責任。

相關文章