dbms_scheduler job raise_events dequeue

首先需要 DBMS_SCHEDULER.add_event_queue_subscriber ,否则无法使用
SQL> EXEC DBMS_SCHEDULER.remove_event_queue_subscriber;
PL/SQL procedure successfully completed

设置前面的job,使它执行时抛出事件,为了便于测试,改为手动执行:
BEGIN
  dbms_scheduler.disable('SCHEDULER_JOB_TEST');
  dbms_scheduler.set_attribute('SCHEDULER_JOB_TEST',
                               'raise_events',
                               dbms_scheduler.job_all_events);
  dbms_lock.sleep(2);
END;
/

建立一个proc,用来提取抛出的队列信息
CREATE OR REPLACE PROCEDURE p_dequeue AS
  l_dequeue_options    dbms_aq.dequeue_options_t;
  l_message_properties dbms_aq.message_properties_t;
  l_message_handle     RAW(16);
  l_queue_msg          sys.scheduler$_event_info;
BEGIN
  l_dequeue_options.consumer_name := USER;

  dbms_aq.dequeue(queue_name         => 'SYS.SCHEDULER$_EVENT_QUEUE',
                  dequeue_options    => l_dequeue_options,
                  message_properties => l_message_properties,
                  payload            => l_queue_msg,
                  msgid              => l_message_handle);
  COMMIT;
  dbms_output.put_line('event_type : ' || l_queue_msg.event_type);
  dbms_output.put_line('object_owner : ' || l_queue_msg.object_owner);
  dbms_output.put_line('object_name : ' || l_queue_msg.object_name);
  dbms_output.put_line('event_timestamp: ' || l_queue_msg.event_timestamp);
  dbms_output.put_line('error_code : ' || l_queue_msg.error_code);
  dbms_output.put_line('event_status : ' || l_queue_msg.event_status);
  dbms_output.put_line('log_id : ' || l_queue_msg.log_id);
  dbms_output.put_line('run_count : ' || l_queue_msg.run_count);
  dbms_output.put_line('failure_count : ' || l_queue_msg.failure_count);
  dbms_output.put_line('retry_count : ' || l_queue_msg.retry_count);
END;
/

手动执行job
SQL> EXEC dbms_scheduler.run_job('SCHEDULER_JOB_TEST');
PL/SQL procedure successfully completed

查看队列信息,会有两个信息,第一个是启动(job_started)
SQL> SET serveroutput ON
SQL> EXEC p_dequeue;
event_type : JOB_STARTED
object_owner : TEST
object_name : SCHEDULER_JOB_TEST
event_timestamp: 15-8月 -14 04.48.40.316000 下午 +08:00
error_code : 0
event_status : 1
log_id : 2266
run_count : 5
failure_count : 0
retry_count : 0
PL/SQL procedure successfully completed

第二个是成功:job_succeeded
SQL> EXEC p_dequeue;
event_type : JOB_SUCCEEDED
object_owner : TEST
object_name : SCHEDULER_JOB_TEST
event_timestamp: 15-8月 -14 04.48.40.675000 下午 +08:00
error_code : 0
event_status : 0
log_id : 2266
run_count : 5
failure_count : 0
retry_count : 0
PL/SQL procedure successfully completed

测试结束, REMOVE_EVENT_QUEUE_SUBSCRIBER  
SQL> EXEC DBMS_SCHEDULER.remove_event_queue_subscriber;
PL/SQL procedure successfully completed

信息参考: http://www.oracle-base.com/articles/10g/scheduler-enhancements-10gr2.php
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值