广告
返回顶部
首页 > 资讯 > 数据库 >Oracle调度Schedule特性chains分析
  • 246
分享到

Oracle调度Schedule特性chains分析

2024-04-02 19:04:59 246人浏览 泡泡鱼
摘要

本篇内容主要讲解“oracle调度Schedule特性chains分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle调度Schedule特性chai

本篇内容主要讲解“oracle调度Schedule特性chains分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle调度Schedule特性chains分析”吧!

举个简单的例子:运行PROGRAM:A以及PROGRAM:B,
如果成功的话继续运行PROGRAM:C,否则的话运行PROGRAM:D。Programs:A、B、C、D以及执行的逻辑关系就构成了一个最简单的CHAIN。
CHAIN的管理操作比较多:创建/删除/修改Chains,添加/修改/删除Chain Steps等等。
1、创建Chains
创建CHAIN使用DBMS_SCHEDULER.CREATE_CHAIN过程,这个过程调用非常简单,因为需要指定的参数极少
在创建Chain时,甚至可以简单到只指定一个CHAIN的名称,其它均为空即可
begin
  dbms_scheduler.create_chain('mychain1');
end;
创建好的Chains,可以通过*_SCHEDULER_CHAINS视图查看,例如:
sql> select chain_name from user_scheduler_chains;
CHAIN_NAME
----------------
MYCHAIN1
注意,创建了CHAIN是远远不够的,只有一个CHAIN对象ORACLE还是啥也干不了(当然啦,相信从上面执行的创建语句大家也看出来了),
CHAIN对象创建之后,要做的工作其实才刚刚开始。其后,还需要定义Chain Steps以及Chain rules。

2、创建Chain Step
Chain Steps 就是用来指定CHAIN执行的操作及执行步骤,创建CHAIN STEP是通过DBMS_SCHEDULER.DEFINE_CHAIN_STEP过程进行
为刚刚创建的mychain1添加一个step
begin
  dbms_scheduler.define_chain_step(chain_name   => 'mychain1',
                                   step_name    => 'mystep1',
                                   program_name => 'myprogram1');
end;
Chain Steps 即可以调用PROGRAM(注意是program,不是procedure,当然program中可以定义执行procedure),也可以调用EVENT,甚至调用其它CHAIN(嵌套CHAIN)。
下面接着为mychain1添加两个step,操作如下:
begin
  dbms_scheduler.define_chain_step(chain_name   => 'mychain1',
                                   step_name    => 'mystep2',
                                   program_name => 'myprogram2');
  dbms_scheduler.define_chain_step(chain_name   => 'mychain1',
                                   step_name    => 'mystep3',
                                   program_name => 'myprogram3');
end;
要查询定义的Chain Steps,则是通过*_SCHEDULER_CHAIN_STEPS视图,例如:
select chain_name,step_name,program_name from user_scheduler_chain_steps;
CHAIN_NAME                     STEP_NAME                      PROGRAM_NAME
------------------------------ ------------------------------ ---------------
MYCHAIN1                       MYSTEP1                        MYPROGRAM1
MYCHAIN1                       MYSTEP2                        MYPROGRAM2
MYCHAIN1                       MYSTEP3                        MYPROGRAM3


3、创建Chain Rule
接下来,要为CHAIN的运行定义规则。定义规则是使用DBMS_SCHEDULER.DEFINE_CHAIN_RULE过程,Chain Rules依赖于Chain Steps,
每个CHAIN RULE都拥有condition和action属性,当满足condition时则执行action中指定的step。
举个例子:创建CHAIN RULE,首先执行mystep1,如果mystep1成功执行的话,就继续执行mystep2,如果mystep2也成功执行的话,则结束该CHAIN,创建脚本如下
begin
  dbms_scheduler.define_chain_rule(chain_name => 'mychain1',
                                   condition  => 'true',
                                   action     => 'start mystep1',
                                   rule_name  => 'myrule1');
  dbms_scheduler.define_chain_rule(chain_name => 'mychain1',
                                   condition  => 'mystep1 completed',
                                   action     => 'start mystep2',
                                   rule_name  => 'myrule2');
  dbms_scheduler.define_chain_rule(chain_name => 'mychain1',
                                   condition  => 'mystep2 completed',
                                   action     => 'end 0',
                                   rule_name  => 'myrule3');
end;
CHAIN_NAME 就不说了,这里需要注意的是CONDITION和ACTION两个参数。在为CONDITION参数指定值时,其语法看起来稍稍复杂一些,或者说是灵活,CONDITION参数值支持下列的语法形式:
TRUE
FALSE
stepname [NOT] SUCCEEDED 
stepname [NOT] FAILED 
stepname [NOT] STOPPED 
stepname [NOT] COMPLETED 
stepname ERROR_CODE IN (integer, integer, integer ...)
stepname ERROR_CODE NOT IN (integer, integer, integer ...)
stepname ERROR_CODE = integer
stepname ERROR_CODE != integer
stepname ERROR_CODE <> integer
stepname ERROR_CODE > integer
stepname ERROR_CODE >= integer
stepname ERROR_CODE < integer
stepname ERROR_CODE <= integer
甚至于,还可以制定成下列逻辑语法:
expression AND expression
expression OR expression
NOT (expression)
比如说,我们希望条件为step1成功运行,那么可以指定condition参数值如下:
'step1 completed'
Action 参数相对简单一些,这个参数用来指定当满足condition参数时,CHAIN执行的操作。
  
