標籤:
LogMiner工具通過分析Oracle重作記錄檔(歸檔記錄檔)中的具體內容來重現ORACLE執行過的SQL,特別是,該工具可以分析出所有對於資料庫操作的DML(insert、update、delete等)語句,另外還可分析得到一些必要的復原SQL語句。該工具特別適用於調試、審計或者回退某個特定的事務。
LogMiner分析工具實際上是由一組PL/SQL包和一些動態視圖組成,它作為Oracle資料庫的一部分來發布,是一個完全免費的工具。但該工具和其他Oracle內建工具相比使用起來顯得有些複雜,主要原因是該工具沒有提供任何的圖形化使用者介面(GUI)。本文將介紹該工具在實際工作中的使用。
一、LogMiner的用途
記錄檔中存放著所有進行資料庫恢複的資料,記錄了針對資料庫結構的每一個變化,也就是對資料庫操作的所有DML語句。
LogMiner工具即可以用來分析線上,也可以用來分析離線記錄檔,即可以分析本身自己資料庫的重作記錄檔,也可以用來分析其他資料庫的重作記錄檔。
二、使用LogMiner工具
由於誤操作,維護人員對資料庫SWT表進行了錯誤的UPDATE操作,受影響的記錄約有近萬條。由於備份太舊,無法從備份恢複。下面是使用LogMiner恢複資料的執行個體:
1.保護現場,選擇恢複辦法
13:30左右從維護人員得知,誤操作是在11:00~12:00之間完成的,立即暫停archivelog的備份。檢查歸檔目錄中的歸檔檔案時間包涵了以上時間段。
初步確定用LOGMINER的方法恢複,檢查資料庫的UTL_FILE_DIR參數,發現參數未初始配置,並且無法動態修改,只能採用ONLINECATALOG的方法分析。
2.選擇歸檔記錄檔
檢查redolog的時間,發現已經超過了誤操作發生時間,可以使用歸檔日誌進行分析,檢查在/arch01的歸檔日誌時間,選擇1_63266.dbf,1_63267.dbf,1_63268.dbf作為分析對象:
$sqlplus‘/assysdba’
SQL>EXECUTEdbms_logmnr.add_logfile(-
LogFileName=>‘‘/arch01/1_63266.dbf‘‘,Options=>dbms_logmnr.new);
PL/SQLproceduresuccessfullycompleted.
SQL>EXECUTEdbms_logmnr.add_logfile(-
LogFileName=>‘‘/arch01/1_63267.dbf‘‘,Options=>dbms_logmnr.addfile);
PL/SQLproceduresuccessfullycompleted.
SQL>EXECUTEdbms_logmnr.add_logfile(-
LogFileName=>‘‘/arch01/1_63268.dbf‘‘,Options=>dbms_logmnr.addfile);
PL/SQLproceduresuccessfullycompleted.
3.執行歸檔檔案分析
SQL>executeDBMS_LOGMNR.START_LOGMNR(-
options=>dbms_logmnr.dict_from_online_catalog-
STARTTIME=>to_date(‘‘06-06-200511:00:00‘‘,-
‘‘DD-MM-YYYYHH24:MI:SS‘‘),-
ENDTIME=>to_date(‘‘06-06-200512:00:00‘‘,-
‘‘DD-MM-YYYYHH24:MI:SS‘‘));
PL/SQLproceduresuccessfullycompleted.
4.產生undo指令碼
SQL>setlinesize800
SQL>setpagesize2000
SQL>setheadoff
SQL>spool/arch01/undosql.sql.0606
SQL>selectsql_undofromv$logmnr_contentswhereseg_name
=‘‘SWT‘‘ANDUSERNAME=‘‘MODI‘‘;
SQL>executeDBMS_LOGMNR.end_logmnr();
SQL>spooloff
5.分析undo指令碼,執行undo指令碼。
6.驗證undo指令碼執行後的業務運行情況。
三、總結
通過以上恢複,避免了以前只能通過恢複整個資料表空間來恢複其中的一個表,大大縮短了業務受影響時間和影響範圍。
Oracle LogMiner工具在實際工作中的運用