【Flashback】使用Flashback Drop技術閃回被DROP表的指定版本資料

secooler發表於2011-05-25
  當同一張表被多次DROP後,會在“資料庫回收站”中記錄多個被刪除的版本.這裡我們給出對DROP的指定版本進行恢復的方法和過程。

1.確認資料庫閃回功能是否開啟
sec@ora10g> show parameter recyclebin

NAME               TYPE                 VALUE
------------------ -------------------- ------------------
recyclebin         string               on

2.初始化環境,模擬同一張表T被三次DROP過程
sec@ora10g> create table t (x int);

Table created.

sec@ora10g> insert into t values (1);

1 row created.

sec@ora10g> commit;

Commit complete.

sec@ora10g> select * from t;

         X
----------
         1

sec@ora10g> drop table t;

Table dropped.

sec@ora10g> create table t (x int);

Table created.

sec@ora10g> insert into t values (1);

1 row created.

sec@ora10g> insert into t values (2);

1 row created.

sec@ora10g> commit;

Commit complete.

sec@ora10g> select * from t;

         X
----------
         1
         2

sec@ora10g> drop table t;

Table dropped.

sec@ora10g> create table t (x int);

Table created.

sec@ora10g> insert into t values (1);

1 row created.

sec@ora10g> insert into t values (2);

1 row created.

sec@ora10g> insert into t values (3);

1 row created.

sec@ora10g> commit;

Commit complete.

sec@ora10g> select * from t;

         X
----------
         1
         2
         3

sec@ora10g> drop table t;

Table dropped.

到此,表T已經被三次DROP,每次DROP之前所包含的資料不相同。

3.使用Flashback技術恢復表到指定版本
1)恢復要求
恢復到T表到包含兩條資料時的版本。

2)獲得回收站中的資訊
(1)第一種方法:查詢RECYCLEBIN內容
sec@ora10g> SELECT OBJECT_NAME, ORIGINAL_NAME, TYPE FROM RECYCLEBIN;

OBJECT_NAME                    ORIGINAL_NAME            TYPE
------------------------------ ------------------------ --------
BIN$o3eq5kyQ6g/gQMKQt8Au+g==$0 T                        TABLE
BIN$o3eq5kyO6g/gQMKQt8Au+g==$0 T                        TABLE
BIN$o3eq5kyP6g/gQMKQt8Au+g==$0 T                        TABLE

(2)第二種方法:使用show recyclebin命令
更簡潔地檢視回收站中資訊的方法是使用“show recyclebin”命令
sec@ora10g> show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
T                BIN$o3eq5kyQ6g/gQMKQt8Au+g==$0 TABLE        2011-05-25:20:12:08
T                BIN$o3eq5kyP6g/gQMKQt8Au+g==$0 TABLE        2011-05-25:20:11:41
T                BIN$o3eq5kyO6g/gQMKQt8Au+g==$0 TABLE        2011-05-25:20:11:10


3)確定T表被drop的三個版本哪個是我們需要恢復的物件
回收站中標識的物件可以透過雙引號引用的方式查詢內容,同時可以結合表T被刪除的時間進行確定。
sec@ora10g> select * from "BIN$o3eq5kyQ6g/gQMKQt8Au+g==$0";

         X
----------
         1
         2
         3

sec@ora10g> select * from "BIN$o3eq5kyP6g/gQMKQt8Au+g==$0";

         X
----------
         1
         2

sec@ora10g> select * from "BIN$o3eq5kyO6g/gQMKQt8Au+g==$0";

         X
----------
         1

可見其中的“BIN$o3eq5kyP6g/gQMKQt8Au+g==$0”是我們需要恢復的目標。

4)對回收站中指定內容進行閃回
sec@ora10g> flashback table "BIN$o3eq5kyP6g/gQMKQt8Au+g==$0" to before drop;

Flashback complete.


5)確認恢復成果
sec@ora10g> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BIN$o3eq5kyO6g/gQMKQt8Au+g==$0 TABLE
BIN$o3eq5kyQ6g/gQMKQt8Au+g==$0 TABLE
T                              TABLE

sec@ora10g> select * from t;

         X
----------
         1
         2

可見此時T表已經被恢復成功。

4.小結
  本文給出了使用Flashback Drop技術閃回指定版本表資料的詳細方法和過程。單就閃回方法來說很簡單,不過重點要放在如何定位回收站中哪個版本是我們需要閃回的目標。

Good luck.

secooler
11.05.25

-- The End --

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

相關文章