oracle怎么捕获表上的DML语句(不包括select)语句)

Posted fanweisheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle怎么捕获表上的DML语句(不包括select)语句)相关的知识,希望对你有一定的参考价值。

可以采用dml触发器,如

  CREATE OR REPLACE TRIGGER tr_capt_sql

  BEFORE DELETE OR INSERT OR UPDATE

  ON manager.test

  DECLARE

  sql_text ora_name_list_t;

  state_sql capt$sql.sql_text%TYPE;

  BEGIN

  FOR i IN 1..ora_sql_txt(sql_text) LOOP

  state_sql := state_sql || sql_text(i);

  END LOOP;

  INSERT INTO capt$sql(login_user,capt_time,ip_address,audsid,owner,table_name,sql_text)

  VALUES(ora_login_user,sysdate,sys_context(‘USERENV‘,‘IP_ADDRESS‘),

  userenv(‘SESSIONID‘),‘MANAGER‘,‘TEST‘,state_sql);

  EXCEPTION

  WHEN OTHERS THEN

  sp_write_log(‘Capture DML Exception:‘||SQLERRM);

  END tr_capt_sql;

  在创建以上触发器时要注意几点

  1、必须创建一个capt$sql的表,用来记录ddl的记录

2、sp_write_log原本是一个写日志的过程,可以置换为自己的需要,如null跳过。

以上是关于oracle怎么捕获表上的DML语句(不包括select)语句)的主要内容,如果未能解决你的问题,请参考以下文章

oracle 看报错日志怎么看

oracle 事务

我如何审计特定用户在 oracle 中特定表上的语句

Oracle_DML

5.windows-oracle实战第五课 --事务函数

oracle---触发器