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. (编辑:海南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |