1. 程式人生 > >日誌挖掘測試

日誌挖掘測試

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 語句沒有獲取到,之後文章會寫入。