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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Vue安装及环境配置、开发工具

    Vue安装及环境配置、开发工具vue安装环境搭建提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录vue安装环境搭建前言一、node.js安装和配置1.下载安装node.js2.配置默认安装目录和缓存日志目录3.node.js环境配置4.配置淘宝镜像源二、使用步骤1.引入库2.读入数据总结前言vue前端框架的环境搭建一、node.js安装和配置1.下载安装node.js官网下载最新版本:https://nodejs.org/en/download/可以下载安装包(安装教程见:http

    2022年6月11日
    56
  • ALV中动态内表+行转化为列–老白

    ALV中动态内表+行转化为列–老白

    2021年8月13日
    51
  • HTML 下拉列表框<select>

    HTML 下拉列表框<select>newdocument 籍贯A 北京 河北 上海 籍贯B 海淀 东城 西城 朝阳

    2025年8月18日
    3
  • js正則表達式语法

    js正則表達式语法

    2021年12月10日
    47
  • Java 中位数_中位数众数平均数三者关系

    Java 中位数_中位数众数平均数三者关系列举一些中位数和众数的常见问题和解法1.众数一个长度为$N$的列表,出现次数大于$\left\lfloorN/2\right\rfloor$的数为这个列表的众数。1.1摩尔投票算法摩尔投票算法(Boyer-Mooremajorityvotealgorithm)的思路类似一个大乱斗,遇到不相同的数就抵消掉。维护两个变量:major和count,major是众数的可能值,count是…

    2025年12月13日
    5
  • java.lang.AbstractMethodError异常

    java.lang.AbstractMethodError异常前言:今天APP在客户华为Android10版本手机上闪退,报如下异常,10以下版本无任何问题,异常信息也没有自己APP报错的堆栈信息,无法直接定位到是那行代码导致的问题,苦逼了半天,梳理思路,终于解决了。分析:由于APP没有做Q版本适配,难道不兼容吗?于是安装Q版模拟器进行复现问题,直接运行安装发现没有闪退,难道是只有在华为手机上才出现问题吗?为了验证这个观点,就用客户相同的安装包进行…

    2022年6月2日
    35

发表回复

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

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