使用 logmnr 恢复 delete table 的数据,truncate 与 drop 的数据需要用备份恢复[@more@]用来恢复 delete 删除的数据
测试
delete zz 表 (数据5207条)
准备工作
查找当时的日志文件
首先更改恢复的表空间
exec sys.dbms_logmnr_d.set_tablespace('USERS');
1 添加日志文件
EXEC SYS.DBMS_LOGMNR.ADD_LOGFILE('/oracle/wy/redo01.log', SYS.DBMS_LOGMNR.NEW)
2 使用当前字段文件
EXEC SYS.DBMS_LOGMNR.START_LOGMNR(OPTIONS => SYS.DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG)
3 查看对zz表的操作
select operation,sql_redo,sql_undo from v$logmnr_contents
where seg_name='ZZ'
4 建立恢复临时表
create table tmp tablespace wy as
select operation,sql_redo,sql_undo from v$logmnr_contents
where seg_name='ZZ'
5 结束日志分析
exec sys.dbms_logmnr.end_logmnr
6 开始恢复
declare
mysql varchar2(4000);
num number:=0;
begin
for c_tmp in(select sql_undo from tmp where operation='DELETE') loop
mysql:= replace (c_tmp.sql_undo,';',''); --去掉sql_undo结尾的分号
execute immediate mysql;
num:= num +1;
if mod(num,1000)=0 then
commit;
end if;
end loop;
commit;
end;
7 删除临时表
drop tmp
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/748501/viewspace-1045250/
,如需转载,请注明出处,否则将追究法律责任。