当前位置:数据库 > Oracle >>

oracle闪回特性之flashback drop

oracle闪回特性之flashback drop
 
从9i开始,Oracle提供了闪回(FLASHBACK)功能。Oracle闪回功能支持查看过去某个状态的数据,回退误删除的数据等等。使用闪回操作要比传统的恢复操作更加的快捷。但是闪回不能恢复介质错误,只能恢复人为造成的误操作。
oracle 提供了三种级别的闪回操作,在这主要描述flashback drop。
Flashback  drop
  在Oracle10g以后,drop不会将表直接删除掉,而是将表进行重命名,也就是说你使用了drop,oracle只是将表重命名,但是表仍然在原地保存,可以在oracle的回收站中查到相关的信息。下面是一个实验:
先来创建一个表
SQL>create table test(id integer,value varchar2(200));
SQL>insert into test values(1,'flash drop test');               
SQL>select * from test;                                                  
        ID VALUE                                                                    
---------- --------------------                                               
         1 flash drop test                                                        
可以使用以下语句查看被删除的对象                                                 
SQL>select object_name,operation from user_recyclebin
where original_name='TEST';                                                            
OBJECT_NAME                   OPERATION                                     
------------------------------ ---------                                             
BIN$pry84fToRMGMUmgRxFqrUQ==$0 DROP                      
我们可以来看看上面这个对象中的内容                                             
SQL> select * from "BIN$pry84fToRMGMUmgRxFqrUQ==$0";  
        ID VALUE                                      
---------- --------------------                       
         1 flash drop test                            
 
通过以上语句我们可以看到oracle并没有删除掉表,而是对表进行重命名。
现在我们来恢复数据
 
SQL>flashback table test to before drop;
 
闪回完成。
 
SQL>select * from test;
        ID VALUE
------------------------------
         1 flash drop test
 
Oracle在drop掉数据使用了回收站,那来看看回收站
SQL>show parameter recyclebin
 
NAME                                 TYPE        VALUE
----------------------------------------------- ----------------------
recyclebin                           string      on
recyclebin这个参数表示oracle回收站是打开的,也就是说oracle可以使用flashbackdrop。
要查询回收站的信息可以使用以下几个试图
select *from  RECYCLEBIN;
select *from dba_recyclebin;
select * from user_recyclebin;等价于recyclebin
要清理回收站中的内容,可以通过以下方式
drop table tablename purge;
PURGE{TABLE <table_name>|INDEX <index_name>}
清理“回收站”中指定的表或索引
PURGETABLESPACE <ts_name> [USER <user_name>]
清理“回收站”中存储在指定表空间的上的对象(或指定用户的对象)
PURGE [USER_|DBA_]RECYCLEBIN
清理“回收站”中当前用户或者所有数据库内的对象。
满足下面任何一条,被drop掉的表,都不能被闪回了:
被drop掉的表不能存储在system表空间上;
被drop掉的表不能存储在数据字典管理的表空间上;
被drop掉的表还存储在“回收站”中,没有被purge掉。
比如说下面就无法闪回:
SQL>drop table test purge;
 
表已删除。
 
SQL>flashback table test to before drop;
flashbacktable test to before drop
*
第 1 行出现错误:
ORA-38305:对象不在回收站中
下面我们再来做一个实验:
SQL>create table test(id integer ,value varchar2(100));
 
表已创建。
 
SQL>insert into test values(1,'flashback drop 1');
 
已创建 1 行。
 
SQL>commit;
 
SQL>drop table test;
 
表已删除。
 
SQL>create table test(id integer ,value varchar2(100));
 
SQL>insert into test values(2,'flashback drop 2');
 
已创建 1 行。
 
SQL>commit;
 
提交完成。
 
SQL>drop table test;
 
表已删除。
SQL>select object_name,operation from user_recyclebin where original_name='TEST
';
 
OBJECT_NAME                    OPERATION
---------------------------------------
BIN$lACU0aQKTQyHGrSufKII7w==$0DROP
BIN$ysxSAgtjQuuELE6SZXxcUA==$0DROP
 
SQL>flashback table test to before drop;
 
闪回完成。
 
SQL>select * from test;
 
        ID VALUE
------------------------------
         2 flashback drop 2
那我们如何恢复到id为1的那个状态,可以使用以下方法,重命名表
SQL>flashback table test to before drop rename to new_test;
 
闪回完成。
 
SQL>select * from new_test;
 
        ID VALUE
------------------------------
         1 flashback drop 1
下面是网上做的一些总结
    1.表的删除被映射为将表的重命名,然后将其置于回收站
   
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,