david database lab

 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(3)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • 书画 (rss)
  • 围棋 (rss)
  • 地理 (rss)
  • 天文 (rss)
  • 摄影 (rss)
  • 文学 (rss)
  • 旅游 (rss)
  • 电影 (rss)
  • 诗集(3) (rss)
  • 象棋 (rss)
  • 运动 (rss)
  • 音乐 (rss)

随笔档案

  • 2008年9月 (1)
  • 2008年7月 (3)

文章分类

  • AJAX (rss)
  • ARITHEMETIC (rss)
  • C++ (rss)
  • CONFIGURATION (rss)
  • CSS(2) (rss)
  • DB2 (rss)
  • EJB (rss)
  • HQL (rss)
  • HTML(4) (rss)
  • JAVA(9) (rss)
  • JAVASCRIPT(27) (rss)
  • JSP(2) (rss)
  • LINUX(7) (rss)
  • MANUAL (rss)
  • MYSQL (rss)
  • ORACLE(88) (rss)
  • PL/SQL(3) (rss)
  • PL/SQL DEVELOPER (rss)
  • REGEX(1) (rss)
  • RSS(2) (rss)
  • SQL (rss)
  • SQL PLUS (rss)
  • SQL SERVER (rss)
  • SSH (rss)
  • STRUTS(6) (rss)
  • TOAD (rss)
  • XML(1) (rss)
  • 单元测试 (rss)
  • 数据库基础(7) (rss)
  • 数据建模 (rss)
  • 环境部署(5) (rss)
  • 项目设计(1) (rss)

文章档案

  • 2009年11月 (47)
  • 2009年8月 (2)
  • 2009年7月 (2)
  • 2009年6月 (11)
  • 2009年5月 (14)
  • 2009年4月 (2)
  • 2009年2月 (4)
  • 2009年1月 (2)
  • 2008年12月 (5)
  • 2008年11月 (6)
  • 2008年10月 (13)
  • 2008年9月 (3)
  • 2008年8月 (6)
  • 2008年7月 (16)
  • 2008年6月 (31)
  • 2008年5月 (4)

相册

  • goole相册
  • RELAX

收藏夹

  • oracle-DataGuard (rss)
  • oracle-RMAN (rss)
  • oracle体系 (rss)
  • oracle备份恢复 (rss)
  • oracle闪回 (rss)

JavaScript Web

  • gegereka-linux
  • linux 资源文件
  • java2s (rss)
  • java2s
  • onlyaa
  • ORACLE官方论坛
  • rpm.pbone.net
  • rpm资源
  • struts-guide
  • w3school
  • 鸟哥

搜索

  •  

最新评论

  • 1. re: hand in hand
  • I cannot thank you enough for the blog . Really thank you! Really Cool.
  • --zakbut
  • 2. re: oracle之isqlplus登录问题
  • 启动isqlplus
    isqlplus star
  • --广州大道
  • 3. re: 日期日间控件4
  • 显示时间,用户原来选择的时间
  • --LVWallet
  • 4. re: linux -- cpio命令
  • gunzip 10201_database_linux_x86_64.cpio.gz
  • --Goyard
  • 5. re: js 组合框
  • <option value="csdn">csdn</option>
  • --saletopbags

阅读排行榜

  • 1. hand in hand(380)
  • 2. 桃花记(255)
  • 3. 月夜随想(236)
  • 4. 冬至随想(228)

评论排行榜

  • 1. hand in hand(2)
  • 2. 桃花记(0)
  • 3. 月夜随想(0)
  • 4. 冬至随想(0)

Powered by: 博客园
模板提供:沪江博客
BlogJava | 首页 | 发新随笔 | 发新文章 | 联系 | 聚合 | 管理

全面学习ORACLE Scheduler特性 (7)使用Events之Scheduler抛出的Events 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-using-scheduler-events.shtml

(7)使用Events之Scheduler抛出的Events
[君三思] 2009-8-26

