1. 執行刪除操作
SQL> drop table t ;
Table dropped.
SQL> select * from tab ;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BIN$wWGJJd0UCrDgRAAMKRcWyg==$0 TABLE
TTS SYNONYM
TTSS SYNONYM
SQL> purge table t;
Table purged.
使用logmnr來挖掘日誌中的資訊
2. 查看操作目錄
SQL> show parameter utl_file_dir
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string
沒有指定,那麼指定一個檔案夾用來存放logmnr的字典檔案
-bash-3.00$ mkdir /gwrs/logmnr
SQL> alter system set utl_file_dir='/gwrs/logmnr' scope=spfile ;
System altered.
重啟一下資料庫
-bash-3.00$ srvctl stop database -d prod
-bash-3.00$ srvctl start database -d prod
3. 建立字典檔案
SQL> execute dbms_logmnr_d.build ('dict.ora','/gwrs/logmnr',dbms_logmnr_d.store_in_flat_file);
PL/SQL procedure successfully completed.
4. 分析日誌
將可能相關的日誌都加入分析
begin
dbms_logmnr.add_logfile(logfilename=>'/gwrs/PROD/archivelog/2012_06_01/o1_mf_1_35_7wjflz93_.arc',options=>dbms_logmnr.new) ;
dbms_logmnr.add_logfile(logfilename=>'/gwrs/PROD/archivelog/2012_06_01/o1_mf_2_31_7wjfngtq_.arc',options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>'/gwrs/PROD/archivelog/2012_06_01/o1_mf_2_32_7wjfnkbr_.arc',options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>'/gwrs/PROD/archivelog/2012_06_01/o1_mf_1_36_7wjgg4dh_.arc',options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>'/gwrs/PROD/archivelog/2012_06_01/o1_mf_1_37_7wjlnoxr_.arc',options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>'/gwrs/PROD/archivelog/2012_06_01/o1_mf_1_38_7wjmwbcs_.arc',options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>'/gwrs/PROD/archivelog/2012_06_01/o1_mf_2_33_7wjmwjfj_.arc',options=>dbms_logmnr.addfile) ;
dbms_logmnr.start_logmnr(dictfilename=>'/gwrs/logmnr/dict.ora');
end ;
/
5. 分析操作記錄
注意, 這裡的logmnr記錄日誌只在本次會話中生效,如果需要在其他會話分析這些日誌需要建立一個表來儲存它
create table logmnr_tmp tablespace users as select * from v$logmnr_contents ;
接下來就可以分析日誌了。
SQL> col seg_name for a10
SQL> col sql_redo for a50
SQL> col seg_owner for a10
SQL> col table_name for a10
select scn , timestamp , seg_owner, seg_name , table_name , sql_redo from logmnr_tmp where table_name='T' ;
SCN TIMESTAMP SEG_OWNER SEG_NAME TABLE_NAME SQL_REDO
---------- --------- ---------- ---------- ---------- --------------------------------------------------
1823865 01-JUN-12 DEX T T ALTER TABLE "DEX"."T" RENAME TO "BIN$wWGJJd0UCrDgR
AAMKRcWyg==$0" ;
1823868 01-JUN-12 DEX T T drop table t AS "BIN$wWGJJd0UCrDgRAAMKRcWyg==$0"
;
1823953 01-JUN-12 DEX T T purge table "BIN$wWGJJd0UCrDgRAAMKRcWyg==$0" ;
如果發現username , os_username , machine_name 等為unknow 或者 null 的狀態 這是一個bug 當你重複執行同一個logmnr使用相同的參數的時候就可能會出現這種狀況(第一次不會)BUG:10129774
連結地址 https://support.Oracle.com/CSP/main/article?cmd=show&type=BUG&id=10129774
打補丁 10129774