如何监控数据库的操作情况
作者:网络转载 发布时间:[ 2014/6/5 10:55:49 ] 推荐标签:数据库
近数据库中莫名其妙的丢失了一些订单的数据,为了找出到底是什么原因,所以创建了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;
/
|
这样可以,简单的记录下什么东西在偷偷的删数据了。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
在测试数据库性能时,需要注意哪些方面的内容?测试管理工具TC数据库报错的原因有哪些?怎么解决?数据库的三大范式以及五大约束编程常用的几种时间戳转换(java .net 数据库)优化mysql数据库的几个步骤数据库并行读取和写入之Python实现深入理解数据库(DB2)缓冲池(BufferPool)国内三大云数据库测试对比预警即预防:6大常见数据库安全漏洞数据库规划、设计与管理数据库-事务的概念SQL Server修改数据库物理文件存在位置使用PHP与SQL搭建可搜索的加密数据库用Python写一个NoSQL数据库详述 SQL 中的数据库操作详述 SQL 中的数据库操作Java面试准备:数据库MySQL性能优化

sales@spasvo.com