挖掘前先修改数据库的追加日志数据模式 查看是否打开追加日志数据模式功能 SYS@> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
SUPPLEME -------- NO 打开 SYS@> alter database add SUPPLEMENTAL log data;
Database altered.
SYS@> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
SUPPLEME -------- YES
生成日志挖掘队列:如果你有很多要挖,那就把需要的日志添加进去 exec dbms_logmnr.add_logfile('/home/oracle/oradata/ora10g/arch01abc.log'); exec dbms_logmnr.add_logfile('/home/oracle/oradata/ora10g/arch02abc.log'); 也可以继续把其他redo文件继续添加进去 exec dbms_logmnr.add_logfile('/home/oracle/oradata/ora10g/arch03.log'); 加入队列后开始对所添加队列的日志进行挖掘: exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog); 结束后从v$logmnr_contents查前滚SQL和反算回来的回滚SQL select sql_redo from v$logmnr_contents where lower(sql_redo) like '%update%' and seg_name='EMP'; select sql_undo from v$logmnr_contents where lower(sql_redo) like '%update%' and seg_name='EMP'; 这里看自身需要得到的情况,可以查update、delete、insert等,如果你知道具体那个表就在后面跟上and条件,这里是以EMP表为例! 如果不知道其他条件,直接 select sql_redo from v$logmnr_contents where lower(sql_redo) like '%update%';即可 结束挖掘 EXECUTE DBMS_LOGMNR.END_LOGMNR;