zoukankan      html  css  js  c++  java
  • DBMS_ALERT包

    DBMS_ALERT包用于发布报警信息。它是单向的,以事务提交为基础的,对数据库报警事件的异步报警通知。

      报警是基于事务的,也就是说除非发出报警信号的事务被提交commit,才会触发报警,否则等待过程中的事务,即报警接收方,不会获得报警。

    首先要授权用户拥有执行DBMS_ALERT包的权限。

     --向用户username授予在 dbms_alert包上的执行权限

    1 grant execute on dbms_alert to username;

    报警需要定义报警的发布方和接收方。

    报警发布方:

    发布报警事件(信号):signal

    语法:

    1 DBMS_ALERT.signal(name in varchar2,
    2                   message in varchar2);

    该过程用于发布报警信号,只有在提交事务时(commit),才会触发报警,发出报警信息,当退回事务时(rollback),是不会触发报警的。

    其中 name用于指定报警名称,message用于指定报警携带的消息。

    报警接收方:

    (1)注册报警事件(信号):register

    DBMS_ALERT.register(name in varchar2);    --name为报警名称

        执行该过程后,将该报警名添加到该会话对应的报警注册表中。

    (2)等待特定报警或者等待任意报警

    --等待指定报警事件
    DBMS_ALERT.waitone(name in varcahr2,        --指定等待的报警名称 message out varchar2,      --返回报警发布方发布的报警消息  status out integer,       --在timeout时间段内发生报警则返回0,如果超时则返回1 timeout in number default MAXWAIT);  --等待报警发生的时间段,如果在此时间段内无报警发生,则status返回1
    --等待任意报警事件
    1
    DBMS_ALERT.waitany(name out varcahr2,     --返回发生的报警事件名称 2 message out varchar2,   3 status out integer, 4 timeout in number default MAXWAIT);

    (3)删除注册的特定报警或者所有报警:remove

    DBMS_ALERT.remove(name in varchar2);
    DBMS_ALERT.removeall;

    (4)设置检测报警事件的时间间隔,默认时间间隔为5秒,即轮询时间。

    DBMS_ALERT.set_defaults(sensitivity in number);   --以秒为单位
     1 -- 报警接收方
     2 declare 
     3   -- Local variables here
     4   v_alert_name       varchar2(30) := 'alert_name_1';
     5   v_status           integer;
     6   v_msg              varchar2(200);
     7 begin
     8   -- Test statements here
     9   --注册报警信号
    10   DBMS_ALERT.register(v_alert_name);
    11   --监听报警,等待报警发生
    12   DBMS_ALERT.waitone(v_alert_name, v_msg, v_status);
    13   --如果status不返回0,则表示未接收到报警信号
    14   if v_status != 0 then
    15      DBMS_OUTPUT.put_line('error');
    16   end if;
    17   DBMS_OUTPUT.put_line(v_msg);--输出报警消息   
    18 end;
     1 -- 报警发布方
     2 declare 
     3   -- Local variables here
     4   v_alert_name       varchar2(20) := 'alter_name_1';
     5  
     6 begin
     7   -- 发布报警信号
     8  DBMS_ALERT.signal(v_alert_name, '发布报警消息');
     9  commit;              --当commit时,才会触发报警,如果是rollback,则不触发报警 
    10 end;
  • 相关阅读:
    运算符与优先级
    数据类型
    c++基础
    有关进制
    函数二——递归
    字符串与随机数
    C语言第一课
    Linux-Shell
    Linux入门
    文本处理三剑客命令初探
  • 原文地址:https://www.cnblogs.com/ly01/p/8612721.html
Copyright © 2011-2022 走看看