是否有辦法像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
基本上慘劇還是少發生為妙或控制在簡單的局面,不知道您是不是也有同感
沒有留言:
張貼留言