您好,欢迎访问一九零五行业门户网

Oracle根据SCN号闪回表

在安装oracle软件时建议更改undo_retention参数,建议将默认900的值更改为10800秒,即3小时;alter system set undo_retention=1
在安装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;
提交完成。
完成,查看数据完整性!
其它类似信息

推荐信息