【recyclebin】彻底禁用 Oracle回收站功能

自从Oracle提供回收站功能后,为DBA恢复误drop的表带来了非常大的便利。
注意,即便是闪回功能是关闭状态,回收站功能默认也是开启的。

1.验证在未启用闪回功能的情况下回收站功能也可以使用
1)确认当前数据库版本为10.2.0.3
sys@ora10g> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE    10.2.0.3.0      Production
TNS for Linux: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production

sys@ora10g> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

2)确认数据库为启用闪回功能
sys@ora10g> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

3)模拟删除sec用户下的t表,并使用回收站恢复之
(1)创建测试表T
sec@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 TABLE

sec@ora10g> select OBJECT_NAME,ORIGINAL_NAME,OPERATION from user_recyclebin;

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION
------------------------------ -------------------------------- ---------
BIN$hHoZrihpVOPgQAB/AQBsWg==$0 T                                DROP

(5)恢复被drop的表T
sec@ora10g> flashback table t to before drop;

Flashback complete.

sec@ora10g> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
T                              TABLE

OK,到此我们已经验证在闪回功能为开启的情况下我们依然可以对误drop的表进行闪回恢复。

2.决定回收站功能启用与否的因素
其实在Oracle 10gR2版本中,回收站是否启用是由“recyclebin”参数来控制的。
默认情况下,这个参数是启用的(on)。
sys@ora10g> show parameter recyclebin

NAME            TYPE                 VALUE
--------------- -------------------- ----------
recyclebin      string               on

Oracle官方文档中的描述信息参考:
链接:http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/initparams175.htm#REFRN10264
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 recyclebin

NAME           TYPE                 VALUE
-------------- -------------------- ----------------
recyclebin     string               on
sec@ora10g> alter session set recyclebin=off;

Session altered.

sec@ora10g> show parameter recyclebin

NAME           TYPE                 VALUE
-------------- -------------------- ------------------
recyclebin     string               OFF

2)此时再使用drop删除表后,将不放入回收站,当然也就无法使用闪回drop表的功能进行恢复
sec@ora10g> drop table t;

Table dropped.

sec@ora10g> select * from tab;

no rows selected

sec@ora10g> select * from recyclebin;

no rows selected

3)因为是在session级别进行的修改,再次连接到sec用户,该参数将恢复为“on”
sec@ora10g> conn sec/sec
Connected.
sec@ora10g> show parameter recyclebin

NAME           TYPE                 VALUE
-------------- -------------------- ---------------
recyclebin     string               on

当然可以在系统级别进行修改,彻底禁用回收站的功能。

4.小结
什么时候需要考虑禁用回收站的功能呢?
除非有特殊需求(如系统存在大量的drop动作,但未使用到purge选项,防止占用系统空间和降低系统性能),否则不建议关闭这个功能。

Good luck.

secooler
10.04.17

-- The End --

你可能感兴趣的:(【recyclebin】彻底禁用 Oracle回收站功能)