在Oracle中,有时候,我们会无意中删除真实数据,怎么处理呢?
oracle从10g开始提供了flashback 技术,提供误删除数据恢复的方法;注意,恢复是有时间限制的。
SQL> show parameter undo_retention
    NAME TYPE VALUE
    
    ------------------------------------ ----------- ------------------------------
    
    undo_retention integer 900
  
    
    默认是900秒--15分钟;
  
当然,你可以延长恢复时间,但这样会造成非常大的undo表空间等不确定因素。
下面说说具体操作:
    SQL> desc emp; 
    
     Name Null? Type
    
     ----------------------------------------- --
    
     EMPNO      NUMBER
    
     SAL          NUMBER
  
SQL> insert into emp values(20,30000);
1 row created.
SQL> commit;
Commit complete.
SQL> delete from emp;
1 row deleted.
    SQL> commit
    
     2 ;
  
Commit complete.
SQL> select count(*) from emp;
     COUNT(*)
    
    ----------
    
     0
  
1.通过时间的方法来恢复
SQL> select * from emp as of timestamp to_timestamp(sysdate,'yyyy-mm-dd hh24:mi:ss');
SQL>Insert into emp select * from emp as of timestamp to_timestamp('2013-05-26 12:00:16','YYYY-MM-DD hh24:mi:ss');
已创建 1 行。
SQL> COMMIT;
2.通过scn来恢复
先查找历史scn:
    select 
    
     versions_xid,versions_startscn,versions_endscn, 
    
     empno,sal 
    
     from emp
    
     versions between timestamp (systimestamp - interval '15' minute) 
    
     and maxvalue 
    
     where empno=20     ------最近15分钟该表scn的变化
  
从列表中找到删除该数据的scn
SQL> insert into emp select * from emp as of scn 73567478;
SQL> COMMIT;

