• 使用系统包DBMS_ALERT监视表


    来源:http://blog.csdn.net/edcvf3/article/details/8285328

    DBMS_ALERT支持异步捕获数据库事件.

    现测试其捕捉表的各种改变,测试表为emp.

    由于是异步的,我们这里需要开2个SQLPLUS窗口(两个session)

    第一个session里写存储过程如下:

    (注意要先给SCOTT用户权限哦,

    grant execute on dbms_alert to scott)

    [sql] view plain copy
     
     print?
    1. declare  
    2. v_n varchar2(30);  
    3. v_m varchar2(100);  
    4. v_i integer;  
    5. begin  
    6. dbms_alert.removeall;  
    7. dbms_alert.register('emp_table_alert');  
    8. dbms_alert.waitany(v_n,v_m,v_i);  
    9. if l_i=0 then  
    10. dbms_output.put_line('[name:]'||l_n);  
    11. dbms_output.put_line('[msg:]'||l_m);  
    12. end if;  
    13. dbms_alert.removeall;  
    14. end;  
    15. /  
     

    执行此存储过程后,此session会处于等待状态。。。

    我们重新开一个sqlplus,建立触发器如下:

    [sql] view plain copy
     
     print?
    1. create or replace trigger emtring  
    2. after insert or update or delete on emp  
    3. begin  
    4. dbms_alert.signal('emp_table_alert',to_char(sysdate,'yyyymmdd')||':table emp is changed');  
    5. end;  
     


    其中dbms_alert.signal用来发送警报,在此session下,进行一些改变,如insert

    [sql] view plain copy
     
     print?
    1. insert into emp(empno,ename) values(1234,'w001');  
    2. commit;  

     注意一定要commit;因为DBMS_ALERT是基于事务处理的.

    一旦commit,第一个SQLPLUS里的session的等待状态会结束,输出结果如下:

    [sql] view plain copy
     
     print?
    1. 10:18:18 SCOTT@orcl> /  
    2. [name:]EMP_TABLE_ALERT  
    3. [msg:]20121212:table emp is changed  


     

    此包一般会用在开发里,在application里捕捉DB里发生的各种警报用于处理.

  • 相关阅读:
    数据挖掘与R语言,数据分析,机器学习
    Linux下bash中关于日期函数date的格式及各种用法
    大数据之机器学习(11)
    unsolved 2 db2 issues
    时间是一剂良药,是制作“知识食物”不可或缺的材料
    b,B,KB,MB,GB
    学习数据结构要再学一遍c语言,害,加油吧
    栈(stack)
    堆(heap)
    js计算器(一)
  • 原文地址:https://www.cnblogs.com/yansjhere/p/5969246.html
Copyright © 2020-2023  润新知