Home  >  Article  >  Database  >  Oracle根据SCN号闪回表

Oracle根据SCN号闪回表

WBOY
WBOYOriginal
2016-06-07 17:28:26869browse

在安装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;

提交完成。

完成,查看数据完整性!

linux

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn