Oracle误删除表数据后的数据恢复详解
|
Oracle误删除表数据后的恢复详解 1. undo_retention参数的查询与修改 使用show parameter undo命令查看当前的数据库参数undo_retention设置。 NAMEnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; TYPEnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; VALUE System altered. SQLgt; show parameter undo NAMEnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; TYPEnbsp;nbsp;nbsp;nbsp;nbsp;nbsp;nbsp; VALUE 2. oracle误删除表数据后的的快速恢复功能方法 2.1 方法一
exec dbms_flashback.enable_at_time(to_date('2011-04-15 08:21:00','yyyy-mm-dd hh24:mi:ss'));
set serveroutput on
DECLARE r_temp hr.job_history%ROWTYPE;
CURSOR c_temp IS SELECT * FROM hr.job_history;
BEGIN
OPEN c_temp;
dbms_flashback.disable;
LOOP
FETCH c_temp INTO r_temp;
EXIT WHEN c_temp%NOTFOUND;
insert into hr.job_history(EMPLOYEE_ID,JOB_ID,START_DATE,END_DATE) values (r_temp.EMPLOYEE_ID,r_temp.JOB_ID,r_temp.START_DATE,r_temp.END_DATE);
commit;
END LOOP;
CLOSE c_temp;
END;
这种办法可以将删除的数据恢复到对应的表中,首先要保证该用户有执行dbms_flashback包的权限。 2.2 方法二 查看FIRST_CHANGE#,NEXT_CHANGE#,FIRST_TIME 当前的SCN为: 使用应用用户尝试闪回 现有数据: Table created. 选择SCN向前恢复: 尝试多个SCN,获取最佳值(如果能得知具体时间,那么可以获得准确的数据闪回)
SQLgt; select count(*) from hs_passport as of scn scn;
Enter value for scn: 12929941968
old 1: select count(*) from hs_passport as of scn scn
new 1: select count(*) from hs_passport as of scn 12929941968
COUNT(*)
----------
861684
SQLgt; /
Enter value for scn: 12927633776
old 1: select count(*) from hs_passport as of scn scn
new 1: select count(*) from hs_passport as of scn 12927633776
select count(*) from hs_passport as of scn 12927633776
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
SQLgt; /
Enter value for scn: 12929928784
old 1: select count(*) from hs_passport as of scn scn
new 1: select count(*) from hs_passport as of scn 12929928784
COUNT(*)
----------
825110
SQLgt; /
Enter value for scn: 12928000000
old 1: select count(*) from hs_passport as of scn scn
new 1: select count(*) from hs_passport as of scn 12928000000
select count(*) from hs_passport as of scn 12928000000
*
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed
最后选择恢复到SCN为12929941968的时间点 861684 rows created. SQLgt; commit; Commit complete. (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

