Oracle使用日志挖掘技术找回误删数据
数据库为归档模式,要不然有点悲剧,只能基于联机日志做挖掘,当然不能挖得太深,只能找回短时间内删除的数据(也就是联机日志没有被覆盖的数据)。
1.获取数据字典:
(1)修改参数
alter system set utl_file_dir='d:\' scope=spfile;
(2)重启oracle
shutdown immediate;
startup
(3)生成字典
exec dbms_logmnr_d.build('dictionary.ora','d:\',options =>dbms_logmnr_d.store_in_flat_file);
2.插入、删除示例数据
insert into scott.emp values(8000,'wallimn','BOSS',7782,sysdate,5000,null,10);
delete from scott.emp where empno=8000;
commit;
3.日志挖掘
刚删除,分析一下联机日志就可以了,看看当前日志
select * from v$logfile;
发现2号日志为当前日志,加入分析
exec dbms_logmnr.add_logfile(logfilename=>'C:\oracle\oradata\ORADB\REDO02.LOG');
exec dbms_logmnr.start_logmnr(dictfilename=>'d:\dictionary.ora');
4.查询分析结果
select scn,timestamp,sql_redo,sql_undo from v$logmnr_contents where sql_redo like '%8000%';
可以根据sql_undo提供的信息,就可以恢复删除的数据。
5.结束挖掘
dbms_logmnr.end_logmnr;