自从Oracle提供回收站功能后,为DBA恢复误drop的表带来了非常大的便利。注意,即便是闪回功能是关闭状态,回收站功能默认也是开启的。1.验证在未启用闪回功能的情况下回收站功能也可以使用1)确认当前数据库版本为10.2.0.3sys@ora10g> select * from v$version;BANNER----------------------------------------------------------------Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64biPL/SQL Release 10.2.0.3.0 - ProductionCORE 10.2.0.3.0 ProductionTNS for Linux: Version 10.2.0.3.0 - ProductionNLSRTL Version 10.2.0.3.0 - Productionsys@ora10g> select flashback_on from v$database;FLASHBACK_ON------------------NO2)确认数据库为启用闪回功能sys@ora10g> select flashback_on from v$database;FLASHBACK_ON------------------NO3)模拟删除sec用户下的t表,并使用回收站恢复之(1)创建测试表Tsec@ora10g> create table t as select * from all_objects;Table created.(2)drop之前的确认sec@ora10g> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------T TABLE(3)drop表T(不要使用purge参数)sec@ora10g> drop table t;Table dropped.(4)确认回收站中包含T表的数据sec@ora10g> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------BIN$hHoZrihpVOPgQAB/AQBsWg==$0 TABLEsec@ora10g> select OBJECT_NAME,ORIGINAL_NAME,OPERATION from user_recyclebin;OBJECT_NAME ORIGINAL_NAME OPERATION------------------------------ -------------------------------- ---------BIN$hHoZrihpVOPgQAB/AQBsWg==$0 T DROP(5)恢复被drop的表Tsec@ora10g> flashback table t to before drop;Flashback complete.sec@ora10g> select * from tab;TNAME TABTYPE CLUSTERID------------------------------ ------- ----------T TABLEOK,到此我们已经验证在闪回功能为开启的情况下我们依然可以对误drop的表进行闪回恢复。2.决定回收站功能启用与否的因素其实在Oracle 10gR2版本中,回收站是否启用是由“recyclebin”参数来控制的。默认情况下,这个参数是启用的(on)。sys@ora10g> show parameter recyclebinNAME TYPE VALUE--------------- -------------------- ----------recyclebin string onOracle官方文档中的描述信息参考:链接:RECYCLEBIN is used to control whether the Flashback Drop capability is turned on or off. If the parameter is set to OFF, then dropped tables do not go into the recycle bin. If this parameter is set to ON, dropped tables go into the recycle bin and can be recovered.3.禁止回收站功能我们可以通过修改参数“recyclebin”为“off”来禁用回收站功能。这个参数既可以在使用“ALTER SYSTEM”命令修改,也可以使用“ALTER SESSION”命令进行修改,修改比较便利。1)修改“recyclebin”参数为“off”sec@ora10g> show parameter recyclebinNAME TYPE VALUE
-------------- -------------------- ----------------
recyclebin string onsec@ora10g> alter session set recyclebin=off;Session altered.sec@ora10g> show parameter recyclebinNAME TYPE VALUE
-------------- -------------------- ------------------
recyclebin string OFF2)此时再使用drop删除表后,将不放入回收站,当然也就无法使用闪回drop表的功能进行恢复sec@ora10g> drop table t;Table dropped.sec@ora10g> select * from tab;no rows selectedsec@ora10g> select * from recyclebin;no rows selected3)因为是在session级别进行的修改,再次连接到sec用户,该参数将恢复为“on”sec@ora10g> conn sec/secConnected.sec@ora10g> show parameter recyclebinNAME TYPE VALUE
-------------- -------------------- ---------------
recyclebin string on当然可以在系统级别进行修改,彻底禁用回收站的功能。4.小结什么时候需要考虑禁用回收站的功能呢?除非有特殊需求(如系统存在大量的drop动作,但未使用到purge选项,防止占用系统空间和降低系统性能),否则不建议关闭这个功能。Good luck.secooler10.04.17-- The End --