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 表空间中的表:

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29654823/viewspace-1363597/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29654823/viewspace-1363597/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值