近数据库中莫名其妙的丢失了一些订单的数据,为了找出到底是什么原因,所以创建了oracle的一个触发器,记录数据库***数据的一些情况,我相信应该有很多朋友都有这种需求,但是不知道具体如何做,这里我跟大家分享一下。
  一、建表。

 

create table aa as
select a.SID,
a.SERIAL#,
a.SCHEMANAME   数据库用户名,
a.STATUS       状态,
a.OSUSER       系统登陆用户,
a.MACHINE      连接数据库的机器名,
sys_context('userenv', 'ip_address')   登陆用户的IP,
a.TERMINAL      登陆用户所用终端,
a.PROGRAM       连接数据库的程序,
a.MODULE        功能模块,
a.TYPE          连接类型,
a.SQL_ID        用户执行的SQL_ID,
a.LOGON_TIME    用户登陆时间,
B.SQL_TEXT   SQL语句,
B.SQL_FULLTEXT    完整的sql语句,
SYSDATE           记录时间
from v$session a left join v$sqlarea b on A.SQL_ID=B.SQL_ID ;

  二、建触发器

 

CREATE OR REPLACE TRIGGER jiankong_ordertickets
after delete  ON ORDERTICKETS    FOR EACH ROW
BEGIN
insert into deletejiankong
select a.SID,
a.SERIAL#,
a.SCHEMANAME   数据库用户名,
a.STATUS       状态,
a.OSUSER       系统登陆用户,
a.MACHINE      连接数据库的机器名,
sys_context('userenv', 'ip_address')   登陆用户的IP,
a.TERMINAL      登陆用户所用终端,
a.PROGRAM       连接数据库的程序,
a.MODULE        功能模块,
a.TYPE          连接类型,
a.SQL_ID        用户执行的SQL_ID,
a.LOGON_TIME    用户登陆时间,
B.SQL_TEXT   SQL语句,
B.SQL_FULLTEXT    完整的sql语句,
SYSDATE           记录时间
from v$session a left join v$sqlarea b on A.SQL_ID=B.SQL_ID
where a.TYPE='USER'
and length(a.SQL_ID) >0
and (B.SQL_TEXT like 'delete%ordertickets%'  OR  B.SQL_TEXT like 'DELETE%ordertickets%'  or B.SQL_TEXT like 'delete%ORDERTICKETS%'   OR   B.SQL_TEXT like 'DELETE%ORDERTICKETS%'  );  --注意:这个关键字的大小写一定要注意,大小写不一样是不会起作用的。
END;
/

  这样可以,简单的记录下什么东西在偷偷的删数据了。