Oracle Job Chain

Job Chains

创建chain的顺序

  1. 创建chain object;
  2. 定义chain中的steps;
  3. 增加规则;
  4. 启用chain;
  5. 创建指向这个chain的job。

创建Chain Object

实验描述:

ENV:create table test_chain(id number);

createtable test_chain1(id number);

createtable test_chain2(id number);

step1:test_chain1表插入一条数据;

step2:step1执行成功后,test_chain中有超过两条数据时,插入test_chain2表一条数据。

begin

dbms_scheduler.create_chain(chain_name=>‘my_chain1‘,rule_set_name=>null,evaluation_interval=>interval ‘1‘ minute,

comments=>‘Chain with 30 minuteevaluation interval‘);

end;

/

PL/SQL procedure successfully completed.

evaluation_interval指的是chain rule的扫描间隔,这里是自定义的。Scheduler在启动job chain时和每次执行完chain step时都会去扫描chain rule,这里除了启动job chain时和chain step结束时,还会每一分钟自动扫描一次来判断rule的正确性。这个参数对于某种特殊情形,本次实验就启用这个参数。

定义Chain Steps

创建program

begin

dbms_scheduler.create_program(program_name=>‘my_program1‘,program_type=>‘PLSQL_BLOCK‘,

program_action=>‘begin insert intotest_chain1 values (1);commit;end;‘);

end;

/

PL/SQL procedure successfully completed.

begin

dbms_scheduler.create_program(program_name=>‘my_program2‘,program_type=>‘PLSQL_BLOCK‘,

program_action=>‘begin insert intotest_chain2 values (2);commit;end;‘);

end;

/

PL/SQL procedure successfully completed.

--enable program

SQL> begin

2 dbms_scheduler.enable(‘my_program1,my_program2‘);

3  end;

4  /

创建step

begin

dbms_scheduler.define_chain_step(chain_name=>‘my_chain1‘,step_name=>‘my_step1‘,program_name=>‘my_program1‘);

dbms_scheduler.define_chain_step(chain_name=>‘my_chain1‘,step_name=>‘my_step2‘,program_name=>‘my_program2‘);

end;

/

PL/SQL procedure successfully completed.

Note:定义step时,program和chain可以不存在,但是启动chain时,必须保证program

和chain存在。

增加Chain规则

Rule描述:

step1直接执行;

step2执行条件:step1执行成功,并且(selectcount(*) from test_chain) >=2

begin

dbms_scheduler.define_chain_rule(chain_name=>‘my_chain1‘,condition=>‘TRUE‘,action=>‘startmy_step1‘,rule_name=>‘rule_1‘);

end;

/

PL/SQL procedure successfully completed.

begin

dbms_scheduler.define_chain_rule(chain_name=>‘my_chain1‘,condition=>‘:my_step1.state=‘‘SUCCEEDED‘‘and (select count(*) from test_chain) >=2‘,

action=>‘startmy_step2‘,rule_name=>‘rule_1_2‘);

end;

/

PL/SQL procedure successfully completed.

启用Chain

begin

dbms_scheduler.enable(‘my_chain1‘);

end;

/

PL/SQL procedure successfully completed.

创建Chain job

Note:直接调用run_chain运行则不需enablechain,创建job则需要。

begin

dbms_scheduler.create_job(job_name=>‘chain_job_1‘,job_type=>‘CHAIN‘,job_action=>‘my_chain1‘,

start_date=>sysdate,repeat_interval=>‘freq=minutely;interval=1‘,enabled=>TRUE);

end;

/

Note:单独启动job,注意参数USE_CURRENT_SESSION=>false

SQL> begin

2 dbms_scheduler.run_job(job_name=>‘chain_job_1‘,USE_CURRENT_SESSION=>false);

3  end;

4  /

SQL> selectjob_name,job_subname,status,req_start_date,actual_start_date fromuser_scheduler_job_run_details where job_name=‘CHAIN_JOB_1‘;

JOB_NAME        JOB_SUBNAME          STATUS     REQ_START_DATE                                     ACTUAL_START_DATE

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

CHAIN_JOB_1                          STOPPED    16-JUN-16 03.44.03.000000 PM +08:00                16-JUN-16 03.44.03.588735 PM+08:00

CHAIN_JOB_1     MY_STEP1             FAILED     16-JUN-16 03.44.03.682508 PM +08:00                16-JUN-16 03.44.03.693946 PM+08:00

CHAIN_JOB_1     MY_STEP1             SUCCEEDED  16-JUN-16 04.17.43.335679 PM +08:00                16-JUN-16 04.17.43.436069 PM+08:00

发现my_step2还没有运行

SQL> select * from test_chain1;

ID

----------

1

my_program1已写入数据

制造my_step2启动的条件

SQL> insert into test_chainvalues(9);

1 row created.

SQL> /

1 row created.

SQL> commit;

Commit complete.

SQL> selectjob_name,job_subname,status,req_start_date,actual_start_date fromuser_scheduler_job_run_details where job_name=‘CHAIN_JOB_1‘;

JOB_NAME        JOB_SUBNAME          STATUS     REQ_START_DATE                                     ACTUAL_START_DATE

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