四、使用Events

  Event直译对应的中文解释是指事件,不过单纯讲事件毕竟太抽象了,举个示例来形容吧。A(对应某个应用程序,或者是ORACLE中的进程)在干活时突然眉头一皱说道,不好,前方有情况,这可怎么办!这时,只见它认真想了想,过了一会儿脸上一喜说道:有了,俗话说早请示啊晚汇报,出现情况要找领导,赶紧给领导发消息呗!于是B(也是对应某个应用或ORACLE进程)就收到了一条A发过来的"前方有XX情况"的消息,这个过程就叫EVENT(含A发消息以及B接收消息)。

  SCHEDULER 中有两种触发EVENT的情况:

  • Scheduler 触发的Events

    Scheduler 中触发的Events,一般是说当前schduler中job的状态发生修改,类似job启动,或者运行结束,或者达到运行时间等诸如此类的动作,都能够抛出一个EVENT,接收到EVENT的applicate就可以根据这些信息进行适当的处理。

    比如说,由于系统太过于繁忙,超出job启动时间后30分钟,job仍然没能顺利启动,那么这个时候,Scheduler就可以抛出一条EVENT给外部的应用,以便外部应用能够及时通知DBA,进行处理。

  • application 触发的Events

    外部的应用也可以触发Events,并且由Scheduler来接收并处理这一类型的Events。所谓Scheduler处理EVENT就是指Scheduler启动相应的job来执行相关操作,这类job在创建时专门声明了event的处理,这样当接收到EVENT时,这类job就会启动。

  Scheduler 使用Oracle高级队列来抛出以及销毁Events。当抛出Schduler触发的Events时,Scheduler将消息入队到默认的event队列,application则通过检查该队列来处理Events。当抛出application触发的Events时,application将消息入队到处理job对应的队列中。

  下面我们也按照这两个类型来介绍Scheduler中的Events。

4.1 Scheduler抛出的Events

  前面说了,Scheduler抛出的Events一般是指job状态改变时触发的,那么是不是说只要job状态发生了改变,就会触发Events,其实并非如此,因为默认情况下,job是不触发Events的。

  Scheduler 中的job有一个属性叫raise_events,专门用来设置job触发Events的条件,该属性在CREATE_JOB时不能执行,因此默认情况下该属性不会赋值,自然也就不会触发EVENT。要设置raise_events属性,只能是在job创建完成后,通过SET_ATTRIBUTE过程修改job的raise_events属性。

  例如,修改前面创建的job-,启用raise_events属性,执行语句如下:

    SQL> BEGIN

      2  DBMS_SCHEDULER.SET_ATTRIBUTE(¨INSERT_TEST_TBL¨, ¨raise_events¨,  DBMS_SCHEDULER.JOB_ALL_EVENTS)

      3  END;

      4  /

    PL/SQL procedure successfully completed.

  上述示例中指定的raise_events属性的属性值DBMS_SCHEDULER.JOB_ALL_EVENTS,就是抛出Events的触发条件。

  触发Events的有下列的类型,分别代表不同的操作:

  • job_started :JOB启动;
  • job_succeeded :JOB成功结束;
  • job_failed :JOB执行失败;
  • job_broken :JOB被置为BROKEN状态;
  • job_completed :JOB达到最大运行次数,或者运行的结束日期;
  • job_stopped :JOB被STOP_JOB过程置为停止执行的状态;
  • job_sch_lim_reached :Job的schedule达到限定值;
  • job_disabled :JOB被置于DISABLE状态;
  • job_chain_stalled :运行于chain的JOB被置于CHAIN_STALLED状态;
  • job_all_events :含上述提到的所有类型;
  • job_run_completed :由于Job运行出错、成功结束或被手动停止。

  起用raise_events后,Scheduler就会按照设定的触发条件,当达到触发条件时,即会抛出事件信息到SYS.SCHEDULER$_EVENT_QUEUE队列。

  例如,手动执行一次INSERT_TEST_TBL,看看是否向队列中记录信息,操作如下:

    SQL> exec dbms_scheduler.run_job(¨INSERT_TEST_TBL¨);

    PL/SQL procedure successfully completed.

  执行下列脚本,出队数据:

    SQL> set serveroutput on

    SQL> DECLARE

      2    l_dequeue_options    DBMS_AQ.dequeue_options_t;

      3    l_message_properties DBMS_AQ.message_properties_t;

      4    l_message_handle     RAW(16);

      5    l_queue_msg          sys.scheduler$_event_info;

      6  BEGIN

      7    l_dequeue_options.consumer_name := ¨TEST¨;

      8

      9    DBMS_AQ.dequeue(queue_name         => ¨SYS.SCHEDULER$_EVENT_QUEUE¨,

     10                    dequeue_options    => l_dequeue_options,

     11                    message_properties => l_message_properties,

     12                    payload            => l_queue_msg,

     13                    msgid              => l_message_handle);

     14    COMMIT;

     15

     16    DBMS_OUTPUT.put_line(¨event_type : ¨ || l_queue_msg.event_type);

     17    DBMS_OUTPUT.put_line(¨object_owner : ¨ || l_queue_msg.object_owner);

     18    DBMS_OUTPUT.put_line(¨object_name : ¨ || l_queue_msg.object_name);

     19    DBMS_OUTPUT.put_line(¨event_timestamp: ¨ || l_queue_msg.event_timestamp);

     20    DBMS_OUTPUT.put_line(¨error_code : ¨ || l_queue_msg.error_code);

     21    DBMS_OUTPUT.put_line(¨event_status : ¨ || l_queue_msg.event_status);

     22    DBMS_OUTPUT.put_line(¨log_id : ¨ || l_queue_msg.log_id);

     23    DBMS_OUTPUT.put_line(¨run_count : ¨ || l_queue_msg.run_count);

     24    DBMS_OUTPUT.put_line(¨failure_count : ¨ || l_queue_msg.failure_count);

     25    DBMS_OUTPUT.put_line(¨retry_count : ¨ || l_queue_msg.retry_count);

     26  END;

     27  /

    event_type : JOB_STARTED

    object_owner : TEST

    object_name : INSERT_TEST_TBL

    event_timestamp: 25-AUG-09 12.49.29.558758 PM +08:00

    error_code : 0

    event_status : 1

    log_id :

    run_count : 1

    failure_count : 0

    retry_count : 0

    PL/SQL procedure successfully completed.

  从返回的信息可以看到,event的类型为JOB_STARTED,表示JOB启动。实际上job:INSERT_TEST_TBL执行一次至少会向队列中插入两条event信息,一条为JOB_STARTED,一条则为JOB_SUCCEEDED(也可能是JOB_FAILED),这里不详细演示,感兴趣的朋友不妨自行测试。

    提示:SYS.SCHEDULER$_EVENT_QUEUE队列基于SYS.SCHEDULER$_EVENT_QTAB队列表,因此查询SYS.SCHEDULER$_EVENT_QTAB也可以获取上述的信息。

  SYS.SCHEDULER$_EVENT_QUEUE 是一个固定队列,实际应用的过程中,DBA应该根据实际情况,将该表访问权限授予相关用户,以便顺利出队该队列中的events信息。

  另外,友情提醒,默认情况下Scheduler仅保留最近24小时的Events信息,如果希望修改该设置的话,可以通过SET_SCHEDULER_ATTRIBUTE过程,修改scheduler的event_expiry_time属性,该项属性的属性值以秒为单位。

