Oracle 11G CRUD操作监控单个表

Oracle 11G CRUD操作监控单个表

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

前言:
    线上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语句。


6。统计下当前都有哪些用户以及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> 


Oracle 11G CRUD操作监控单个表—————————————————————————————————————-

<版权全部,文章同意转载。但必须以链接方式注明源地址,否则追究法律责任!>
原博客地址:   http://blog.itpub.net/26230597/viewspace-1312184/
原作者:黄杉 (mchdba)

Oracle 11G CRUD操作监控单个表—————————————————————————————————————-


參考文章:
http://blog.csdn.net/edcvf3/article/details/7865688

http://blog.itpub.net/29320885/viewspace-1158915/


版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117689.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月1日 下午10:00
下一篇 2022年1月1日 下午11:00


相关推荐

  • 单调队列java_单调队列&单调栈

    单调队列java_单调队列&单调栈单调队列例题:Poj2823给定一个数列,从左至右输出每个长度为m的数列段内的最小数和最大数。数列长度:N<=106,m<=N对于单调队列,我们这样子来定义:1、维护区间最值2、去除冗杂状态如上题,区间中的两个元素a[i],a[j](假设现在再求最大值)若j>i且a[j]>=a[i],a[j]比a[i]还大而且还在后面(目前a[j]留在队列肯定比a[i]有用,因为你…

    2022年6月25日
    25
  • encoder和decoder的区别_decode作用

    encoder和decoder的区别_decode作用I’veneverbeensurethatIunderstandthedifferencebetweenstr/unicodedecodeandencode.Iknowthatstr().decode()isforwhenyouhaveastringofbytesthatyouknowhasacertaincharacterenco…

    2022年10月6日
    7
  • emgucv教程(iis配置步骤)

    首先感谢qq群512782650,这是一个Emgucv爱好者创立的群,里面确实有许多爱好者。这篇博客旨在教学Emgucv3.0的安装与配置。环境:vs2015+Emgucv3.0EmguCv简介: EmguCV是.NET平台下对OpenCV图像处理库的封装。也就是OpenCV的.NET版。它运行在.NET兼容的编程语言下调用OpenCV的函数,

    2022年4月13日
    79
  • python读取tiff文件_python+tifffile之tiff文件读写方式

    python读取tiff文件_python+tifffile之tiff文件读写方式背景使用 python 操作一批同样分辨率的图片 合并为 tiff 格式的文件 由于 opencv 主要用于读取单帧的 tiff 文件 对多帧的文件支持并不好 通过搜索发现了两个比较有用的包 TiffCapture 和 tifffile 两者都可用 pip 安装 其中前者主要用于读取 tiff 文件 后者可读可写 最终选择 tifffile 来合成 tiff 图片文件 安装 tifffilepipi 原理

    2026年3月18日
    2
  • SVN下载安装及使用教程「建议收藏」

    SVN下载安装及使用教程「建议收藏」SVN简介:为什么要使用SVN?程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。Subversion是什么?

    2022年7月1日
    32
  • PreferenceActivity(一)

    PreferenceActivity(一)br 为了引入这个概念首先从需求说起即 现有某 Activity 专门用于手机属性设置那么应该如何做呢 br 根据已学知识很快一个念头闪过即 Activity Preference 组合前者用于界面构建后者用于设置数据存放 nbsp 其实这是正确的但是这会比较繁琐因为每个设置选项都要建立与其对应的 Preference 所以 nbsp 现在有更好的选择了那就是本文的主角 PreferenceAc 从名字应该可以看出其实 Activity 与 Perference 的混合

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号