CHAIN_JOB_1                          STOPPED    16-JUN-16 03.44.03.000000 PM +08:00                16-JUN-16 03.44.03.588735 PM+08:00

CHAIN_JOB_1     MY_STEP2             SUCCEEDED  16-JUN-16 04.30.43.064558 PM +08:00                16-JUN-16 04.30.43.152496 PM+08:00

CHAIN_JOB_1     MY_STEP1             FAILED     16-JUN-16 03.44.03.682508 PM +08:00                16-JUN-16 03.44.03.693946 PM+08:00

CHAIN_JOB_1     MY_STEP1             SUCCEEDED  16-JUN-16 04.17.43.335679 PM +08:00                16-JUN-16 04.17.43.436069 PM+08:00

SQL> select * from test_chain2;

ID

----------

2

时间: 2024-12-25 06:23:01

Oracle Job Chain的相关文章

Oracle Scheduler Chain 的用法

本人是借荐他人的文章目的是学习dbms_scheduler创建CHAIN类型的JOB,至于EXECUTABLE类型的JOB我己经在<DBMS_SCHEDULER执行PERL脚本加载数据>介绍了.下面转网上相关介绍: Oracle CHAIN,也就是链,是将一串需要完成的作业连在一起,根据每一个步骤完成的不同结果来确定下面的哪一个动作需要被完成.实际上也就是if .. then ..else.比如,可能有如下的定义,step 1成功执行,执行step 2,如果step 1执行失败,执行step

Oracle电子商务套件版本12.1.3自述文件 (Doc ID 1534411.1)

文档内容 用途 适用范围 详细信息   应用版本更新包   更新后的步骤   包含的修补程序列表   变更记录   文档可访问性 参考 适用于: Oracle Applications DBA - 版本 12.1.3 到 12.1.3 [发行版 12.1] 本文档所含信息适用于所有平台 用途 Oracle电子商务套件版本12.1.3将Oracle电子商务套件版本12.1之后发布的所有补丁整合成一个高质量的,经过完全测试的版本升级补丁包. 注意: 应用Oracle电子商务套件12.1.3版本补丁包

转:ORACLE制造方法的比较

转自:http://blog.itpub.net/133041/viewspace-438549/ 1.离散制造. 2.重复制造 3.流式制造 Oracle Applications 支持离散.项目.重复.按订单装配以及流式(无工作单)等制造方法. 1.离散制造 对于分组或成批制造的装配件,您可以使用离散制造方法.您可以使用任务名称.任务类型.装配件.任务量.起始日期和终止日期来定义任务.对于非标准离散任务,您可以选择输入装配件和任务量. 您可以使用装配件物料清单来创建任务物料需求:还可以使用工

Oracle EBS Model Function Technical

?.Oracle EBS(ERP)Oracle 是公司名字,这个我估计大家都知道.EBS是E-Business Suite的缩写,简单的说,就是Oracle做的一个企业级的信息化软件或者系统,里面包含了财务,人力,分销,资产等很多企业用的到的模块.现在主流的就是SAP和Oracle EBS.在EBS 顾问这个行业,粗略的有以下分工.?.Oracle EBS Function Consultant 功能顾问功能顾问呢,就是业务顾问,可以理解为普通软件行业的产品经理,主要是熟悉业务的同时也熟悉系统相

oracle chain

[[email protected] dbs]$ sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Tue May 6 13:02:41 2014 Copyright (c) 1982, 2005, Oracle.  All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Produc

oracle 中的chain job

--演示环境 [email protected]> select * from v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.3.0 - 64bit Production --创建演示表及序列 CREATE TABLE tb_schduler ( id NUMBER (10)

Oracle Study之--Oracle等待事件(1)

Oracle Study之--Oracle等待事件(1) 一. 等待事件的相关知识1.1 等待事件主要可以分为两类: 即空闲(IDLE)等待事件和非空闲(NON-IDLE)等待事件.1). 空闲等待事件指ORACLE正等待某种工作,在诊断和优化数据库的时候,不用过多注意这部分事件.2). 非空闲等待事件专门针对ORACLE的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件 是在调整数据库的时候需要关注与研究的.在Oracle 10g中的等待事件有874个,11g中等待事件1118个.

oracle core04_undo

undo信息 oracle中undo的信息主要完成下面的功能: 1,构建块一致性读 2,回滚事务 UBA:undo block address 1,块中的事务槽ITL中的UBA表示这个ITL所在的block历经的最后一次改变所对应的undo record所在的UBA,主要用于一致读. 2,undo segment header中的UBA表示所对应的transaction的undo chain的最后一个UBA,用于transaction的回滚. 可以通过v$KTUXE视图来查看undo segme

Oracle core06_latch&amp;lock

lock and latch 在oracle中为了保护共享资源,使用了两种不同的锁机制lock和latch,这两种锁有明显不同点: 1,lock和pin,采用的是队列的方式,先来先服务的策略,latch和mutex,采用的是抢占的方式,fast fail模式2,lock可以hold的时间比较长,而latch时间会非常的短3,lock主要用户锁定对象,面向用户,latch主要锁定的是内存,面向系统 理解这两种锁的设计思想,可以应用在实际的生产过程中,首先: 1,这两种锁的粒度不同,一个粒度粗,一个