在 DROP 表前索引已經被删除從 Oracle 10g 開始, 每個表空間都會有一個叫作回收站的邏輯區域,當用戶執行 drop 命令時, 被删除的表和表的關聯對象( 包括索引, 約束,觸發器,LOB 段,LOB index 段) 不會被物理删除, 這些對象先轉移到回收站中,這就給用戶提供了一個恢複的可能。
閃回丢棄是指将被丢棄的數據庫對象及其相依對象的拷貝保存在回收站中,以便在必要時能夠及時恢複這些對象。在回收站被清空以前,被丢棄的對象并沒有從數據庫中删除,這就使得數據庫能夠恢複被意外或誤操作而删除的表。
回收站:是所有丢棄表及其相依對象的邏輯存儲容器。 Oracle 回收站将用戶所做的DROP 語句操作記錄在一個系統表裡,即将被删除的對象寫到一個數據字典中,當不再需要被删除對象時,可以使用 PURGE 命令對回收站空間進行清除。
可以使用 PURGE 命令清除回收站對象從而釋放空間,有以下幾種方式:
1、使用 PURGE TABLE original_table_name; 這裡的 original_table_name 表示未 drop 以前的名稱
2、使用 PURGE TABLE recyclebin_object_name; 這裡的 recyclebin_object_name 表示回收站中的對象名稱
3、使用 PURGE TABLESPACE tablespace_name 從指定的表空間中清除所有的丢棄對象
4、使用 PURGE TABLESPACE tablespace_name USER user_name 從回收站中清除屬于某個特定用戶的所有丢棄對象
5、DROP USER user _name cascade 直接删除指定用戶及其所屬的全部對象,也就是說,DROP USER 命令會繞過回收站進行直接删除。
6、使用 PURGE RECYCLEBIN 命令清除用戶自己的回收站
7、PURGE DBA _RECYCLEBIN 從所有用戶的回收站清除所有對象
局限性:
閃回丢棄對于如下表不生效:
存放在 SYSTEM 表空間上的表;
使用精細審計或虛拟私有數據庫
建在字典管理表空間上的表
已經被手工清除或自動清除的表(即表被 DROP 後使用了 PURGE 操作)
初始化參數 recyclebin 用于控制是否啟用 recyclebin 功能,缺省是 ON,可以使用 OFF關閉。
SQL> show parameter recycle
禁用該功能:
SQL> alter system set recyclebin=off; SQL> alter session set recyclebin=off;
禁用後删除的對象将直接删除,不會寫到 Recycle 中,當然在删除時,指定 purge 參數,表也将直接删除,不會寫到 recyclebin 中。
SQL> drop table name purge;
Flashback Drop 需要注意的地方:1). 隻能用于非系統表空間和本地管理的表空間
2). 對象的參考約束不會被恢複,指向該對象的外鍵約束需要重建。
3). 對象能否恢複成功,取決與對象空間是否被覆蓋重用。
4). 當删除表時,信賴于該表的物化視圖也會同時删除,但是由于物化視圖并不會被放入recycle bin,因此當你執行 flashback table to before drop 時,也不能恢複依賴其的物化視圖,需要 dba 手工介入重新創建。
5). 對于 Recycle Bin 中的對象,隻支持查詢。
1、基礎環境
conn scott/tiger; create table testA(id int); insert into testA(1); insert into testA(2); insert into testA(3); insert into testA(4); commit; select * from testA;
2、删除testA表
drop table testA; select * from testA;
3、查看 recyclebin 中的對象列表:
show recyclebin
4、查看 recyclebin 中對象:
SQL> select original_name,object_name from recyclebin;
5、查看 recyblebin 對象裡的内容:
select * from "BIN$hA4IUNwwDHXgU2YBqMAGLQ==$0";
注意:表空間的 Recycle Bin 區域隻是一個邏輯區域,而不是從表空間上物理的劃出一塊區域固定用于回收站,因此 Recycle Bin 是和普通對象共用表空間的存儲區域,或者說是 RecycleBin 的對象要和普通對象搶奪存儲空間。當發生空間不夠時,Oracle 會按照先入先出的順序覆蓋 Recycle Bin 中的對象。也可以手動的删除 Recycle Bin 占用的空間。
6、恢複表testA
flashback table testA to before drop; select * from testA;
注意:一旦完成閃回恢複,Recycle Bin 中的對象就消失了.
閃回drop的操作雖然用的可能比較少,不過還是建議大家掌握下,可以在自己測試環境做一些測試,萬一生産環境其他同事drop表的時候還可以搶救回來~
後面會分享更多關于DBA方面的内容,感興趣的朋友可以關注下!
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!