国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle 10G 中的"回收站"

2024-08-29 13:30:47
字體:
來源:轉載
供稿:網(wǎng)友

oracle 10g 中的"回收站"

by fenng
http://www.dbanotes.net

在oracle 10g中,引入了一個回收站(recycle bin)的概念.

回收站,從原理上來說就是一個數(shù)據(jù)字典表,放置用戶drop掉的數(shù)據(jù)庫對象信息.用戶進行drop操作的對象并沒有被數(shù)據(jù)庫刪除,仍然會占用空間.除非是由于用戶手工進行purge或者因為存儲空間不夠而被數(shù)據(jù)庫清掉.數(shù)據(jù)庫有了這樣的功能,能夠減少很多不必要的麻煩.常常看到開發(fā)人員誤把表刪除,急急忙忙找dba來想辦法的情況,相信,隨著10g的大范圍應用,這種情形應該比較少見了.

dba管理上的相關信息可以從user_recyclebin(dba_recyclebin)中獲取.從現(xiàn)在的beta版本來看,手冊上所說的通過sql*plus的show recycle bin 命令查看還不可用.

為了便于測試,我們創(chuàng)建了一個表空間foo,大小為1m,創(chuàng)建了一個用戶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;

表已創(chuàng)建。

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上,經(jīng)過了特殊的處理,回收站里的操作系統(tǒng)文件可以重名.)

轉換后的名字格式如下:

rb$$objn$object_type$version

其中的rb,代表recycle bin. objn為表的目錄對象號. object_type表示對象類型. version表示版本號.
由數(shù)據(jù)庫指定。foo表被刪除后,在數(shù)據(jù)庫回收站里變成了rb$$41888$table$0 。從名字可以看出,這個對象的類型是table,version是0.

sql> create table foo as select * from dual;

表已創(chuàng)建。

sql> select table_name from user_tables;

table_name
------------------------------
foo
rb$$41888$table$0

sql> drop table foo;

表已丟棄。

sql> select object_name, original_name from user_recyclebin;

object_name original_name
-------------------- --------------------
rb$$41889$table$0 foo
rb$$41888$table$0 foo

sql>

能看出來,雖然源表名字相同,在回收站里的對象名字是不同的。

已經(jīng)放到回收站里的表是不能用drop 命令刪除的:

sql> drop table rb$$41888$table$0;
drop table rb$$41888$table$0
*
error 位于第 1 行:
ora-38301: can not perform ddl/dml over objects in recycle bin

如果要清掉改對象,使用purge命令:

sql> purge table rb$$41888$table$0;

table purged.

sql> select object_name, original_name from user_recyclebin;

object_name original_name
-------------------- --------------------
rb$$41889$table$0 foo

對象已經(jīng)清掉.

恢復表,使用undrop命令.

sql> undrop table rb$$41889$table$0;

table undropped.

sql> select object_name, original_name from user_recyclebin;

未選定行

sql> select table_name from user_tables;

table_name
------------------------------
rb$$41889$table$0

sql> desc foo;
error:
ora-04043: 對象 foo 不存在

恢復后的表的名字為rb$$41889$table$0,如果指定名字,使用" as 表名字 "
如: undrop table rb$$41889$table$0 as foo這樣的語句.更為詳細的語法,請查閱10g的sql參考手冊.


sql>
sql> desc rb$$41889$table$0;

名稱 是否為空? 類型
----------------------------------------- -------- -------------

dummy varchar2(1)

sql> drop table rb$$41889$table$0;

表已丟棄。

sql> select table_name from user_tables;

table_name
------------------------------
rb$$41889$table$1

sql>

如果我們這個時候再刪除rb$$41889$table$0,可觀察到回收站里該表版本號的變化。

如果空間一直夠用,回收站里的對象會一直保持(如果你不手工進行purge的話)。如果空間不足,回收站里的對象會被清空。看我們下面這個例子:

讓我們創(chuàng)建一個大一點的表:

sql> select object_name from user_recyclebin;

object_name
------------------------------
rb$$41893$table$0


sql> create table foo_bigger as select * from all_objects where rownum<7980;

表已創(chuàng)建。

sql> select table_name from user_tables;

table_name
------------------------------
foo_bigger

sql> select object_name, original_name from user_recyclebin;

未選定行

sql>

哦,果真,回收站里的內(nèi)容已經(jīng)被刪掉了。還要注意,在空間不足的時候drop表,也是不能放到回收站里的。

 

參考文檔:

oracle10i database administrator’s guide release 1 (10.1) - beta
part no. b10739-01

oracle10g的undrop功能一點實踐 by overmars

原文出處:
<a >http://www.dbanotes.net/oracle/oracle-10g-recyclebin.htm</a>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宾阳县| 禹州市| 平陆县| 霍林郭勒市| 泗水县| 客服| 无极县| 富顺县| 平乡县| 姚安县| 大城县| 厦门市| 天门市| 华蓥市| 阳江市| 澄迈县| 九寨沟县| 南华县| 宜川县| 托克逊县| 余庆县| 丹阳市| 岗巴县| 新疆| 大足县| 蚌埠市| 荥经县| 沅陵县| 蒙自县| 张北县| 黔西县| 衡阳县| 陆川县| 上思县| 平定县| 博罗县| 泸州市| 延安市| 兴义市| 兴业县| 郴州市|