当同一张表被多次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 --