我需要对表 table_A 进行跟踪,想知道有谁,在什么时间对该表做什么操作。请问该触发器如何写?create or replace tirgger tri_table_A
before delete or insert table_a
begin ???????????????? 如何写?谢谢啊。
包括 当前 删除、插入 的SQL语句,客户端IP地址, 登陆oracle用户名,程序名,日期。
end;谢谢啊。
before delete or insert table_a
begin ???????????????? 如何写?谢谢啊。
包括 当前 删除、插入 的SQL语句,客户端IP地址, 登陆oracle用户名,程序名,日期。
end;谢谢啊。
解决方案 »
- 一个表空间exp出来,为啥有的表里的中文是??,有的确很正常?
- sqlldr 可以用来给db link的table 装载数据吗?
- 用sql如何取得这样的数据
- user_source中沒有值,如何批量保存所有sp呢?
- 郁闷的事 过程跑了很久 最后不见了!死不见尸体活不见人
- Oracle不可用怎么解决?
- 老问题:怎样从oracle7.3升级到oracle9i
- 以下结果为何不对 ? 求救
- oracle 还是sql server
- 国内哪里有高速下载Oracle9i for NT的网站?请告知网址!从Oracle公司下载太慢了!!!
- 求把数据由SYSTEM表空间转移到USERS表空间的方案
- RMAN 备份方案
可以从v$session ,v$session_connect_info视图中查寻
当前 删除、插入 的SQL语句恐怕有点难,v$sqltext,v$sql_workarea中的sql都是没有变量值的
把关键的数据列的修改前后的数据连同主键存到审核的表里是比较可行的
问题时 当前 删除、插入 的SQL语句 我不能确定,比较郁闷。哈哈
你能帮忙想出来?
怎样用trigger + logminner, 把执行删除表或记录的 sql语句和计算机名,IP地址 找出来...翻不到啦~ 帖子太多
在用应用程序做就容易多了,变量邦定不是问题,能取到删除、插入 的SQL语句得精确值
先判断instr(sql_text,'your_table_name')
这就判断使操作你的表了
然后if instr(lower(sql_text),'insert')>0插入
等等。不过truncate不知道能不能记下来……
AFIC(AFIC) ,你的这个办法好像可以,我现在想看看有没有更直接的办法。
SID NUMBER(16),
SERIAL NUMBER(16),
MACHINE VARCHAR2(64) ,
OSUSER VARCHAR2(30),
USERNAME VARCHAR2(30),
PROGRAM VARCHAR2(48),
LOGINTIME DATE
SQL_TEXT VARCHAR2(200)
);
在trigger里写:
declare
LPRG VARCHAR2(48);
LUSERNAME varchar2(30);
LOSUSER varchar2(30);
LMACHINE varchar2(64);
LSID pls_integer;
LSERIAL pls_integer;
LSQLTEXT varchar2(200);
begindbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));select a.sid,a.serial#,a.machine,a.osuser,a.program,a.username, b.sql_text
into LSID,LSERIAL,LMACHINE,LOSUSER,LPRG,LUSERNAME,LSQLTEXT from v$session a,v$sql b
where sid=(select sid from v$mystat where rownum<2) and a.sql_hash_value=b.hash_value;insert into log_table(sid,serial,machine,osuser,username,program,logintime,sql_text)
values (LSID,LSERIAL,LMACHINE,LOSUSER,LUSERNAME,LPRG,sysdate,LSQLTEXT);
end;在log_table里查相关信息,ip地址在v$session里的client_info里查