zoukankan      html  css  js  c++  java
  • 全面学习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就会自动替你清除所有依赖的对象了。

  • 相关阅读:
    bzoj 4012: [HNOI2015]开店
    POJ 1054 The Troublesome Frog
    POJ 3171 Cleaning Shifts
    POJ 3411 Paid Roads
    POJ 3045 Cow Acrobats
    POJ 1742 Coins
    POJ 3181 Dollar Dayz
    POJ 3040 Allowance
    POJ 3666 Making the Grade
    洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P
  • 原文地址:https://www.cnblogs.com/forestwolf/p/5132260.html
Copyright © 2011-2022 走看看