Oracle 11G 监控单张表的增删改操作
线上oracle数据库有张表的数据有些乱,根据应用db的log和应用的log也没有检查出来谁修改了,所以决定把这张单表做个详细的insert、update、delete监控。
一:使用数据库自带的审计功能
1,查看审计功能是否启动
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /oracle/app/oracle/admin/power
des/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
SQL>
没有开启审计功能,需要自己去开启一下。
2,开启审计功能
需要用sysdba,注意audit_trail要为DB_EXTENDED才记录执行的具体语句...
alter system set audit_sys_operations=TRUE scope=spfile;
SQL> alter system set audit_sys_operations=TRUE scope=spfile;
System altered.
SQL>
再次查看审计功能是否启动
SQL> show parameter audit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /oracle/app/oracle/admin/power
des/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE
SQL>
需要重启实例才能看到状态。
3,关闭审计功能
SQL> alter system set audit_trail = none scope=spfile;
4,针对某张表的审计功能
AUDIT UPDATE,DELETE,INSERT ON T_TEST by access;
5,对该张表进行各种DML操作测试
6,查询审计的信息
select EXTENDED_TIMESTAMP,SESSION_ID,SQL_TEXT from DBA_COMMON_AUDIT_TRAIL ORDER BY EXTENDED_TIMESTAMP DESC;
二,采用触发器
看到线上数据库load比以前增加蛮多的,为了单张表的监控开启审计比较消耗资源,有些不划算,所以可以采用另外一种办法来做,就是在表上建立触发器。
1,先建立建立测试表:
查看已经建立的表 aaa_test与trig_sql。
SQL> describe plas.aaa_test;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER
NAME VARCHAR2(100)
LOGIN_TIME DATE
SQL>
SQL> describe plas.trig_sql;
Name Null? Type
----------------------------------------- -------- ----------------------------
LT DATE
SID NUMBER
SERIAL# NUMBER
USERNAME VARCHAR2(30)
OSUSER VARCHAR2(64)
MACHINE VARCHAR2(32)
TERMINAL VARCHAR2(16)
PROGRAM VARCHAR2(64)
SQLTEXT VARCHAR2(2000)
STATUS VARCHAR2(30)
CLIENT_IP VARCHAR2(60)
SQL>
2,并且在 trig_sql表上面添加索引:
create index idx_time on plas.trig_sql (LT);
3,建立触发器
create or replace trigger pri_test
after insert or update or delete on plas.aaa_test
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF inserting THEN
INSERT INTO plas.trig_sql
select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
'INSERT',
sys_context('userenv','ip_address')
from v$sql q, v$session s
where s.audsid=(select userenv('SESSIONID') from dual)
and s.prev_sql_addr=q.address
AND s.PREV_HASH_VALUE = q.hash_value;
COMMIT;
ELSIF deleting then
INSERT INTO plas.trig_sql
select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
'DELETE',
sys_context('userenv','ip_address')
from v$sql q, v$session s
where s.audsid=(select userenv('SESSIONID') from dual)
and s.prev_sql_addr=q.address
AND s.PREV_HASH_VALUE = q.hash_value;
COMMIT;
ELSIF updating then
INSERT INTO plas.trig_sql
select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
'UPDATE',
sys_context('userenv','ip_address')
from v$sql q, v$session s
where s.audsid=(select userenv('SESSIONID') from dual)
and s.prev_sql_addr=q.address
AND s.PREV_HASH_VALUE = q.hash_value;
COMMIT;
END IF;
END;
4,开始进行数据操作测试:
insert into plas.aaa_test1 select 2,'tom',sysdate from dual;
update plas.aaa_test1 a set a.name='tom_up' where a.id=2;
update plas.aaa_test a set a.name='tom_up1' where a.id=1;
......
commit;
5,去查看表记录,会发现如下
SQL> select * from plas.trig_sql;
LT SID SERIAL# USERNAME OSUSER MACHINE TERMINAL PROGRAM SQLTEXT STATUS CLIENT_IP
----------- ---------- ---------- ------------------------------ ---------------------------------------------------------------- -------------------------------- ---------------- ---------------------------------------------------------------- -------------------------------------------------------------------------------- ------------------------------ ------------------------------------------------------------
2014/10/29 1273 33297 POWERDESK Administrator WORKGROUP\WIN-18P5Q5AREH9 WIN-18P5Q5AREH9 plsqldev.exe begin :id := sys.dbms_transaction.local_transaction_id; end; INSERT 192.168.170.180
2014/10/29 1273 33297 POWERDESK Administrator WORKGROUP\WIN-18P5Q5AREH9 WIN-18P5Q5AREH9 plsqldev.exe begin :id := sys.dbms_transaction.local_transaction_id; end; DELETE 192.168.170.180
2014/10/29 1273 33297 POWERDESK Administrator WORKGROUP\WIN-18P5Q5AREH9 WIN-18P5Q5AREH9 plsqldev.exe begin :id := sys.dbms_transaction.local_transaction_id; end; INSERT 192.168.170.180
2014/10/29 1352 40155 POWERDESK Administrator WORKGROUP\WIN-18P5Q5AREH9 WIN-18P5Q5AREH9 plsqldev.exe begin :id := sys.dbms_transaction.local_transaction_id; end; INSERT 192.168.170.180
2014/10/29 1273 33297 POWERDESK Administrator WORKGROUP\WIN-18P5Q5AREH9 WIN-18P5Q5AREH9 plsqldev.exe begin :id := sys.dbms_transaction.local_transaction_id; end; UPDATE 192.168.170.180
2014/10/29 1273 33297 POWERDESK Administrator WORKGROUP\WIN-18P5Q5AREH9 WIN-18P5Q5AREH9 plsqldev.exe begin :id := sys.dbms_transaction.local_transaction_id; end; UPDATE 192.168.170.110
2014/10/29 25 39527 SYS oracle localhost.localdomain pts/1 sqlplus@localhost.localdomain (TNS V1-V3) update plas.aaa_test a set a.name='tom_update' where id=2 UPDATE
2014/10/29 25 39527 SYS oracle localhost.localdomain pts/1 sqlplus@localhost.localdomain (TNS V1-V3) update plas.aaa_test a set a.name='tom_update3' where id=3 UPDATE
8 rows selected
SQL>
PS:看到SQLTEXT有些都为 begin :id := sys.dbms_transaction.local_transaction_id; end; 的,是因为我执行的insert、delete、update语句在plsqldev.exe客户端执行的,所以没有记录下执行的sql语句。而有些通过sqlplus@localhost.localdomain (TNS V1-V3)客户端连接执行的,会记录下执行过的update语句。
统计下当前都有哪些用户以及ip执行了dml操作。
SQL> select username,client_ip from plas.trig_sql group by username,client_ip;
USERNAME CLIENT_IP
------------------------------ ------------------------------------------------------------
PLAS 192.168.170.180
DESKER 192.168.170.110
SQL>
----------------------------------------------------------------------------------------------------------------
原博客地址: http://blog.itpub.net/26230597/viewspace-1312184/
原作者:黄杉 (mchdba)
----------------------------------------------------------------------------------------------------------------
参考文章:
http://blog.csdn.net/edcvf3/article/details/7865688
http://blog.itpub.net/29320885/viewspace-1158915/
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26230597/viewspace-1316305/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26230597/viewspace-1316305/
Oracle 11G 监控单张表的增删改操作相关推荐
- PHP操作MySQL数据库(连接、增删改操作)
MySQL 是跟 PHP 配套使用的最流行的开源数据库系统,我们知道MySQL是PHP的最佳搭档,下面是系统的总结PHP与MySQL联合使用的方法.主要是使用MySQL扩展,下面就通过归纳总结来提升. ...
- spool命令、创建一个表,创建并且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站
1.spool 命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创 ...
- spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站...
1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建 ...
- oracle学习笔记系列------oracle 基本操作之表的增删改查
--创建一个表 CREATE TABLE employee_souvc(id NUMBER(4),name VARCHAR2(20),gender CHAR(1),birth DATE,salary ...
- R操作MySQL数据库创建表、删除表、增删改查(CRUD)
R操作MySQL数据库创建表.删除表.增删改查(CRUD) 关系数据中的数据是按照一定范式去存储的.当我们需要非常高级和复杂的Sql查询就可以使用关系数据库的数据资产.不光java和python可以容 ...
- Oracle 原理: 视图,对视图进行增删改操作
Oracle的视图和SQLServer的视图基本一样. 视图,是一个虚拟的表,不会给视图分配存储空间.视图的建立需要依赖于单个或多个普通表,被依赖的普通表就成为"基表".可以就像 ...
- Oracle数据库的增删改操作介绍
前面的博文介绍了Oracle的简单查询操作,博客地址:http://blog.csdn.net/weixin_36380516/article/details/65935879 这里再对Oracle的 ...
- MySql之表的增删改查
day03 表的增删改查 回顾讲解的内容: 注意:DQL:Data Query Language 数据查询语言 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QLmaY ...
- 极其方便的使用Mybatis单表的增删改查
[活动]Python创意编程活动开始啦!!! CSDN日报20170427 --<如何在没有实际项目经验的情况下找到工作> 深入浅出,带你学习 Unity 目录(?)[ ...
最新文章
- Linux平台Oracle安装脚本
- 04需求工程软件建模与分析阅读笔记之四
- 数据湖之iceberg系列(四)iceberg-spark编程
- prometheus 发送恢复 值_Prometheus监控神器-Rules篇
- golang websocket conn.close关闭错误_Websockets 与在golang中的应用
- 关“视觉神经系统是怎么形成的?”的思考
- Android 虚拟机与真机调试配置
- horizon服务主要模块_openstack七大模块概述
- 【慢慢学Android】:2.SharedPreferences对数据的存储
- 解决win10 蓝牙设备只能配对无法连接 ,并且删除设备无效的问题
- 开课吧Java课堂:如何使用迭代函数
- Android通过webservice连接SQLServer 详细教程(数据库+服务器+客户端)
- QQ IDKey生成--一键加群
- 笔记本电脑蓝屏代码stop:0x0000007b(0xb84d3524,0xc0000034,0x00000000,0x00000000)
- 我国数学家丁小平先生在微积分研究领域所取得的成就
- 看似“冰山美人”的弦图竟如此平易近人!
- speedoffice(Word)如何添加批注
- 关于OpenGL的天空盒的理解
- MongoDB 入门教程实战学习笔记-31-mongo 聚合查询管道 Aggregation Pipieline
- 深度学习:神经络的向播和反传播算法导
热门文章
- tinymce直接粘贴图片实现
- NAT 2 - 利用Rotary NAT实现TCP流量负载均衡 [译] + GNS3实现
- 管晓宏:会吹长笛的院士
- js中slice()与splice()的使用与比较,直接看例子记得牢
- 第一性原理态密度计算的基本原理和应用场景
- 德温特专利耦合与直接引用分析视频教程完整版
- 太极root权限_太极下载无需root
- ad禁用计算机账户命令,AD-禁用账户命令 Disable-ADAccount
- python实现秒杀系统_双十一买买买,教你用Python实现秒杀系统
- SAP中五个报废率的计算逻辑