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

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

Oracle 10G 中的回收站

2024-08-29 13:31:56
字體:
供稿:網(wǎng)友
在oracle 10g中,引入了一個(gè)回收站(recycle bin)的概念.
  
  回收站,從原理上來說就是一個(gè)數(shù)據(jù)字典表,放置用戶drop掉的數(shù)據(jù)庫對象信息.用戶進(jìn)行drop操作的對象并沒有被數(shù)據(jù)庫刪除,仍然會(huì)占用空間.除非是由于用戶手工進(jìn)行purge或者因?yàn)榇鎯臻g不夠而被數(shù)據(jù)庫清掉.數(shù)據(jù)庫有了這樣的功能,能夠減少很多不必要的麻煩.常常看到開發(fā)人員誤把表刪除,急急忙忙找dba來想辦法的情況,相信,隨著10g的大范圍應(yīng)用,這種情形應(yīng)該比較少見了.
  
  dba管理上的相關(guān)信息可以從user_recyclebin(dba_recyclebin)中獲取.從現(xiàn)在的beta版本來看,手冊上所說的通過sql*plus的show recycle bin 命令查看還不可用.
  
  為了便于測試,我們創(chuàng)建了一個(gè)表空間foo,大小為1m,創(chuàng)建了一個(gè)用戶foo,默認(rèn)的表空間為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)

  當(dāng)一個(gè)表被刪除并移動(dòng)到"回收站"中,它的名字要進(jìn)行一些轉(zhuǎn)換.這樣的目的顯而易見是為了避免同類對象名稱的重復(fù).(windows上,經(jīng)過了特殊的處理,回收站里的操作系統(tǒng)文件可以重名.)

  轉(zhuǎn)換后的名字格式如下:

  rb$$objn$object_type$version

  其中的rb,代表recycle bin. objn為表的目錄對象號. object_type表示對象類型. version表示版本號.

  由數(shù)據(jù)庫指定。foo表被刪除后,在數(shù)據(jù)庫回收站里變成了rb$$41888$table$0 。從名字可以看出,這個(gè)對象的類型是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)清掉.

  恢復(fù)表,使用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 不存在

  恢復(fù)后的表的名字為rb$$41889$table$0,如果指定名字,使用" as 表名字 "
如: undrop table rb$$41889$table$0 as foo這樣的語句.更為詳細(xì)的語法,請查閱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>

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

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

  讓我們創(chuàng)建一個(gè)大一點(diǎn)的表:


 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)被刪掉了。還要注意,在空間不足的時(shí)候drop表,也是不能放到回收站里的。

  參考文檔:

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

  oracle10g的undrop功能一點(diǎn)實(shí)踐 by overmars

國內(nèi)最大的酷站演示中心!
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 滨州市| 九台市| 和龙市| 张家川| 集贤县| 扶绥县| 陵水| 益阳市| 太湖县| 曲阜市| 泸定县| 龙山县| 张家界市| 株洲市| 大姚县| 嵊泗县| 外汇| 达尔| 竹山县| 嵊泗县| 英吉沙县| 花垣县| 龙州县| 四子王旗| 济源市| 吴旗县| 上饶县| 浏阳市| 三亚市| 尼勒克县| 澳门| 漳平市| 依安县| 乃东县| 轮台县| 宁晋县| 威宁| 黔江区| 英超| 德保县| 文安县|