`
swingboat
  • 浏览: 60079 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

记录DB数据是被哪台数据删除的触发器

OS 
阅读更多

前几天遇到了一个奇怪的bug,有一条数据莫名其妙被删除了。而这条数据也不是每次都被删除,只是偶尔被删除。删除这条数据的函数在两个地方调用:1. 在主线程中,用户请求,将被删除。2. 在一个守护线程中,每隔一定的时间运行删除。由于是多台server同时运行,前面有台Load balance进行负载均衡。这样我们没有办法确定是哪台server删除了这条数据,而且也有可能是开发者直接用本地的环境连到db删除了这条数据。为了确认是哪台server删除这条数据,于是我们增加了一个触发器对这个表进行了监控:

1. 创建一个记录请求的表

create table aduitclock(
terminal varchar2(250),
sessionid varchar2(250),
instance varchar2(250),
current_user varchar2(250),
current_userid varchar2(250),
session_user varchar2(250),
session_userid varchar2(250),
proxy_user varchar2(250),
proxy_userid varchar2(250),
db_domain varchar2(250),
db_name varchar2(250),
host varchar2(250),
os_user varchar2(250),
external_name varchar2(250),
ip_address varchar2(250),
INSERTTIME varchar2(250),
LOCK_PATH varchar2(4000)
)
 

2. 增加触发器对表进行监控

CREATE OR REPLACE TRIGGER  locks_aduitdel
before delete on wbxcore_locks
for each row
begin 
insert into aduitclock select
          SYS_CONTEXT('USERENV','TERMINAL') terminal,
          SYS_CONTEXT('USERENV','SESSIONID') sessionid,
          SYS_CONTEXT('USERENV','INSTANCE') instance,
          SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
          SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid,
          SYS_CONTEXT('USERENV','SESSION_USER') session_user,
          SYS_CONTEXT('USERENV','SESSION_USERID') session_userid,
          SYS_CONTEXT('USERENV','PROXY_USER') proxy_user,
          SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid,
          SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain,
          SYS_CONTEXT('USERENV','DB_NAME') db_name,
          SYS_CONTEXT('USERENV','HOST') host,
          SYS_CONTEXT('USERENV','OS_USER') os_user,
          SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name,
          SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address,
          sysdate,
          :old.lock_path
FROM DUAL;
 这样我们就很容易从表aduitclock中,根据ip_address 和LOCK_PATH查出是哪个server删除了这条数据了。
分享到:
评论

相关推荐

    数据库完整性实验-完整代码.rar

    【数据库完整性实验】实验完整代码 ...(10)建立一个触发器course_check,每当删除课程表中记录时,先检查此课程是否已被选修,如选修则不允许删除,且给出提示信息“此课程已有学生选修,无法删除!”。

    数据库:存储过程、触发器、索引实验代码

    3.在你的案例场景中,分别设计并实现一个由数据插入、数据更新、数据删除所引发的触发器(前触发或后触发都可以),测试触发器执行效果。 二、索引实验 1) 结合作业#3,针对你的数据库中的一个表,编写简单的数据...

    SQLServer2005考试题及答案

    A sp_ dbhelp B sp_ db C sp_ help D sp_ helpdb 2、SQL语言中,删除一个表的命令是( ) A DELETE B DROP C CLEAR D REMORE 3、关系数据库中,主键是(__) A、为标识表中唯一的实体 B、创建唯一的索引,允许...

    db2数据库入门教程(官方中文版)

    1.9.1 IBM数据工作室(Data Studio)...........................................................................17 1.9.2 DB2 ...

    MySQL5 权威指南第3版中文版_part1

     16.2 示例:删除无效的数据记录(mylibrary)  16.3 CGI示例:图书管理(mylibrary)  16.4 CGI Unicode示例  第17章 Java(JDBC和Connector/J)  17.1 基础知识  17.2 程序设计技巧  第18章 C语言  18.1 ...

    数据库审计系统基本原理与部署方式.pdf

    操作⾏为 内容和描述 内容和描述 ⽤户⾏为 数据库⽤户的登录、注销 数据定义语⾔(DDL)操作 Create、Alter、Drop等创建、修改或者删除数据库对象(表、索引、视图、存储过程、触发器、域等等)的SQL指令 数据操作语...

    数据库原理及应用实验(共6个).zip

    实验1 数据库及数据定义 1、创建一个名为XSCJ的数据库,其初始大小为5MB,最大大小10MB,允许数据库自动增长,增长方式是按10%比例增长;日志文件初始为2MB,最大可增长到5MB,按1MB增长。 2、将以上XSCJ数据库的主...

    SQL技术文摘

    SQLServer删除重复数据记录 文本文件导入导出校验工具[原创] MSSQLServer如何恢复或修复MSSQL数据库的MDF文件 如何删除仅仅第一列相同的记录? 使用联接来查询多个表 SET NOCOUNT { ON | OFF } 说明...

    ASP.NET3.5从入门到精通

    9.4.1 SQL DELETE 数据删除语句 9.4.2 使用Command 对象删除记录 9.4.3 使用DataSet 数据集删除记录 9.5 使用存储过程 9.5.1 存储过程的优点 9.5.2 创建存储过程 9.5.3 调用存储过程 9.6 ASP.NET 数据库操作实例 ...

    MySQL 5权威指南(第3版) 中文版 下载地址

     16.2 示例:删除无效的数据记录(mylibrary)  16.3 CGI示例:图书管理(mylibrary)  16.4 CGI Unicode示例  第17章 Java(JDBC和Connector/J)  17.1 基础知识  17.2 程序设计技巧  第18章 C语言 ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例077 跳过数据输出中指定的记录 111 实例078 执行指定次数的循环 112 2.7 自定义函数 113 实例079 自定义函数截取中文字符串 113 实例080 公告标题的截取 114 实例081 论坛内容的简短输出 116 实例082 自定义函数...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例077 跳过数据输出中指定的记录 111 实例078 执行指定次数的循环 112 2.7 自定义函数 113 实例079 自定义函数截取中文字符串 113 实例080 公告标题的截取 114 实例081 论坛内容的简短输出 116 实例082 自定义函数...

    db2数据库入门官方教程(中文版)

    1.9.1 IBM数据工作室(Data Studio)...........................................................................17 1.9.2 DB2 ...

    ASP.NET 3.5 开发大全11-15

    9.4.1 SQL DELETE数据删除语句 9.4.2 使用Command对象删除记录 9.4.3 使用DataSet数据集删除记录 9.5 使用存储过程 9.5.1 存储过程的优点 9.5.2 创建存储过程 9.5.3 调用存储过程 9.6 ASP.NET数据库操作实例 9.6.1 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例228 简化文件(夹)删除 286 实例229 简化文件(夹)复制 287 实例230 简化文件(夹)排序 288 实例231 简化文件(夹)过滤 289 实例232 简化文件的读写操作 290 10.4 Commons BeanUtils组件简介 291 实例233 ...

Global site tag (gtag.js) - Google Analytics