我们一个系统是以ORACLE作的后台数据库.现在有一个需求,就是要将某一个用户对这个数据库的所有操作用SQL语句记录下来。然后到另一个数据库中去执行,请问各位大侠ORACLE有没有提供什么工具或好的方法用于记录这些操作。

解决方案 »

  1.   

    设置 sql_trace= true ,能将一个用户的操作记录下来。
      

  2.   


    以下内容来自于网络.你可以根据这个逻辑内容,写一个user 的trigger,来抓取用户的语句. 另外,你要考虑你的用户只能做dml么?还是有ddl? 这就决定了要建一个什么类型的trigger了.oracle9i 怎样自动捕获DML 语句
    SQL> desc t1
    Name Null? Type
    ----------------------------------------------------- -------- ------------------------------------
    A NUMBERSQL> desc t_sql
    Name Null? Type
    ----------------------------------------------------- -------- ------------------------------------
    USERNAME VARCHAR2(30)
    CLIENT_IP VARCHAR2(20)
    SQL_TEXT VARCHAR2(4000)
    TABLE_NAME VARCHAR2(30)
    OWNER VARCHAR2(30)SQL> create or replace trigger capt_sql
    2 BEFORE DELETE OR INSERT OR UPDATE ON t1
    3 declare
    4 n number;
    5 stmt varchar2(4000);
    6 sql_text ora_name_list_t;
    7 begin
    8 n := ora_sql_txt(sql_text);
    9 FOR i IN 1..n LOOP
    10 stmt := stmt || sql_text(i);
    11 END LOOP;
    12
    13 insert into t_sql(USERNAME,CLIENT_IP,SQL_TEXT,TABLE_NAME,OWNER)
    14 values(user,sys_context('userenv','ip_address'),stmt,'T1','RAINY');
    15
    16 end;
    17 /Trigger created.SQL> insert into t1(a) values(1);1 row created.SQL> update t1 set a = 2 where a = 1;1 row updated.SQL> delete t1;3 rows deleted.SQL> commit;Commit complete.SQL> select * from t_sql;USERNAME CLIENT_IP SQL_TEXT
    ------------------------------ -------------------- ------------------------------
    TABLE_NAME OWNER
    ------------------------------ ------------------------------
    RAINY 10.1.30.19 insert into t1(a) values(1)
    T1 RAINYRAINY 10.1.30.19 update t1 set a = 2 where a =
    1
    T1 RAINYRAINY 10.1.30.19 delete t1
    T1 RAINY