`
heipark
  • 浏览: 2079397 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

谁动了我的数据——让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

分享到:
评论
1 楼 di1984HIT 2013-02-07  
写的不错。。。。。

相关推荐

Global site tag (gtag.js) - Google Analytics