Oracle闪回删除表原理分析

首先你应该明白闪回删除操作的对象仅仅是表,它允许你将之前删除的表恢复到删除它之前的状态,同时还会恢复所有索引以及任何权限和触发器,唯一的主键和非空约束也会被恢复(注意不包括外键)。

  Oracle 10g开始,drop table 命令的实现方式为:它实际上根本没有删除表,而只是重命名表,并把重命名的表放进回收站(每个用户都有一个回收站)可以在user_recyclebin数据字典中查看当前用户的回收站中的内容,如:被drop的表重命名后的表名 以及drop之前的名字等等信息, 我们已经知道rname 一个表并不会改变表的对象号,当用户发出drop table 命令后,在内部已经把它映射到rename命令,删除表后表的对象号并没有改变,并且所占的存储空间大小 位置都没有改变,只是这时候它所占用的空间是可以被占用的(个人认为应该是当没有其他空间可以使用的时候就会占用它),这时候就会出问题,导致闪回删除操作不一定100%成功,再就是当你删除一个表后,你又重新建立一个相同名字的表,这时候你要重命名要闪回删除操作的表,如: flashback table table_name to before drop rename new_name ;.

  注意:

  1.truncate 的表是不能被闪回删除操作的,

  2.drop table name purge ; 这样删除的表会删除多有引用且不能恢复,

  3.drop user  liu cascade,这样删除的用户liu 的表是不能被闪回的,

  4.如果删除了一个表后,又重新建立了一个一样名字的表,又把刚建立的表给删除了,那么在回收站将会有两个不一样回收站名字的表,默认执行闪回删除操作将会恢复最新的版本,你可以指定回收站中表的名字来指定要恢复的表,如:flashback table "BIN$CXLTgwchMOTgUwpYqcBKAA==$0" to before drop ;

  5.如果表上有索引和约束,这样的话,当你drop table 后 ,相应的约束和索引,也会在回收站重新名,而且当你闪回删除时,相关的索引和约束会保留在回收站的名字,但是可以重命名成以前的名字:  alter index "索引在回收站的名字"   rename  to   name_inx;         alter table   table_name rename constraint   "约束在回收站的名字"   to   以前的名字;\

  6.flashback drop  不能闪回system 表空间中的表

你可能感兴趣的:(oracle)