使用oracle的審計后,可以從系統察看到那些sql,但不是能捕獲的。

解决方案 »

  1.   

    要它没有多大意思,
    还是给你看一个参考吧。select osuser,username,sql_text
     from  v$session a,v$sqltext b
     where a.sql_address=b.address;
      

  2.   

    修改数据库INIT.ORA文件中的audit_trail = true(注意把它前面的注释符#去掉)
    重新启动数据库
    DOS下执行
    SVRMGRL
    CONNECT INTERNAL/ORACLE
    SHUTDOWN IMMEDIATE
    STARTUP
    然后用DBA用户登陆SQL*PLUS
    CONNECT SYSTEM/MANAGER
    创建一个审计:
    SQL> audit create table by access whenever successful;审计已成功。
    SQL> select sessionid SID,userid USID,action# ACT,obj$name OBNAME,TIMESTAMP# TIME FROM SYS.AUD$; SID   USID   ACT   OBNAME   TIME
    -----  ------ ---- -------  ------
    202   SYSTEM    1     A     2002-08-24 00:59:01说明审计已经启动。
      

  3.   

    审计一般不开启,占系统资源
    试试通过提取v$sqltext的sql_text字段,分析一下试试
    如:
    select count(1) from v$sqltext where instr(sql_text,'insert into tbname')>0 or
    instr(sql_text,'update tbname')>0 or instr(sql_text,'delete from tbname')>0;
      

  4.   

    可以这样使用,在WIN2000SERVER,Oracle816上测试通过,如果不能通过请注意用户的权限。CREATE OR REPLACE TRIGGER TRG_GET_SQL 
    AFTER INSERT OR DELETE OR UPDATE ON "BUSINESS"."TB1" declare
      str varchar2(500);
    begin
       
      select sql_text into str from sys.gv_$open_cursor 
      where sid in (select sid from sys.gv_$session where status='ACTIVE')
      and upper(substr(sql_text,1,1))<>'S';   insert into tb2(col)values(str);
    end;
      

  5.   

    上面的"BUSINESS"."TB1" 应该为TB1