江湖开发者 | Java粉
网站地图
首页> 数据库> oracle recyclebin(回收站)详解
2016
04-26

oracle recyclebin(回收站)详解

oracle recyclebin(回收站)详解

 oracle回收站recyclebin是10g才有的新特性,当我们drop table时,如果不指定purge时,系统只是将这个表重命名为BIN$开头的名称,并在数据字典中修改了相关数据,表所占用的物理空间并没有真正的回收,此时所占用的空间还是原来的表空间,当表空间不够用时,ORACLE会跟据DROPSCN#自动进行逐个清理回收站中对像所占用的空间,10g默认是打开回收站功能的。

一、查看是否开启回收站功能
SQL> show parameter recyclebin
     NAME                                 TYPE        VALUE
     ------------------------------------ ----------- ------------------------------
     recyclebin                           string      on
on:表示表空间启用的回收站功能,建议都开启这个功能
该参数可以设置成session级别打开,也可以设置成system级别,不用重启就可以生效
二、不经过回收站直接删除并释放所占用空间
SQL> drop table test purge
此命令相当于绕过回收站truncate+drop操作,一般不建议这么操作!
三、如何将回收站recyclebin中的对像还原?
SQL> flashback table test to before drop;
表名可以是回收站系统的dba_recyclebin.object_name也可以是dba_recyclebin.original_name,但是有重建过新表后再通过此命令还原会报错,这时只能还原成一个别名
SQL> flashback table test to before drop rename to test_new
恢复了删除前的表中数据,现在只能从test_new中的数据插入test中
SQL> insert into test select * from test_new
注意:如果将表drop掉,那么索引也被drop掉了,表恢复后一定要将表上的索引重建起来,索引丢了最多影响性能,约束没了可能会造成业务数据混乱(一定要注意)
四、如何手工清除回收站中的对像?
SQL> purge table orauser.test
如果此时是DBA用户操作其它用户数据,清除回收站中的表时要加上用户名,否则报表不在回收站中
SQL> purge tablespace ORAPEL   --清除指定的表空间对像
SQL> purge tablespace ORAPEL user orabpel --删除表空间指定用户下的所有对像
SQL> purge recyclebin  --清空整个回收站
show recyclebin是没有数据据的
五、如果同一对像多次删除怎么在recyclebin中识别?
dba_recyclebin中对每删除一个对像都会以BIN$进行命名,同时会有相应的dropscn、createtime、droptime可以跟据这些对像进行定位,然后进行恢复
六、ORACLE空间利用原则
1. 使用现有的表空间的未使用空间
2. 如果没有了空闲空间,则检查回收站,对于回收站的对象按照先进先出的原则,对于最先删除的对象,
3. 如果回收站也没有对象可以清理,则检查表空间是否自扩展,如果自扩展则扩展表空间,然后分配新空间
4.如果表空间非自扩展,或者已经不能自扩展(到达最大限制),则直接报表空间不足
七、DROP掉的对像是不是都会经过回收站?
以下几种drop不会将相关对像放进回收站recyclebin中
1.drop tablespace :会将recyclebin中所有属于该tablespace的对像清除
2.drop user :会将recyclebin中所有属于该用户的对像清除
3.drop cluster : 会将recyclebin中所有属于该cluster的成员对像清除
4.drop type : 会将recyclebin中所有依赖该type对像清除
另外,如果对像所在的表空间要有足够的空间,不然就算drop掉经过recyclebin由于空间不足oracle会自动删除。

 




Java江湖     
全部评论:

表情验证码,看不清楚,换一张

随机文章

云标签

公众号

微信

分享:分享我们的知识;专注:专注个人技术的提升;