日誌挖掘測試
阿新 • • 發佈:2018-11-07
1.使用子查詢建立一個測試表,然後執行sql操作,然後從聯機日誌裡面找出,之前執行的sql語句。
例子1:
sqlplus 操作如下:
C:\Users\nantian>sqlplus wx/123 SQL*Plus: Release 12.2.0.1.0 Production on 星期三 11月 7 15:36:23 2018 Copyright (c) 1982, 2016, Oracle. All rights reserved. 上次成功登入時間: 星期三 11月 07 2018 15:05:27 +08:00 連線到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production SQL> create table t_5 as select * from dba_users; 表已建立。 SQL> delete from t_5 where rownum<10; 已刪除 9 行。 SQL> commit; 提交完成。 SQL> update t_5 set user_id=0; 已更新 30 行。 SQL> commit; 提交完成。 SQL> truncate table t_5; 表被截斷。 SQL> drop table t_5; 表已刪除。 SQL>
sql1: create table t_5 as select * from dba_users;
sql2 :delete from t_5 where rownum<10;
sql3: update t_5 set user_id=0;
sql4: truncate table t_5;
sql5: drop table t_5;
測試:從聯機日誌中找出以上對t_4 表執行過的sql,使用者,和時間,如有update ,則列出update 的撤銷sql。
實現方法:使用dbms_logmnr包分析oracle日誌
操作如下
切換sys使用者登陸 建立儲存過程,並執行儲存過程,T_LOG('t_4_log') 中t_4_log為生成的表名,此表儲存的oracle日誌資訊。
引數
SQL> conn / as sysdba 已連線。 SQL> create or replace procedure T_LOG(Table_Name VARCHAR2) is 2 3 4 begin 5 6 for i in (select member from v$logfile) loop 7 8 dbms_logmnr.add_logfile(i.member); 9 10 11 --dbms_output.put_line(i.member); 12 13 end loop; 14 15 sys.dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog); 16 17 EXECUTE IMMEDIATE 'create table '||Table_Name||' as select * from v$logmnr_contents '; 18 19 sys.dbms_logmnr.end_logmnr(); 20 21 sys.dbms_output.put_line('table '||Table_Name||' created ?'); 22 23 24 25 end T_LOG; 26 / 過程已建立。 SQL> exec T_LOG('t_5_log') PL/SQL 過程已成功完成。 SQL>
查詢生成的日誌表,
第一行:建立表語句。
第二行:清空表語句。
第三行:刪除表操作,實際上為放入oracle回收站。
第四行:為儲存過程建立的表。
update 語句沒有獲取到,之後文章會寫入。