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