Oracle10g flashback系列新特性之flashback drop
一、Flashback drop功能
flashback drop特性从Oracle10g开始才有的,这个新特性,允许你从当前数据库中恢复一个被drop了的对象。在执行drop操作时,现在Oracle不是真正删除它,而是将该对象的相关信息自动放入回收站(recycle bin)。recycle bin是一个存储被删除对象信息的逻辑容器,实际上当某个对象被删除,它在所属表空间所占的空间被不会被释放,同时它的相关信息被记录到recycle bin中,在recycle bin中,每一个被删除的对象都有一个唯一的名字。当某个对象需要分配新的空间,而此时表空间不足时,那么ORACLE会以FIFO方式释放recycle bin中的对象所占用的空间,然后把这些空间分配给需要空间的对象使用。
在oracle10g中,flashback drop的这个功能是默认启动的。对于想进行FLASHABACK DROP操作的用户,必须授予FLASHBACK权限。
不过flashback drop也有一些限制:
1) 对于非SYSTEM表空间,同时也是本地管理的表空间才能使用flashback drop功能。不过如果一个表属于非SYSTEM的本地管理表空间,其依赖的对象位于字典管理的表空间,这些对象也能够能到RECYCLE BIN的保护。
2) 一个对象保存在Recycle Bin的时间是没有保证的。这个时间会由影响空间的系统活动决定。
3) Recycle bin中的对象不允许进行DML和DDL操作。
4) 由于安全原因,定义的VPD和FGA表策略不会被保护。
5) 索引组织表不受保护
下面具体演示一下flashback drop的功能:
SQL> conn / as sysdba;
已连接。
SQL> show parameter recyclebin
NAME TYPE VALUE
------------------------------------ ----------- ---------
recyclebin string on
--关闭recycle bin,也就是关闭flashback drop功能
SQL> alter system set recyclebin=off;
系统已更改。
SQL> show parameter recyclebin
NAME TYPE VALUE
------------------------------------ ----------- ------------
recyclebin string OFF
SQL> alter system set recyclebin=on;
系统已更改。
SQL> show parameter recyclebin
NAME TYPE VALUE
------------------------------------ ----------- -------------
recyclebin string ON
SQL> select owner,object_name,original_name,DROPTIME from dba_recyclebin order b
y droptime;
未选定行
SQL> create table dept_test as select * from scott.dept;
表已创建。
SQL> drop table dept_test;
表已删除。
SQL> show recyclebin
SQL> select owner,object_name,original_name,DROPTIME from dba_recyclebin order b
y droptime;
未选定行
此时删除的表并没有放到recycle bin之中,因为我们是用SYS用户建立dept_test表的,其默认的存储位置就是SYSTEM表空间。
SQL> create table dept_test tablespace test as select * from scott.dept;
表已创建。
SQL> drop table dept_test;
表已删除。
SQL> show recyclebin
ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME
---------------- ------------------------------ ------------ -------------------
DEPT_TEST BIN$1/cPW58fSmO0AKuCRetDGQ==$0 TABLE