2010年10月25日 星期一

ORACLE 10G 的資源回收桶

萬一不小心把TABLE DROP了,
是否有辦法像WINDOWS一樣從資源回收桶找回來.
在ORACLE 10G版本,recyclebin預設是啟用的.可以透過
USER_RECYCLEBIN and DBA_RECYCLEBIN還有機會找回來被DROP的TABLE
(下面指令是用DBA的身分執行,如果需要用一般USER請自行改用USER_RECYCLEBIN及相關適當修改)
不過要注意TABLESPACE的使用率,如果TABLESPACE滿到一個程度
資源回收的部分會被PURGE掉,
DESC DBA_RECYCLEBIN看下欄位

Name Null? Type
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
ORIGINAL_NAME VARCHAR2(32)
OPERATION VARCHAR2(9)
TYPE VARCHAR2(25)
TS_NAME VARCHAR2(30)
CREATETIME VARCHAR2(19)
DROPTIME VARCHAR2(19)
DROPSCN NUMBER
PARTITION_NAME VARCHAR2(32)
CAN_UNDROP VARCHAR2(3)
CAN_PURGE VARCHAR2(3)
RELATED NOT NULL NUMBER
BASE_OBJECT NOT NULL NUMBER
PURGE_OBJECT NOT NULL NUMBER
SPACE NUMBER

查詢我們目前資源回收桶裡有什麼
(也許會有意外的發現,有案例是發現駭客偷完資料後DROP掉的
暫存資料)

select OWNER,object_name, original_name, type, can_undrop as "UND", can_purge as "PUR", createtime, droptime
from DBA_recyclebin


可以看到很多資訊,其中object_name為被DROP掉的物件目前在資源回收桶裡的名稱
要看被DROP掉的TABLE資料明細可以下


select * from OWNER."object_name"
(請注意要用double quote ""把object_name包起來,因為名稱中會含有特殊符號)

如果要還原的話,
FLASHBACK TABLE schema.tablename to before drop;

這裡使用的tablename是DBA_recyclebin裡的original_name
太複雜的情境這裡不繼續討論,反正只要資料救得回來
其他東西都可以重建,


如果要清除垃圾桶的話


延伸閱讀
一個國外顧問寫得很詳盡的說明,想用比較進階的就看看吧
Using Oracle's recycle bin
基本上慘劇還是少發生為妙或控制在簡單的局面,不知道您是不是也有同感

沒有留言:

張貼留言