Oracle触发器实现监控某表的CRUD操作
前提:请用sys用户dba权限登录
1.创建一个表来存储操作日志
- create table trig_sql(
- LT DATE not null primary key,
- 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),
- );
2.创建索引(可能已经自动创建,如果已经创建则忽略此步骤)
- create index idx_time on trig_sql (LT);
3.创建触发器
IN_FIRST_PAGE_OTHER:我们要监控的表
- create or replace trigger pri_test
- after insert or update or delete on IN_FIRST_PAGE_OTHER for each row
- DECLARE
- PRAGMA AUTONOMOUS_TRANSACTION;
- BEGIN
- IF inserting THEN
- INSERT INTO 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 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 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.查询监控记录
对要监控的表进行操作后,可以查到日志信息
- select t.lt 操作时间,
- t.sid 会话唯一标识,
- t.serial# 唯一序列号,
- t.username 数据库用户,
- t.osuser 客户端操作系统用户名,
- t.machine 客户端全名,
- t.terminal 客户端名,
- t.program 客户端应用程序,
- t.sqltext SQL文本,
- t.status 增删改,
- t.client_ip IP地址 from trig_sql t where
- to_char(t.lt, 'yyyy-mm-dd hh24:mi:ss')
- BETWEEN to_char(TO_DATE('2018-06-01 16:42:10','yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')
- 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操作的更多相关文章
- 【Java EE 学习 44】【Hibernate学习第一天】【Hibernate对单表的CRUD操作】
一.Hibernate简介 1.hibernate是对jdbc的二次开发 2.jdbc没有缓存机制,但是hibernate有. 3.hibernate的有点和缺点 (1)优点:有缓存,而且是二级缓存: ...
- Oracle language types(语言种类) 表的相关操作 DDL数据定义语言
数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...
- oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中
有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图, B用户下的t_src_weather 表,如图: 要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据 ...
- ORACLE中如何查找定位表最后DML操作的时间小结
在Oracle数据库中,如何查找,定位一张表最后一次的DML操作的时间呢? 方式有三种,不过都有一些局限性,下面简单的解析.总结一下. 1:使用ORA_ROWSCN伪列获取表最后的DML时间 ORA_ ...
- ORACLE 数据库建了非法表后无法操作和删除问题
问题描述: oracle 用PL/SQL DEVELOPER 可视化建表时,表名没有按照规范,建立一个非法格式的表 ICD-10th-Version (中间有横杆,非法).但是不知道怎么回事却建成功了 ...
- 【nodejs】修改了下对股票表进行crud操作的代码
表是这样的: id是自增长字段,code和name都是255位的varchar. 下面是主角app.js的代码: 'use strict'; var express=require('express' ...
- SpringMVC案例1——对User表进行CRUD操作
------------------------------------------------------------------web.xml--------------------------- ...
- 【Java框架型项目从入门到装逼】第九节 - 数据库建表和CRUD操作
1.新建学生表 这节课我们来把和数据库以及jdbc相关的内容完成,首先,进行数据库建表.数据库呢,我们采用MySQL数据库,我们可以通过navcat之类的管理工具来轻松建表. 首先,我们得建一个数据库 ...
- jdbc笔记(二) 使用PreparedStatement对单表的CRUD操作
首先声明,本文只给出代码,并不是做教程用,如有不便之处,还请各位见谅. PreparedStatement相较于Statement,概括来说,共有三个优势: 1. 代码的可读性和易维护性:Prepar ...
随机推荐
- TCP/IP协议族、版本以及编址机制
TCP/IP协议族简称TCP/IP.这么命名是因为该协议家族中的两个核心协议:TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准.TCP/IP提供点对点的链接机制,将数据应该如何封装, ...
- 一个java新手配置IIS服务器的血泪史
接到一个二次开发项目,听说是asp页面,带着不要怂的态度于是接下了. 好嘛按照步骤来 1.了解需求:一个公司内部积分排名类型项目,已经被多次开发,我所需要的就是新增两个页面,一个是分店赛一个是分部赛. ...
- Apache Tomcat 8.5 安全配置与高并发优化
通常我们在生产环境中,Tomcat的默认配置显然不能满足我们的产品需求,所以很多时候都需要对Tomcat的配置进行调优,以下综合我自己的经验来配置 Tomcat 安全与优化情况,如果你有更好的方案,请 ...
- 抓猫_KEY
抓猫 题面如下: [ 题目描述] 流浪猫布满城市的每一个角落, 非常影响市容市貌, 作为城市聘请的抓猫者, 你有一 种捕捉器, 一定可以捕捉到所有走到里面的猫, 更加幸运的是你有一个非常厉害的动物心理 ...
- 问题集 - console.log在IE下不可用
js中添加如下一段代码即可. if(!window.console){ window.console = {}; } if(!window.console.log){ window.console.l ...
- python 安装 MySQL-python
$python >>> import MySQLdb Traceback (most recent call last): File "<stdin>" ...
- 聊聊WS-Federation
本文来自网易云社区 单点登录(Single Sign On),简称为 SSO,目前已经被大家所熟知.简单的说, 就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 举例: 我们 ...
- http性能测试点滴
WeTest 导读 在服务上线之前,性能测试必不可少.本文主要介绍性能测试的流程,需要关注的指标,性能测试工具apache bench的使用,以及常见的坑. 什么是性能测试 性能测试是通过自动化的测试 ...
- 【廖雪峰老师python教程】——IO编程
同步IO 异步IO 最常见的IO——读写文件 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一 ...
- 用最简单的MVC模式输出内容
MVC是模型(model)-视图(view)-控制器(controller)的缩写,它的作用是使代码分离,可维护性高.重用性高 编写Model层: <?php class model{ publ ...