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号等,以后再慢慢研究