闪回(3)-flash drop

来源:互联网 发布:进口美工刀片批发 编辑:程序博客网 时间:2024/05/29 03:02
 flash drop用来防止用户错误的删除表,索引等数据库对象,使用传统的数据恢复方式往往涉及到不需要恢复的对象,而闪回删除

可以直接恢复特定的对象。


  使用drop table删除表,该表不会从数据库中立即删除,而是保持原表的位置,但是将删除的表重新命名,并将删除表的信息存储

在回收站中,回收站中记录有被drop表的新名字和原名字。


  回收站是一个逻辑结构,没有物理数据结构。只要被删除的表记录在回收站中就可以使用闪回恢复。每个表空间都有一个回收站的
逻辑区域。使用drop命令后,drop语句操作记录在一个系统表里,即将被删除的对象写到一个数据字典中。在回收站被清空或使用purge
命令之前,被删除的对象并没有真正从数据库中删除。被drop表对应的物理数据块空间成为备用的可用空间。只有当某个活动对象需要

 使用该表对应的空间时,该表才会被真正删除。只要空间未被复用,该表就可以被恢复。


  将删除的表恢复到之前的状态,恢复该表的索引和触发器,授权,恢复该表的约束,包括主键约束,唯一约束,非空约束,外键约束不可
恢复。drop命令在内部被映射为rename命令,并非真正的删除表。
SQL> alter system set recyclebin=on scope=spfile;
System altered.
SQL> drop table emp;
SQL> select object_name,original_name from user_recyclebin;

SQL> flashback table emp to before drop;

使用drop table emp purge则不会写入到回收站中


回收站清除

a.purge table original_table_name --被删除前的对象名称
b.purge table recyclebin_object_name --回收站中的对象名称
c.purge tablespace tablespace_name --从指定的表空间中清除所有的drop对象
d.purge tablespace tablespace_name user user_name --从指定回收站中清除属于某个用户的所有drop对象
e.drop user user_name cascade --直接删除用户及用户所属的所有对象,会绕过回收站进行删除
f.purge recyclebin --清除用户自己的回收站
g.purge dba_recyclebin --从所有用户的回收站清除所有对象

可以使用show recyclebin查看回收站中的对象。


  recycle bin区域只是一个逻辑区域,而不是从表空间上物理的划出一块区域用于回收站,因此recycle bin和普通的对象共用表空间的

存储区域,或者说recycle bin要和普通对象争用存储空间。当空间不足时,oracle会按照先入先出的书序覆盖recycle bin的对象。


  另外
  a.当删除表emp,再新建emp后,再回复表emp时会报错,这时候需要在闪回时对表重命名。
SQL> flashback table emp to before drop rename to emp1;



  b.当删除表emp,再新建emp,再删除表emp,这时候要恢复表需要制定object_name

SQL> flashback table "BIN$Nk6pORquGyXgU4JQqMDqUA==$0" to before drop; --访问回收站中的对象需要加双引号


  flash drop需要注意的地方

a.只能用于非系统表空间和本地管理的表空间
b.对象的参考约束不会被恢复,指向该对象的外键约束需要重建
c.对象能否恢复成功,取决于对象空间是否被覆盖重用
d.删除表时,基于该表的物化视图也会被删除,但闪回时,视图并不会被闪回,因为不存在与
recyclebin中
e.对于recyclebin中的对象,只支持查询,如
SQL> select count(1) from "BIN$Nmg3ApabEGfgU4JQqMD6DA==$0";
0 0
原创粉丝点击