溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發(fā)布時間:2020-08-16 16:40:22 來源:ITPUB博客 閱讀:154 作者:wg0411 欄目:建站服務器
  Oracle的Flashback Drop閃回刪除功能給出我們一種誤DROP刪除表的便捷恢復方式,實現(xiàn)這種功能的原理是Oracle的“回收站”(RecycleBin)功能。注意,如果被刪除的表原先是存放在SYSTEM系統(tǒng)表空間上,則不支持此功能。

1.Flashback Drop功能
  恢復被錯誤drop掉的表。當一張表被刪除后,依然可以查看被drop表的內容,是通過查看回收站中的內容實現(xiàn)的。

2.實現(xiàn)原理
  被刪除的表將被存在一個叫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;
  上面兩種方法都可以實現(xiàn)找回被刪除表的功能。第一種方法是恢復到最后一次被刪除的狀態(tài);第二種方法則可以對回收站中具體的一個對象進行閃回,用于一張表被多次刪除后的恢復場景。

7.Flashback Drop閃回刪除功能實踐
(1).創(chuàng)建測試表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.不產生回收站數(shù)據(jù)的同時drop表方法
  這種方法是徹底刪除表的方法,使用前要考慮清楚。
SQL> drop table ft_1 purge;

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

Good luck.

secooler
12.04.12

-- The End --

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI