日誌挖掘

許願流星1號發表於2015-12-02

如果誤刪除的時間超出了db_flashback_retention_target引數的範圍,無論是閃回表還是閃回數,必然對scn 4354137之後的操作有影響,誤刪除的資料重要,誤刪除之後的資料也重要,這時候如果選擇閃回技術就要權衡哪個更重要的問題啦,還好ORACLE8i開始,推出了LOGMNR日誌分析工具,借用LOGMNR工具,可以在不影響其他資料的同時找回誤刪除的資料。

初次使用,需要安裝,很簡單,只需要執行以下2個指令碼即可。

SQL> conn / as sysdba

Connected.

SQL> @?/rdbms/admin/dbmslm 程式包已建立。 授權成功。 

同義詞已建立。 

SQL> @?/rdbms/admin/dbmslmd 程式包已建立。 

同義詞已建立。 

SQL> select * from v$log;

SQL> select member from v$logfile;

 

SQL> execute dbms_logmnr.add_logfile('+DATA/orcl/onlinelog/group_1.263.846638823',dbms_logmnr.new);

 

挖掘每個日誌組的一個成員即可

 

 

SQL> execute dbms_logmnr.add_logfile('+DATA/orcl/onlinelog/group_1.262.846638805',dbms_logmnr.addfile);

 

SQL> execute dbms_logmnr.add_logfile('+DATA/orcl/onlinelog/group_2.265.846638853',dbms_logmnr.addfile);

 

 

進行日誌挖掘找到事務提交的

SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog+dbms_logmnr.committed_data_only);

 

查詢某表的誤操作

 

select username,scn,cscn,timestamp,sql_redo from v$logmnr_contents where seg_name='GOGO' order by scn;   我的gogo表誤操作的scn是697582

select username,scn,cscn,timestamp,sql_redo from v$logmnr_contents where seg_name='EMP2' order by scn;

 

 

 

sys@PROD>flashback table scott.gogo to scn 697583;------注意,這個scn的值指的是cscn的值。

flashback table scott.gogo to scn 697583

                      *

ERROR at line 1:

ORA-08189: cannot flashback the table because row movement is not enabled

 

 

sys@PROD>alter table scott.gogo enable row movement;

 

Table altered.

 

sys@PROD>flashback table scott.gogo to scn 697583;------注意,這個scn的值指的是cscn的值。

 

Flashback complete.

 

 

結束分析,釋放PGA記憶體資源

 

SQL> exec dbms_logmnr.end_logmnr;

 

PL/SQL procedure successfully completed.

 

注意,v$logmnr_contents內容儲存了日誌的內容,只在當前會話有效,如果想長期儲存分析,可以在當前會話用create table tablename as select * from v$logmnr_contents語句來持久儲存。

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

相關文章