oracle 闪回(例子)

oracle闪回是oracle很重要的特性,今天刚接触了一点,写点皮毛,以后再慢慢深入研究

闪回表

创建表语句

create table emp11
as
select * from emp
where 1=2

删表语句

drop table emp11

其实emp11表删了,却在系统中出现一张新表以系统命名的,这就是oracle10G中对删表的处理,原表实际上并未完全删掉,相当于存在回收站中。如果我们需要恢复表emp11,用闪回是很方面的。

可以用下列语句查出表存在的名称

select * from tab;

查询结果

BIN$YqKHsrh1TMOUvzHmmaSgjQ==$0 TABLE   
EMP113                         TABLE   
EMP12                          TABLE   
BIN$nylcQomQRbqJ1rTyyWP+QA==$0 TABLE   
BIN$PSVb6sBcSn6+ISIFNrJh3Q==$0 TABLE

 还可以用这条语句进行查询原表以及生成的表

select ORIGINAL_NAME,object_name,type from user_recyclebin;

结果为

ORIGINAL_NAME                    OBJECT_NAME                    TYPE
-------------------------------- ------------------------------ -------------------------
EMP11                            BIN$nylcQomQRbqJ1rTyyWP+QA==$0 TABLE

闪回表语句

flashback table emp11 to before drop;

emp11表就恢复了

恢复完表后最好用purge recyclebin 来释放回收站中的资源。如果删除的时候用下面这条语句删除,那么表就在回收站中,用闪回就不行了。

flashback table emp11 to before drop;

如果一个被重复删掉几次,那么恢复时用 flashback table emp11 to before drop; 就恢复最后一次删的,那么怎么恢复前几次删的呢?用这条语句 flashback table emp11 to before drop rename to emp113(这里以emp11表为例) 闪回是和删除的顺序相反的

闪回表中的数据

删除表语句以emp表为例

delete from emp;
commit

恢复表数据(这是恢复到具体的某一时间段)

insert into emp  select * from emp as of timestamp timestamp '2012-02-02 21:12:00'

还有一种恢复到具体的时间(恢复到20分钟以前)

insert into emp  select * from emp as of timestamp sysdate -20/1440


当然还可以闪回数据库的,这里就不说了,闪回的方式还有很多种的如csn号等,以后再慢慢研究 

原文地址:https://www.cnblogs.com/wujin/p/2336204.html