Flashback query与误删除数据恢复

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

 

你可能感兴趣的:(flashback)