前提:请用sys用户dba权限登录

1.创建一个表来存储操作日志

  1. create table trig_sql(
  2. LT DATE not null primary key,
  3. SID NUMBER,
  4.   SERIAL# NUMBER,
  5. USERNAME VARCHAR2(30),
  6. OSUSER VARCHAR2(64),
  7. MACHINE VARCHAR2(32),
  8. TERMINAL VARCHAR2(16),
  9. PROGRAM VARCHAR2(64),
  10. SQLTEXT VARCHAR2(2000),
  11. STATUS VARCHAR2(30),
  12. CLIENT_IP VARCHAR2(60),
  13. );

2.创建索引(可能已经自动创建,如果已经创建则忽略此步骤)

  1. create index idx_time on trig_sql (LT);

3.创建触发器

IN_FIRST_PAGE_OTHER:我们要监控的表

  1. create or replace trigger pri_test
  2. after insert or update or delete on IN_FIRST_PAGE_OTHER for each row
  3. DECLARE
  4. PRAGMA AUTONOMOUS_TRANSACTION;
  5. BEGIN
  6. IF inserting THEN
  7. INSERT INTO trig_sql
  8. select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
  9. s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
  10. 'INSERT',
  11. sys_context('userenv','ip_address')
  12. from v$sql q, v$session s
  13. where s.audsid=(select userenv('SESSIONID') from dual)
  14. and s.prev_sql_addr=q.address
  15. AND s.PREV_HASH_VALUE = q.hash_value;
  16. COMMIT;
  17. ELSIF deleting then
  18. INSERT INTO trig_sql
  19. select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
  20. s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
  21. 'DELETE',
  22. sys_context('userenv','ip_address')
  23. from v$sql q, v$session s
  24. where s.audsid=(select userenv('SESSIONID') from dual)
  25. and s.prev_sql_addr=q.address
  26. AND s.PREV_HASH_VALUE = q.hash_value;
  27. COMMIT;
  28. ELSIF updating then
  29. INSERT INTO trig_sql
  30. select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
  31. s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
  32. 'UPDATE',
  33. sys_context('userenv','ip_address')
  34. from v$sql q, v$session s
  35. where s.audsid=(select userenv('SESSIONID') from dual)
  36. and s.prev_sql_addr=q.address
  37. AND s.PREV_HASH_VALUE = q.hash_value;
  38. COMMIT;
  39. END IF;
  40. END;

4.查询监控记录

对要监控的表进行操作后,可以查到日志信息

  1. select t.lt 操作时间,
  2. t.sid 会话唯一标识,
  3. t.serial# 唯一序列号,
  4. t.username 数据库用户,
  5. t.osuser 客户端操作系统用户名,
  6. t.machine 客户端全名,
  7. t.terminal 客户端名,
  8. t.program 客户端应用程序,
  9. t.sqltext SQL文本,
  10. t.status 增删改,
  11. t.client_ip IP地址 from trig_sql t where
  12. to_char(t.lt, 'yyyy-mm-dd hh24:mi:ss')
  13. BETWEEN to_char(TO_DATE('2018-06-01 16:42:10','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')
  14. AND to_char(TO_DATE('2018-06-01 16:42:11','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')

Oracle触发器实现监控某表的CRUD操作的更多相关文章

  1. 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】

    一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...

  2. Oracle language types(语言种类) 表的相关操作 DDL数据定义语言

    数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...

  3. oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中

    有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图, B用户下的t_src_weather 表,如图: 要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据 ...

  4. ORACLE中如何查找定位表最后DML操作的时间小结

    在Oracle数据库中,如何查找,定位一张表最后一次的DML操作的时间呢? 方式有三种,不过都有一些局限性,下面简单的解析.总结一下. 1:使用ORA_ROWSCN伪列获取表最后的DML时间 ORA_ ...

  5. ORACLE 数据库建了非法表后无法操作和删除问题

    问题描述: oracle 用PL/SQL DEVELOPER 可视化建表时,表名没有按照规范,建立一个非法格式的表 ICD-10th-Version (中间有横杆,非法).但是不知道怎么回事却建成功了 ...

  6. 【nodejs】修改了下对股票表进行crud操作的代码

    表是这样的: id是自增长字段,code和name都是255位的varchar. 下面是主角app.js的代码: 'use strict'; var express=require('express' ...

  7. SpringMVC案例1——对User表进行CRUD操作

    ------------------------------------------------------------------web.xml--------------------------- ...

  8. 【Java框架型项目从入门到装逼】第九节 - 数据库建表和CRUD操作

    1.新建学生表 这节课我们来把和数据库以及jdbc相关的内容完成,首先,进行数据库建表.数据库呢,我们采用MySQL数据库,我们可以通过navcat之类的管理工具来轻松建表. 首先,我们得建一个数据库 ...

  9. jdbc笔记(二) 使用PreparedStatement对单表的CRUD操作

    首先声明,本文只给出代码,并不是做教程用,如有不便之处,还请各位见谅. PreparedStatement相较于Statement,概括来说,共有三个优势: 1. 代码的可读性和易维护性:Prepar ...

随机推荐

  1. TCP/IP协议族、版本以及编址机制

    TCP/IP协议族简称TCP/IP.这么命名是因为该协议家族中的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准.TCP/IP提供点对点的链接机制,将数据应该如何封装, ...

  2. 一个java新手配置IIS服务器的血泪史

    接到一个二次开发项目,听说是asp页面,带着不要怂的态度于是接下了. 好嘛按照步骤来 1.了解需求:一个公司内部积分排名类型项目,已经被多次开发,我所需要的就是新增两个页面,一个是分店赛一个是分部赛. ...

  3. Apache Tomcat 8.5 安全配置与高并发优化

    通常我们在生产环境中,Tomcat的默认配置显然不能满足我们的产品需求,所以很多时候都需要对Tomcat的配置进行调优,以下综合我自己的经验来配置 Tomcat 安全与优化情况,如果你有更好的方案,请 ...

  4. 抓猫_KEY

    抓猫 题面如下: [ 题目描述] 流浪猫布满城市的每一个角落, 非常影响市容市貌, 作为城市聘请的抓猫者, 你有一 种捕捉器, 一定可以捕捉到所有走到里面的猫, 更加幸运的是你有一个非常厉害的动物心理 ...

  5. 问题集 - console.log在IE下不可用

    js中添加如下一段代码即可. if(!window.console){ window.console = {}; } if(!window.console.log){ window.console.l ...

  6. python 安装 MySQL-python

    $python >>> import MySQLdb Traceback (most recent call last): File "<stdin>" ...

  7. 聊聊WS-Federation

    本文来自网易云社区 单点登录(Single Sign On),简称为 SSO,目前已经被大家所熟知.简单的说, 就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 举例: 我们 ...

  8. http性能测试点滴

    WeTest 导读 在服务上线之前,性能测试必不可少.本文主要介绍性能测试的流程,需要关注的指标,性能测试工具apache bench的使用,以及常见的坑. 什么是性能测试 性能测试是通过自动化的测试 ...

  9. 【廖雪峰老师python教程】——IO编程

    同步IO 异步IO 最常见的IO——读写文件 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一 ...

  10. 用最简单的MVC模式输出内容

    MVC是模型(model)-视图(view)-控制器(controller)的缩写,它的作用是使代码分离,可维护性高.重用性高 编写Model层: <?php class model{ publ ...