Job Chains
来源:互联网 发布:sql server安装包 编辑:程序博客网 时间:2024/06/08 11:50
Job Chains可以定制多个任务的先后顺序及分支结构
一、建立program,供Chain调用
二、建立Chains
三、建立步骤
四、需要注意:上面的1 2 3 4只是step的名称,与实际的先后执行顺序无关,下面才是设定顺序的语句:
五,建立job调用Chain
可以看到,因为2失败,后面的chian走了program4
六、毁尸灭迹
一、建立program,供Chain调用
BEGIN DBMS_SCHEDULER.create_program ( program_name => 'test_program_1', program_type => 'PLSQL_BLOCK', program_action => 'BEGIN INSERT INTO t_job_test(created, des) VALUES (SYSDATE, ''test_program_1''); COMMIT; END;', enabled => TRUE, comments => 'Program for first link in the chain.'); /*这儿制造点意外*/ DBMS_SCHEDULER.create_program ( program_name => 'test_program_2', program_type => 'PLSQL_BLOCK', program_action => 'BEGIN INSERT INTO t_job_test(created, des) VALUES (1234567, ''test_program_2''); COMMIT; END;', enabled => TRUE, comments => 'Program for second link in the chain.'); DBMS_SCHEDULER.create_program ( program_name => 'test_program_3', program_type => 'PLSQL_BLOCK', program_action => 'BEGIN INSERT INTO t_job_test(created, des) VALUES (SYSDATE, ''test_program_3''); COMMIT; END;', enabled => TRUE, comments => 'Program for last link in the chain.'); DBMS_SCHEDULER.create_program ( program_name => 'test_program_4', program_type => 'PLSQL_BLOCK', program_action => 'BEGIN INSERT INTO t_job_test(created, des) VALUES (SYSDATE, ''test_program_4''); COMMIT; END;', enabled => TRUE, comments => 'Program for last link in the chain.');END;/SQL> SELECT program_name FROM Dba_Scheduler_Programs WHERE owner = 'TEST';PROGRAM_NAME------------------------------TEST_PROGRAM_1TEST_PROGRAM_2TEST_PROGRAM_3TEST_PROGRAM_44 rows selected
二、建立Chains
BEGIN DBMS_SCHEDULER.create_chain ( chain_name => 'test_chain_1', rule_set_name => NULL, evaluation_interval => NULL, comments => 'A test chain.');END;/SQL> SELECT owner, 2 chain_name 3 FROM dba_scheduler_chains;OWNER CHAIN_NAME------------------------------ ------------------------------TEST TEST_CHAIN_11 row selected
三、建立步骤
BEGIN DBMS_SCHEDULER.define_chain_step ( chain_name => 'test_chain_1', step_name => 'chain_step_1', program_name => 'test_program_1'); DBMS_SCHEDULER.define_chain_step ( chain_name => 'test_chain_1', step_name => 'chain_step_2', program_name => 'test_program_2'); DBMS_SCHEDULER.define_chain_step ( chain_name => 'test_chain_1', step_name => 'chain_step_3', program_name => 'test_program_3'); DBMS_SCHEDULER.define_chain_step ( chain_name => 'test_chain_1', step_name => 'chain_step_4', program_name => 'test_program_4');END;/SQL> SELECT owner, chain_name, step_name 2 FROM dba_scheduler_chain_steps 3 ORDER BY owner, chain_name, step_name;OWNER CHAIN_NAME STEP_NAME------------------------------ ------------------------------ ------------------------------TEST TEST_CHAIN_1 CHAIN_STEP_1TEST TEST_CHAIN_1 CHAIN_STEP_2TEST TEST_CHAIN_1 CHAIN_STEP_3TEST TEST_CHAIN_1 CHAIN_STEP_44 rows selected
四、需要注意:上面的1 2 3 4只是step的名称,与实际的先后执行顺序无关,下面才是设定顺序的语句:
BEGIN dbms_scheduler.define_chain_rule(chain_name => 'test_chain_1', condition => 'TRUE', action => 'START "CHAIN_STEP_1"', rule_name => 'chain_rule_1', comments => 'First link in the chain.'); /*1成功后执行2*/ dbms_scheduler.define_chain_rule(chain_name => 'test_chain_1', condition => ':CHAIN_STEP_1.state = ''SUCCEEDED''', action => 'START "CHAIN_STEP_2"', rule_name => 'chain_rule_2', comments => 'Second link in the chain.'); /*2成功后执行3*/ dbms_scheduler.define_chain_rule(chain_name => 'test_chain_1', condition => ':CHAIN_STEP_2.state = ''SUCCEEDED''', action => 'START "CHAIN_STEP_3"', rule_name => 'chain_rule_3', comments => 'Third link in the chain.'); /*2失败后执行4*/ dbms_scheduler.define_chain_rule(chain_name => 'test_chain_1', condition => ':CHAIN_STEP_2.state = ''FAILED''', action => 'START "CHAIN_STEP_4"', rule_name => 'chain_rule_4', comments => 'Third link in the chain.'); /*结束*/ dbms_scheduler.define_chain_rule(chain_name => 'test_chain_1', condition => ':CHAIN_STEP_3.state = ''SUCCEEDED'' or :CHAIN_STEP_4.state = ''SUCCEEDED''', action => 'END', rule_name => 'chain_rule_5', comments => 'End of the chain.');END;/SQL> SELECT condition, 2 action 3 FROM dba_scheduler_chain_rules 4 ORDER BY owner, chain_name, rule_owner, rule_name;CONDITION ACTION-------------------------------------------------------------------------------- --------------------------------------------------------------------------------TRUE START "CHAIN_STEP_1":CHAIN_STEP_1.state = 'SUCCEEDED' START "CHAIN_STEP_2":CHAIN_STEP_2.state = 'SUCCEEDED' START "CHAIN_STEP_3":CHAIN_STEP_2.state = 'FAILED' START "CHAIN_STEP_4":CHAIN_STEP_3.state = 'SUCCEEDED' or :CHAIN_STEP_4.state = 'SUCCEEDED' END5 rows selected
五,建立job调用Chain
BEGIN DBMS_SCHEDULER.enable ('test_chain_1');END;/BEGIN dbms_scheduler.create_job(job_name => 'test_chain_1_job', job_type => 'CHAIN', job_action => 'test_chain_1', repeat_interval => 'freq=minutely; bysecond=0', start_date => systimestamp, end_date => systimestamp + (1 / 48), enabled => TRUE);END;/SQL> select * from t_job_test order by 1;CREATED DES-------------------- --------------------------------------------------2014-08-17 17:37:00 test_program_12014-08-17 17:37:01 test_program_42014-08-17 17:38:00 test_program_12014-08-17 17:38:00 test_program_42014-08-17 17:39:00 test_program_12014-08-17 17:39:00 test_program_46 rows selected
可以看到,因为2失败,后面的chian走了program4
六、毁尸灭迹
SQL> EXEC DBMS_SCHEDULER.stop_job(job_name => 'test_chain_1_job');begin DBMS_SCHEDULER.stop_job(job_name => 'test_chain_1_job'); end;ORA-27366: 作业 "TEST.TEST_CHAIN_1_JOB" 不在运行ORA-06512: 在 "SYS.DBMS_ISCHED", line 210ORA-06512: 在 "SYS.DBMS_SCHEDULER", line 557ORA-06512: 在 line 1SQL> EXEC DBMS_SCHEDULER.drop_job(job_name => 'test_chain_1_job');PL/SQL procedure successfully completedSQL> EXEC DBMS_SCHEDULER.drop_chain (chain_name => 'test_chain_1');PL/SQL procedure successfully completedSQL> EXEC DBMS_SCHEDULER.drop_program (program_name => 'test_program_1');PL/SQL procedure successfully completedSQL> EXEC DBMS_SCHEDULER.drop_program (program_name => 'test_program_2');PL/SQL procedure successfully completedSQL> EXEC DBMS_SCHEDULER.drop_program (program_name => 'test_program_3');PL/SQL procedure successfully completedSQL> EXEC DBMS_SCHEDULER.drop_program (program_name => 'test_program_4');PL/SQL procedure successfully completedSQL> DROP TABLE t_job_test PURGE;Table dropped
0 0
- Job Chains
- Notification Chains
- Notifier Chains
- Notification Chains
- uva529Addition Chains
- Piece Chains
- job
- job
- job
- job
- job
- JOB
- job
- Job
- job
- Job
- job
- JOB
- EntityObject类不能用 using system.data.objects.dataclass报错
- ubuntu12.04 安装配置octave-3.8.1
- 在类的成员函数中调用delete this(转载从东郭先生)
- SpringMVC @RequestBody接收Json对象字符串并返回list以json格式
- hdu1534 差分约束
- Job Chains
- ado.net连接数据库的用法
- Java基础之面向对象的基本概念(3)
- php中系统对象的深浅复制
- Android SDK 与API版本对应关系
- Android 系统信息获取(CPU,RAM,ROM,Battery,SD-card,版本等)
- 解决安装vmware-tools出现的“The path "" is not a valid path to the 3.2.0-4-amd64 kernel headers”问题
- leetcode之通配符
- this关键字讲解