ORACLE Scheduler特性(10)管理Chains
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就會自動替你清除所有依賴的物件了。
==============================================