在Oracle 10G中,引入了一個回收站(Recycle Bin)的概念.
回收站,從原理上來說就是一個數據字典表,放置用戶Drop掉的數據庫對象信息.用戶進行Drop操作的對象並沒有被數據庫刪除,仍然會占用空間.除非是由於用戶手工進行Purge或者因為存儲空間不夠而被數據庫清掉.數據庫有了這樣的功能,能夠減少很多不必要的麻煩.常常看到開發人員誤把表刪除,急急忙忙找DBA來想辦法的情況,相信,隨著10G的大范圍應用,這種情形應該比較少見了.
DBA管理上的相關信息可以從USER_recyclebin(DBA_recyclebin)中獲取.從現在的Beta版本來看,手冊上所說的通過SQL*Plus的show recycle bin 命令查看還不可用.
為了便於測試,我們創建了一個表空間Foo,大小為1M,創建了一個用戶Foo,默認的表空間為Foo.
------------------------------------
SQL> CONNECT foo/foo
已連接。
SQL> SELECT table_name FROM user_tables;
未選定行
SQL> DESC user_recyclebin
名稱 是否為空? 類型
--------------------------------------
......
......
user_recyclebin大多是自解釋的,涵義比較容易理解.
SQL> SELECT object_name FROM user_recyclebin;
未選定行
SQL> CREATE TABLE foo AS SELECT * FROM DUAL;
表已創建。
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------
FOO
SQL> DROP TABLE foo;
表已丟棄。
SQL> SELECT table_name FROM user_tables;
TABLE_NAME
------------------------------
RB$$41888$TABLE$0
SQL>
SQL> SELECT object_name, original_name FROM user_recyclebin;
OBJECT_NAME ORIGINAL_NAME
-------------------- --------------------
RB$$41888$TABLE$0 FOO
SQL> DESC RB$$41888$TABLE$0
名稱 是否為空? 類型
----------------------------------------
DUMMY VARCHAR2(1)
當一個表被刪除並移動到"回收站"中,它的名字要進行一些轉換.這樣的目的顯而易見是為了避免同類對象名稱的重復.(Windows上,經過了特殊的處理,回收站裡的操作系統文件可以重名.)
轉換後的名字格式如下:
RB$$objn$object_type$version
其中的RB,代表Recycle Bin. objn為表的目錄對象號. object_type表示對象類型. version表示版本號.