在oracle中Logmnr進行日誌挖掘

yobyin發表於2012-04-01

今天同事說一個表中的資料被刪除,讓我查一查是什麼時間被刪的,oracle中的日誌挖掘可以做到,呵呵。下面說說oracle中的日誌挖掘。

日誌挖掘需要DBMS_LOGMNR_D和DBMS_LOGMNR包,如果資料庫沒有這兩包,SYSDBA身份執行下面指令碼:
 @$ORACLE_HOME/rdbms/admin/dbmslm.sql;

 @$ORACLE_HOME/rdbms/admin/dbmslmd.sql;


建立分析列表,即所要分析的日誌:

exec sys.dbms_logmnr.add_logfile(logfilename=>'D:/ORACLE/10.2/DB_1/ORADATA/ORCL/REDO01.LOG');
exec sys.dbms_logmnr.add_logfile(logfilename=>'D:/ORACLE/10.2/DB_1/ORADATA/ORCL/REDO02.LOG');
exec sys.dbms_logmnr.add_logfile(logfilename=>'D:/ORACLE/10.2/DB_1/ORADATA/ORCL/REDO03.LOG');

進行日誌分析,該例中沒有建立資料字典,使用dbms_logmnr.dict_from_online_catalog選項引數,則logminer期望在所指定的dbms_logmnr.add_logfile或重做日誌中找到資料字典。
exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);

檢視分析結果,其中sql_redo是重做sql文字,即所做過的操作,如果要回退,可以查sql_undo值,seg_name是段名,一般是所操作過的物件如表:
select scn,to_char(TIMESTAMP,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents  where upper(seg_name)='T_DS_HCARD001_STATE';

分析後釋放記憶體:
 exec sys.dbms_logmnr.end_logmnr();

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8013558/viewspace-720194/,如需轉載,請註明出處,否則將追究法律責任。

相關文章