如何监控数据库的操作情况

发表于:2014-6-05 10:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:yangfei86    来源:51Testing软件测试网采编

  最近数据库中莫名其妙的丢失了一些订单的数据,为了找出到底是什么原因,所以创建了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;
/
  这样就可以,简单的记录下什么东西在偷偷的删数据了。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号