在安装Oracle软件时建议更改undo_retention参数,建议将默认900的值更改为10800秒,即3小时;alter system set undo_retention=10800 scope = both ; 加入一张employees 表中数据被删除一部分,并且已经提交,需要恢复,并且数据库运行在归档模式。 思路:通过SCN号来讲表恢复到原来的记录上 首先查看SCN好的变化: conn /as sysdba select name,first_change# fscn,next_change# nscn,first_time from v$archived_log; NAME FSCN ---------------------------------------- --------------------- NSCN FIRST_TIME --------------------- ------------------- 5795407 2012-09-14:22:00:52 /u/oracle/fast_recovery_area/ORA11G/arch 5795407 ivelog/2012_09_17/o1_mf_1_43_85fzkcbs_.a rc 5803747 2012-09-17:18:10:38 /u/oracle/fast_recovery_area/ORA11G/arch 5803747 ivelog/2012_09_17/o1_mf_1_44_85fzkh75_.a NAME FSCN ---------------------------------------- --------------------- NSCN FIRST_TIME --------------------- ------------------- rc 5807441 2012-09-17:18:40:43 /u/oracle/fast_recovery_area/ORA11G/arch 5807441 ivelog/2012_09_17/o1_mf_1_45_85fzkmq7_.a rc 5810907 2012-09-17:18:40:47 /u/oracle/fast_recovery_area/ORA11G/arch 5810907 (显示部分) 获得当前SCN SQL> select dbms_flashback.get_system_change_number fscn from dual; FSCN --------------------- 5874910 连接上用户(尝试用用户恢复): conn /as sysdba 查看现有数据: SQL> select count(*) from employees; COUNT(*) ---------- 107 创建一张恢复表: SQL> create table t as select * from employees where 1=0; 表已创建。 根据提供的大致误操作时间,结合V$archived_log视图,选择执行闪回查询; SQL> select count(*) from employees as of scn 5810907; COUNT(*) ---------- 107 找到最合适的值,例如最合适的值为5810907 选择SCN为5810907的时间点进行恢复: SQL> insert into t select * from employees as of scn 5810907; 已创建 107 行。 SQL> commit; 提交完成。 完成,查看数据完整性! (责任编辑:IT) |