不小心使用drop table
語句把表刪除了,資料也沒有備份。就是資料備份了恢複的時候還是會遺失資料的,這時候不必太慌張,或許oracle的資源回收筒(recyclebin)可以解決問題。
【使用環境】:oracle 10g r1
、oracle 10g r2、 Oracle 11g r1、 oracle 11g r2
1、
檢查資料庫是否開啟資源回收筒功能。--預設是開啟的
SELECT Value FROM V$parameter WHERE Name = 'recyclebin';結果為ON說明開啟
2、
查詢被刪除的表是否在資源回收筒中。
目前使用者下
Select * from user_recyclebin where original_name=upper(‘table_name’);
查詢結果如所示
注意:如果看到相同的表多個,主要看object_name和droptime。根據時間來選擇要恢複哪個表。
3、
如果我要想恢複2013-01-08 11:36:41時刻的表
FLASHBACK TABLE "BIN$0r+nc4aFudbgQKjAZNwSjA==$0" TO BEFORE DROP;
4、
檢查表中的資料是否是自己想要的,如果不是drop掉,重新恢複。
oracle資源回收筒類似於windows的資源回收筒,需要注意以下幾點:
1、
如果drop table table_name purge;
相當於windows 的shift+delete,資源回收筒中是沒有資料的。
2、
時間過長。如果你想使用資源回收筒恢複1周前被刪除的表,那我不能保證是否能恢複出來。資源回收筒也會滿的,取決於使用者的空間,如果使用者要插入資料,空間不夠了,首先oracle會自動清除資源回收筒。另外,如果你刪除了一張大表(如:1G以上),會直接造成資源回收筒滿,這時候刪除的表不會存放在資源回收筒中。
3、
刪除以下對象不會放在資源回收筒內
drop a user
drop a cluster
drop a type
drop a tablespace
delete from table;commit;
truncate table XXX;
參考文檔:Oracle Database Administrator's Guide 11g Release 2 (11.2)
E17120-07