1. 程式人生 > >Oracle11g使用logmnr(logminer)分析online log and archive log

Oracle11g使用logmnr(logminer)分析online log and archive log

        我們在執行delete,insert,update的語句時,有時間會誤操作,將資料更新錯誤,有時資料錯誤後,想知道是什麼語句和什麼時間執行了什麼樣的sql,這樣就需要從歷史的日誌中將執行過的sql抓取出來進行分析,在oracle中logmnr是非常方便的可以從日誌檔案中提取對應的執行sql列表;

         為了分析online log和archive log我們首先需要知道這些日誌檔案的存在物理路徑,這時可以通過查詢v$logfile來獲取到online日誌的路徑和檔名對應sql:
             select * from v$logfile;

         查詢v$archived_log表可以知道歸檔日誌的路徑及檔名:

             select * from v$archived_log;

        查到online log的檔案和archived log檔案後,即可登入sqlplus 進行日誌的分析了,分析共以下幾步:

            (1)  作業系統命令提示符下執行:

                     sqlplus /nolog

            (2) sqlplus命令符下執行: 
                     connect / as sysdba;由於logmnr對應的包中預設執行許可權為dba,因此可以直接用dba來執行相應的分析命令,當然也可以使用grant將對應包及物件的執行許可權符給某個使用者,這樣也可以使用該使用者登入oracle資料庫,執行相應的分析命令;

            (3)exec dbms_logmnr.add_logfile(logfilename=>'&logPathFile',options=>dbms_logmnr.new);

--將日誌檔案加到logmnr中,注意logmnr是基於session的,因此如果退出當前登陸使用者,則對應的分析結果丟失,需要重新執行一遍操作;

(4)exec dbms_logmnr.add_logfile(logfilename=>'&logPathFile',options=>dbms_logmnr.addfile); --繼續往logmnr中新增日誌檔案,原來我想試一下這個add_logfile是否支援*新增批量檔案呢,結果不好使.

(5) exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog); --開始執行分析

(6) select timestamp,sql_redo,sql_undo from v$logmnr_contents where username='SCOTT'and table_name='T_TEST'; --查詢v$logmnr_contents來查詢分析結果;

(7) exec dbms_logmnr.end_logmnr;