发表于 2009-11-25 15:14 javaex 阅读(311) 评论(0)  编辑  收藏 所属分类: ORACLE
 
新用户注册  刷新评论列表  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问   管理
相关文章:
  • Oracle 10g Scheduler 特性 转自 http://blog.csdn.net/tianlesoftware/archive/2009/10/22/4715218.aspx
  • 全面学习ORACLE Scheduler特性 (12)使用Window和Window Group 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-using-window.shtml
  • 全面学习ORACLE Scheduler特性 (11)使用Job Classes 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-using-job-classes.shtml
  • 全面学习ORACLE Scheduler特性 (10)使用Chains之管理CHAIN 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-alter-chains.shtml
  • 全面学习ORACLE Scheduler特性 (9)使用Chains之创建CHAIN 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-create-chains.shtml
  • 全面学习ORACLE Scheduler特性 (8)使用Events之Aapplication抛出的Events 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-using-application-events.shtml
  • 全面学习ORACLE Scheduler特性 (7)使用Events之Scheduler抛出的Events 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-using-scheduler-events.shtml
  • 全面学习ORACLE Scheduler特性 (6)设置Repeat Interval参数 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-repeat_interval.shtml
  • 全面学习ORACLE Scheduler特性 (5)Schedules调度Programs执行的Jobs 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-schedule-job-execute.shtml
  • 全面学习ORACLE Scheduler特性 (4)使用和管理Schedules 转自三思 http://www.5ienet.com/note/html/scheduler/oracle-scheduler-create-schedule.shtml