熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle10G中的回收站的詳細說明如何利用問題

2013-11-13 16:02:01  來源: Oracle 

  在Oracle G中引入了一個回收站(Recycle Bin)的概念
  
  回收站從原理上來說就是一個數據字典表放置用戶Drop掉的數據庫對象信息用戶進行Drop操作的對象並沒有被數據庫刪除仍然會占用空間除非是由於用戶手工進行Purge或者因為存儲空間不夠而被數據庫清掉數據庫有了這樣的功能能夠減少很多不必要的麻煩常常看到開發人員誤把表刪除急急忙忙找DBA來想辦法的情況相信隨著G的大范圍應用這種情形應該比較少見了
  
  DBA管理上的相關信息可以從USER_recyclebin(DBA_recyclebin)中獲取從現在的Beta版本來看手冊上所說的通過SQL*Plus的show recycle bin 命令查看還不可用
  
  為了便於測試我們創建了一個表空間Foo大小為M創建了一個用戶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$$$TABLE$
  
  SQL>
  
  SQL> SELECT object_name original_name FROM user_recyclebin;
  
  OBJECT_NAME ORIGINAL_NAME
  
  RB$$$TABLE$ FOO
  
  SQL> DESC RB$$$TABLE$
  名稱 是否為空? 類型
  
  
  DUMMY VARCHAR()
  
  
  當一個表被刪除並移動到回收站它的名字要進行一些轉換這樣的目的顯而易見是為了避免同類對象名稱的重復(Windows上經過了特殊的處理回收站裡的操作系統文件可以重名)
  
  轉換後的名字格式如下:
  
  RB$$objn$object_type$version
  
  其中的RB代表Recycle Bin objn為表的目錄對象號 object_type表示對象類型 version表示版本號
  由數據庫指定foo表被刪除後在數據庫回收站裡變成了RB$$$TABLE$ 從名字可以看出這個對象的類型是TableVersion是
  
  SQL> CREATE TABLE foo AS SELECT * FROM DUAL;
  
  表已創建
  
  SQL> SELECT table_name FROM user_tables;
  
  TABLE_NAME
  
  FOO
  RB$$$TABLE$
  
  SQL> DROP TABLE foo;
  
  表已丟棄
  
  SQL> SELECT object_name original_name FROM user_recyclebin;
  
  OBJECT_NAME ORIGINAL_NAME
  
  RB$$$TABLE$ FOO
  RB$$$TABLE$ FOO
  
  SQL>
  
  能看出來雖然源表名字相同在回收站裡的對象名字是不同的
  
  已經放到回收站裡的表是不能用drop 命令刪除的
  
  SQL> drop table RB$$$TABLE$;
  drop table RB$$$TABLE$
  *
  ERROR 位於第 行:
  ORA: can not perform DDL/DML over objects in Recycle Bin
  
  如果要清掉改對象使用purge命令
  
  SQL> PURGE table RB$$$TABLE$;
  
  Table purged
  
  SQL> SELECT object_name original_name FROM user_recyclebin;
  
  OBJECT_NAME ORIGINAL_NAME
  
  RB$$$TABLE$ FOO
  
  對象已經清掉
  
  恢復表使用Undrop命令
  
  SQL> undrop table RB$$$TABLE$;
  
  Table undropped
  
  SQL> SELECT object_name original_name FROM user_recyclebin;
  
  未選定行
  
  SQL> SELECT table_name FROM user_tables;
  
  TABLE_NAME
  
  RB$$$TABLE$
  
  SQL> desc foo;
  ERROR:
  ORA: 對象 foo 不存在
  
  恢復後的表的名字為RB$$$TABLE$如果指定名字使用 as 表名字
  如: undrop table RB$$$TABLE$ as Foo這樣的語句更為詳細的語法請查閱G的SQL參考手冊
  
  SQL>
  SQL> desc RB$$$TABLE$;
  
  名稱 是否為空? 類型
  
  
  DUMMY VARCHAR()
  
  SQL> DROP TABLE RB$$$TABLE$;
  
  表已丟棄
  
  SQL> SELECT table_name FROM user_tables;
  
  TABLE_NAME
  
  RB$$$TABLE$
  
  SQL>
  
  如果我們這個時候再刪除RB$$$TABLE$可觀察到回收站裡該表版本號的變化
  
  如果空間一直夠用回收站裡的對象會一直保持(如果你不手工進行Purge的話)如果空間不足回收站裡的對象會被清空看我們下面這個例子
  
  讓我們創建一個大一點的表
  
  SQL> select object_name from user_recyclebin;
  
  OBJECT_NAME
  
  RB$$$TABLE$
  
  
  SQL> CREATE TABLE foo_bigger AS SELECT * FROM all_objects WHERE ROWNUM<;
  
  表已創建
  
  SQL> SELECT table_name FROM user_tables;
  
  TABLE_NAME
  
  FOO_BIGGER
  
  SQL> SELECT object_name original_name FROM user_recyclebin;
  
  未選定行
  
  SQL>
  
  哦果真回收站裡的內容已經被刪掉了還要注意在空間不足的時候Drop表也是不能放到回收站裡的

From:http://tw.wingwit.com/Article/program/Oracle/201311/17700.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.