当前位置:  数据库>oracle

Oracle 11g系统级别触发器来跟踪监控drop误操作

    来源: 互联网  发布时间:2017-06-21

    本文导语: 前言: db中有一张表的数据老是紊乱,猜猜是经历过drop、create的数据同步操作,但是现在谁也不知道在哪里操作的,所以准备做一个触发器去记录下是哪个应用服务器那个db账号操作的。 3,系统级别触发器 3.1 触发事件 包括各...

前言:
db中有一张表的数据老是紊乱,猜猜是经历过drop、create的数据同步操作,但是现在谁也不知道在哪里操作的,所以准备做一个触发器去记录下是哪个应用服务器那个db账号操作的。

3,系统级别触发器 3.1 触发事件

包括各种DDL操作以及各种数据库事件,ddl包括create、alter、drop、rename、grant、revoke、audit、noaudit、commit、truncate、analyze、associate statistics、disassociate statistis。触发时间可以before或者after

3.2 建立触发器记录的表
-- Create table
create table Z_TRIG_SYS
(
  lt                    DATE,
  sid                   NUMBER,
  serial#               NUMBER,
  username              VARCHAR2(30),
  oSUSEr                VARCHAR2(64),
  machine               VARCHAR2(32),
  terminal              VARCHAR2(16),
  object_name           VARCHAR2(200),
  ora_sysevent          VARCHAR2(200),
  program               VARCHAR2(64),
  sqltext               VARCHAR2(4000),
  status                VARCHAR2(30),
  client_ip             VARCHAR2(60),
  ora_dbname            VARCHAR2(60),
  ora_client_ip_address VARCHAR2(60)
);

-- Add comments to the columns 
comment on column Z_TRIG_SYS.lt
  is '录入时间';
comment on column Z_TRIG_SYS.sid
  is '当前session的id';
comment on column Z_TRIG_SYS.serial#
  is 'sid的序列号,顺序自增';
comment on column Z_TRIG_SYS.username
  is '登录的用户名';
comment on column Z_TRIG_SYS.osuser
  is '操作者的os系统';
comment on column Z_TRIG_SYS.machine
  is '操作者的机器名称';
comment on column Z_TRIG_SYS.object_name
  is '操作对象名称';
comment on column Z_TRIG_SYS.ora_sysevent
  is '操作事件';
comment on column Z_TRIG_SYS.sqltext
  is '执行的sql片段';
comment on column Z_TRIG_SYS.client_ip
  is '客户端ip';
comment on column Z_TRIG_SYS.ora_dbname
  is '执行的数据库';
comment on column Z_TRIG_SYS.ora_client_ip_address
  is '客户端ip地址';
3.3 建立system级别触发器
create or replace trigger trig_system
after drop on database
begin
  if ora_login_user!='system' then
     insert into z_trig_sys(
         lt                    ,
        sid                   ,
        serial#               ,
        username              ,
        osuser                ,
        machine               ,
        terminal              ,
        object_name           ,
        ora_sysevent          ,
        program               ,
        sqltext               ,
        status                ,
        client_ip             ,
        ora_dbname            ,
        ora_client_ip_address )

        select sysdate,
               s.SID,
                  s.SERIAL#,
                  s.USERNAME,
                  s.OSUSER,
               s.MACHINE,
               s.TERMINAL,
               s.PROGRAM,
               ora_dict_obj_name,
               ora_sysevent,
               'drop object on database',
               '',
              sys_context('userenv','ip_address'),
              ora_database_name,
              ora_client_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;
           -- AND sys_context('userenv','ip_address') !='192.168.180.106';

   end if;
end trig_system;
3.4,调试报错

ORA-00604: error occurred at recursive SQL level 1
ORA-04092: cannot COMMIT in a trigger

去掉触发器中的commit;

4,查看监控结果,如下所示:
SQL> create table zz_back(id number);
Table created
SQL> insert into zz_back values(1);
1 row inserted
SQL> commit;
Commit complete
SQL> drop table zz_back;
Table dropped
SQL> select * from z_trig_sys;
LT                 SID    SERIAL# USERNAME                       OSUSER                                                           MACHINE                          TERMINAL         OBJECT_NAME                                                                      ORA_SYSEVENT                                                                     PROGRAM                                                          SQLTEXT                                                                          STATUS                         CLIENT_IP                                                    ORA_DBNAME                                                   ORA_CLIENT_IP_ADDRESS
----------- ---------- ---------- ------------------------------ ---------------------------------------------------------------- -------------------------------- ---------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------------------------------------------------------------- -------------------------------------------------------------------------------- ------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------
2015/11/4 1        787      63023 POWERDESK                      Administrator                                                    WORKGROUPWIN-TIMMAN             WIN-TIMMAN       plsqldev.exe                                                                     ZZ_BACK                                                                          DROP                                                             drop object on database                                                                                         192.168.120.181                                              POWERDES                                                     

SQL> 

看到有记录了,但是有一些没有取到值,比如ora_client_ip_address等,有待继续完善


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 详解如何应用改变跟踪技术加速Oracle递增备份
  • Oracle案例:分析10053跟踪文件
  • 详析Oracle跟踪事件:set events
  • 在Oracle中监控和跟踪索引使用情况
  • 在Oracle中跟踪某几个用户的SQL
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • Oracle 10g和Oracle 11g网格技术介绍 iis7站长之家
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3