11.2.4.3 清空Recycle Bin中对象
我们都知道在Windows中删除的同时如果按Shift键则文件将会被真正删除(不钻牛角尖,我是说Windows将其删除,至于你通过Recovery之类的工具还可再将其从磁盘恢复,不在此例范围之内),那么对于Oracle是否也有一种方式能够让我们执行的删除不再被放入回收站呢?答案当然是肯定,而且Oracle又提供了多种方式(咦,为什么要说又呢)。
1.修改初始化参数禁用或启用Recycle Bin
Recycle Bin是Oracle自10g后新提供的一项特性,是否启用或禁用该特性,由初始化参数RECYCLEBIN控制,默认情况下(或者不明确指定值的情况下),该参数值为ON,即启用状态。
当然Recycle Bin处于启用状态时,如果用户对表执行DROP操作,则被删除的表及其关联的对象就会被罢入Recycle Bin中。对于这种方式删除的表,正如前面几个小节所演示的,可以快速地通过Flashback Drop的方式进行恢复。
不过,如果手动修改了初始化参数RECYCLEBIN的参数值为OFF,即禁用了Recycle Bin功能,表被DROP后也就不会再被放到RecycleBin了,例如:JSSPRE>CREATETABLETMP(ID NUMBER);
Tablecreated.
JSSPRE> SHOW PARAMETER RECYCLEBIN;
NAMETYPE VALUE
------------------------------------------------------------
recyclebin stringon
JSSPRE>ALTERSESSIONSETRECYCLEBIN=OFF;
Session altered.
JSSPRE>DROPTABLETMP;
Tabledropped.
JSSPRE>SELECT*FROMRECYCLEBIN;
norowsselected
这里我们只针对当前SESSION,如果希望针对整个实例,通过ALTER SYSTEM SET RECYCLEBIN=OFF,或者修改PFILE中的RECYCLEBIN参数,将其设置为OFF。这样所有DROP TABLE操作都会直接删表,而不再转移到Recycle Bin,这就相当于禁用了Recycle Bin功能,如果某天你又想启用该功能,只需要将该初始化参数设置为ON即可。
2.删除时指定PURGE参数
当通过DROP命令删除表时,默认情况下这个表所占用的空间并不会被立刻释放,而是通过修改数据字典的方式,将这个表改名放入Recycle Bin中,这样一旦发现删除有误,可以快速地通过Flashback Drop的方式进行恢复。
不过有时候我们确认某个表不会有恢复的需求,肯定希望删除时能立刻释放其所占用的空间,对于这种需求,实现起来相当简单,仍然是通过DROP命令删除,只不过在***附加上PURGE参数即可,例如:JSSPRE> SHOW PARAMETER RECYCLEBIN;
NAMETYPE VALUE
------------------------------------------------------------
recyclebin stringon
JSSPRE>CREATETABLETMP(ID NUMBER);
Tablecreated.
JSSPRE>DROPTABLETMP PURGE;
Tabledropped.
JSSPRE>SELECT*FROMRECYCLEBIN;
norowsselected
这种方式类似于我们在Windows中按下Shift键删除。
3.清除Recycle Bin中的现有对象
对于已存在于Recycle Bin字典中的对象,如果想彻底删除该怎么办呢?Oracle再一次提供了多种方式,以及多种粒度来执行删除。
先建个测试用的环境:JSSPRE> SHOW PARAMETER RECYCLEBIN;
NAMETYPE VALUE
------------------------------------------------------
recyclebin stringon
JSSPRE>CREATETABLETMP (ID NUMBER);
Tablecreated.
JSSPRE>DROPTABLETMP;
Tabledropped.
JSSPRE> SHOW RECYCLEBIN;
ORIGINALNAMERECYCLEBINNAMEOBJECT TYPE
DROPTIME
---------------- ------------------------------ ------------
-------------------
TMP BIN$KyJoDi5NQ1qq89eFN34k/Q==$0TABLE
2009-06-04:12:57:59
用PURGE指定表,例如:
JSSPRE> PURGETABLETMP;
或
JSSPRE> PURGETABLE"BIN$KyJoDi5NQ1qq89eFN34k/Q==$0";
用PURGE指定表空间,例如:
JSSWEB> PURGE TABLESPACE SCOTT_TBS;
清空当前的Recycle Bin,例如:
JSSWEB> PURGE RECYCLEBIN;
除上述的三种方式之外,还有一种方式就是删除Recycle Bin中对象所属用户或所在表空间,这样甭管你是否PURGE,Recycle Bin都会被清空,不过这种方式好像狠了点儿,慎用啊。
【责任编辑:董书 TEL:(010)68476606】
点赞 0