谁动了我的数据——让Oracle触发器查找“元凶”

故事是这样的……

在上周修复一个分目录统计的BUG,测试后OK本周一上线的,可是上线后数据一会儿正确一会儿错误,认真分析后发现新程序把数据入库后,一会又被“坏人”写入错误数据。

就这样一场找“坏人”的斗争就这样开始……

 

1.  创建跟踪记录日志表

create table RESULT

(

  IP     VARCHAR2(256),

  MYDATE DATE,

  TYPE   VARCHAR2(20)

)

tablespace USERS

  pctfree 10

  initrans 1

  maxtrans 255

  storage

  (

    initial 64K

    minextents 1

    maxextents unlimited

  );  

 

2.  创建insert跟踪触发器

create or replace trigger tri_insert

  after insert on country 

  for each row

begin

  DECLARE

    v_user_identifier VARCHAR2(64);

  BEGIN

    SELECT SYS_CONTEXT('USERENV', 'OS_USER') || ':' ||

           SYS_CONTEXT('USERENV', 'IP_ADDRESS')

      INTO v_user_identifier

      FROM DUAL;

 

    insert into result (ip, mydate,type) values (v_user_identifier, sysdate,'INSERT');

  END;

end TRI_INSERT;

 

3.  创建Delete跟踪触发器

create or replace trigger TRI_DELETE

  after delete on country 

  for each row

begin

  DECLARE

    v_user_identifier VARCHAR2(64);

  BEGIN

    SELECT SYS_CONTEXT('USERENV', 'OS_USER') || ':' ||

           SYS_CONTEXT('USERENV', 'IP_ADDRESS')

      INTO v_user_identifier

      FROM DUAL;

 

    insert into result (ip, mydate,type) values (v_user_identifier, sysdate,'DEL');

  END;

end TRI_DELETE;

 

4.  创建update跟踪触发器(省略)

 

5.  抓“坏人”

Insert deleteupdate数据时,将会写操作记录,如下表所示:

1 heipark:192.168.1.61 2010/12/15 16:32:53 INSERT
2 heipark:192.168.1.61 2010/12/15 16:33:00 DEL

 

 

至此,“坏人”落网。阿弥陀佛~~

参考文章:http://cyr1974.itpub.net/post/2066/278990

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值