六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 61|回复: 0

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

[复制链接]

升级  78%

45

主题

45

主题

45

主题

秀才

Rank: 2

积分
167
 楼主| 发表于 2013-1-15 02:16:15 | 显示全部楼层 |阅读模式
故事是这样的……
在上周修复一个分目录统计的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 、delete、update数据时,将会写操作记录,如下表所示:

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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表