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

secooler發表於2010-04-17
自從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官方文件中的描述資訊參考:
連結:
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 --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-660038/,如需轉載,請註明出處,否則將追究法律責任。

相關文章