4、运行Chains
最后,来运行一下创建的mychain1吧,手动运行CHAIN是通过DBMS_SCHEDULER.RUN_CHAIN过程
begin
  dbms_scheduler.run_chain(chain_name  => 'mychain1',
                           start_steps => 'mystep1');
end;
这个语句执行可能会报错呦,注意往下看
语句执行成功,查看一下执行的结果。我们之前定义的myprogram1等program对象,实际上是调用procedure,向一个指定表test中插入记录,这里直接查询一下该表,就知道执行情况了(在此之前,test表为空):

3个procedure和3个program:
create or replace procedure P_INSERT_INTOTEST is
begin
  insert into test values(1,'beer');
  commit;
end;

create or replace procedure insert_test1 is
begin
  insert into test values (1, 'beer');
end;

begin
dbms_scheduler.create_program(program_name => 'myprogram1', program_type => 'STORED_PROCEDURE', program_action => 'insert_test1', enabled => true);
end;

create or replace procedure insert_test2 is
begin
  insert into test values (2, 'rabbit');
end;

begin
dbms_scheduler.create_program(program_name => 'myprogram2', program_type => 'STORED_PROCEDURE', program_action => 'insert_test2', enabled => true);
end;

create or replace procedure insert_test3 is
begin
  insert into test values (3, 'horse');
end;

begin
dbms_scheduler.create_program(program_name => 'myprogram3', program_type => 'STORED_PROCEDURE', program_action => 'insert_test3', enabled => true);
end;

SQL> select * from test;
     ID NAME
---------- --------------------
         1 beer
         2 rabbit
你看,test表中有了两条记录,对应前面设置的CHAIN RULE,说明mystep1和mystep2均已正确执行。

提示:Chains在执行前,必须被置于enabled状态,默认情况下刚刚创建的CHAIN都是disabled状态,要修改Chains的状态,
还是通过DBMS_SCHEDULER.ENABLE和DBMS_SCHEDULER.DISABLE两过程
begin 
  dbms_scheduler.enable('mychain1');
end;
手动执行的CHAIN的话没有系统级的日志记录,因此如果希望看到详细执行情况的话,可以创建job来执行CHAIN,例如:
begin
  dbms_scheduler.create_job(job_name        => 'chainjob1',
                            job_type        => 'CHAIN',
                            job_action      => 'mychain1',
                            repeat_interval => 'freq=daily: interval=1',
                            enabled         => true);
end;
然后,管理员或者创建者就可以通过定期观察*_scheduler_job_run_details视图来确认chain的执行情况了。

到此,相信大家对“Oracle调度Schedule特性chains分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle调度Schedule特性chains分析

本文链接: https://www.lsjlt.com/news/65342.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle调度Schedule特性chains分析
    本篇内容主要讲解“Oracle调度Schedule特性chains分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle调度Schedule特性chai...
    99+
    2022-10-19
  • Oracle调度Schedule特性分析
    这篇文章主要介绍“Oracle调度Schedule特性分析”,在日常操作中,相信很多人在Oracle调度Schedule特性分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2022-10-19
  • Oracle调度Schedule特性中的program分析
    本篇内容主要讲解“Oracle调度Schedule特性中的program分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle调度Schedule特性中...
    99+
    2022-10-19
  • Oracle调度Schedule特性(第一部分)-job
    在主机层面,我想要执行一些定时任务,通常会使用crontab。方便又实用,那么oracle里面是不是也有定时任务的概念呢? Oracle Scheduler的引入就是用来管理和计划数据库的Job,通过它可以...
    99+
    2022-10-18
  • Oracle调度Schedule特性(第五部分)-schedule、program、job联合
    oracle 10g版本之后scheduler将job的属性分成了多个部分,program负责做什么,schedule负责啥时候做,job就简单了,一个字:干。 前面几篇文章,我们分别介绍了创建管理Jobs...
    99+
    2022-10-18
  • Oracle调度Schedule特性是什么
    这篇文章主要讲解了“Oracle调度Schedule特性是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle调度Schedule特性是什么”吧!...
    99+
    2022-10-19
  • Oracle调度Schedule特性(第八部分)-Windows和Window Groups
    哈哈,关于schedule的内容还没完,本章讲Windows,通常说的Windows是指盖首富的操作系统,而此处所说的Windows, 是指SCHEDULER特性中的一个子项。在SCHEDULER中,WIN...
    99+
    2022-10-18
  • 全面学习ORACLE Scheduler特性(5) Schedules调度Programs执行的Jobs
    同上 3.2 Schedules调度Programs执行的Jobs   通过schedule调度program的执行的job,看到这样的形容是不是让你彻底晕头了,就说明你还是没搞明...
    99+
    2022-10-18
  • Oracle 18c新特性-PDB快照轮播的示例分析
    这篇文章给大家分享的是有关Oracle 18c新特性-PDB快照轮播的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Oracle 18c推出的一个新功能就是PDB快照轮播...
    99+
    2022-10-18
  • Oracle 11g物理Active Data Guard实时查询特性分析
    本篇内容介绍了“Oracle 11g物理Active Data Guard实时查询特性分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希...
    99+
    2022-10-18
  • Oracle 12c R2中ADG会话保留特性的示例分析
    这篇文章给大家分享的是有关Oracle 12c R2中ADG会话保留特性的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Oracle 12c R2中有一个不错的特性,那就...
    99+
    2022-10-18
  • Oracle 12c新特性之多线程数据库的示例分析
    这篇文章将为大家详细讲解有关Oracle 12c新特性之多线程数据库的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。有一个概念,叫多进程和多线程。在Unix/Li...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作