【Flashback】Flashback Drop閃回刪除功能實踐

secooler發表於2012-04-12
  Oracle的Flashback Drop閃回刪除功能給出我們一種誤DROP刪除表的便捷恢復方式,實現這種功能的原理是Oracle的“回收站”(RecycleBin)功能。注意,如果被刪除的表原先是存放在SYSTEM系統表空間上,則不支援此功能。

1.Flashback Drop功能
  恢復被錯誤drop掉的表。當一張表被刪除後,依然可以檢視被drop表的內容,是透過檢視回收站中的內容實現的。

2.實現原理
  被刪除的表將被存在一個叫recyclebin回收站的地方,當drop掉表後,實際上就是將改表改了個名字。

3.與回收站有關的檢視
DBA_RECYCLEBIN
USER_RECYCLEBIN
RECYCLEBIN

4.顯示當前使用者曾經被drop掉的表簡簡訊息
SQL> show recyclebin

5.清除回收站內容的條件
1)表空間不足
2)使用者的空間配額不足
3)purge命令
4)使用flashback命令恢復表後,與之對應的回收站中的那條記錄內容被清除。

6.Flashback Drop語法
SQL> FLASHBACK TABLE ft_1 TO BEFORE DROP;
SQL> FLASHBACK TABLE "BIN$Z6gzDCWg7hfgQAB/AQAROQ==$0" TO BEFORE DROP;
  上面兩種方法都可以實現找回被刪除表的功能。第一種方法是恢復到最後一次被刪除的狀態;第二種方法則可以對回收站中具體的一個物件進行閃回,用於一張表被多次刪除後的恢復場景。

7.Flashback Drop閃回刪除功能實踐
(1).建立測試表ft_1
sys@ora11g> conn secooler/secooler
Connected.
secooler@ora11g> create table ft_1 as select * from all_objects;

Table created.

secooler@ora11g> select table_name from user_tables where table_name = 'FT_1';

TABLE_NAME
------------------------------
FT_1

(2).模擬drop掉ft_1表
secooler@ora11g> drop table ft_1;

Table dropped.

(3).檢視回收站,這裡看到ft_1表已經在回收站中了
secooler@ora11g> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FT_1             BIN$vXtL504BE5vgQMKQt8Bnug==$0 TABLE        2012-04-12:20:14:24


(4).演示一下查詢功能
secooler@ora11g> select count(*) from "BIN$vXtL504BE5vgQMKQt8Bnug==$0";

  COUNT(*)
----------
     71256

(5).閃回被drop掉的表
secooler@ora11g> flashback table ft_1 to before drop;

Flashback complete.

secooler@ora11g> select table_name from user_tables where table_name = 'FT_1';

TABLE_NAME
------------------------------
FT_1

  這裡在能確認回收站中哪個是要恢復的表時,也可以使用下面的命令進行恢復。
secooler@ora11g> drop table ft_1;

Table dropped.

secooler@ora11g> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
FT_1             BIN$vXtL504IE5vgQMKQt8Bnug==$0 TABLE        2012-04-12:20:18:35


secooler@ora11g> flashback table "BIN$vXtL504IE5vgQMKQt8Bnug==$0" to before drop;

Flashback complete.

secooler@ora11g> select table_name from user_tables where table_name = 'FT_1';

TABLE_NAME
------------------------------
FT_1

OK,到這裡,被刪除的表便被順利的恢復回來。

8.清除回收站內容的方法
  如果您確定、一定以及肯定不想恢復這些表的時候,可以使用以下方法對回收站進行清理。
1)清除當前使用者的回收站
SQL> purge recyclebin;
SQL> purge user_recyclebin;

2)清除指定表空間tbs_sec_d的回收站
SQL> purge tablespace tbs_secooler_d;

3)清除指定表空間tbs_sec_d,同時指定使用者sec的回收站
SQL> purge tablespace tbs_sec_d user sec;

4)清除回收站中所有的內容(sys使用者)
SQL> purge dba_recyclebin

9.不產生回收站資料的同時drop表方法
  這種方法是徹底刪除表的方法,使用前要考慮清楚。
SQL> drop table ft_1 purge;

10.小結
  在使用Flashback Drop閃回刪除功能之前要充分了解此項功能的實現原理,以及使用此項功能的條件和它的限制條件。閃回刪除功能為我們提供了表被誤DROP後的便捷恢復手段。

Good luck.

secooler
12.04.12

-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-590833/,如需轉載,請註明出處,否則將追究法律責任。

相關文章