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') 

 

转载于:https://www.cnblogs.com/lm970585581/p/9138050.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用JdbcTemplate实现用户CRUD操作非常简单和高效。JdbcTemplate是Spring框架提供的一个持久化框架,通过对JdbcTemplate进行配置和应用可以实现数据库的访问和操作。 首先,我们需要创建一个User类来示用户的实体,包含用户名、密码、邮箱等属性。然后,在数据库中创建一个用户结构与User类对应。接下来,在Spring配置文件中配置数据源和JdbcTemplate。在配置文件中指定数据源的连接信息,然后将数据源和JdbcTemplate配置为Spring容器的bean。 在代码中,我们可以通过@Autowired注解将JdbcTemplate注入到UserService类中,然后就可以使用JdbcTemplate对用户进行CRUD操作了。例如,要插入一个新用户,可以使用JdbcTemplate的update方法执行SQL插入语句。要删除一个用户,可以使用JdbcTemplate的update方法执行SQL删除语句。要更新一个用户的信息,可以使用JdbcTemplate的update方法执行SQL更新语句。要查询一个用户的信息,可以使用JdbcTemplate的queryForObject方法执行SQL查询语句。 使用JdbcTemplate实现用户CRUD操作具有很多优势。首先,它可以将所有的JDBC操作封装在一个类中,简化了代码的编写。其次,它提供了丰富的方法来执行SQL语句,可以满足各种不同的数据库操作需求。同时,它还支持事务管理,可以保证数据库操作的一致性和完整性。 总的来说,通过使用JdbcTemplate实现用户CRUD操作可以提高代码的可读性和可维护性,同时还可以让开发者更加专注于业务逻辑的实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值