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_recyclebinwhere 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 testOracle在drop掉数据使用了回收站,那来看看回收站SQL>show parameter recyclebinNAME TYPE VALUE----------------------------------------------- ----------------------recyclebin string onrecyclebin这个参数表示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==$0DROPBIN$ysxSAgtjQuuELE6SZXxcUA==$0DROPSQL>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 DB视图
下一个:Oracle DB约束概览
- 更多Oracle疑问解答:
- 运行exp备份oracle数据库提示oracle-12154错误
- 有没有,生产Oracle Rman 备份脚本的工具啊!
- 初学orcle,希望有大大帮忙解说一下详细步骤,从登录oracle到创建表的过程
- oracle语句问题:一张user表,三个字段,id,name,time,插入记录比如:张三2007,李四2008,张三2011
- 如何写一个ORACLE触发器同步两个表中的数据?
- oracle 如何查看一个服务器上有多少个数据库.
- oracle 创建包的时候错误 求解
- oracle 重复列的问题
- oracle 中如何查处2星期前的数据
- 请教oracle数据库安装中的问题
- 请问谁能提供给我标准的oracle ERP的数据库表结构并详细说明各表主要的作用?
- 安装oracle遇到的问题 invalid entry CRC (expected 0x3e12e795 but got 0x9db0e9fd)
- 我的是ORACLE 10G,在RMAN中如何按指定的时间恢复数据文件啊?
- oracle为什么没有自动增长列
- oracle快捷键都有哪些啊?