当同一张表被多次DROP后,会在“数据库回收站”中记录多个被删除的版本.这里我们给出对DROP的指定版本进行恢复的方法和过程。
1.确认数据库闪回功能是否开启
[email protected]> show parameter recyclebin
NAME TYPE VALUE
------------------ -------------------- ------------------
recyclebin string on
2.初始化环境,模拟同一张表T被三次DROP过程
[email protected]> create table t (x int);
Table created.
[email protected]> insert into t values (1);
1 row created.
[email protected]> commit;
Commit complete.
[email protected]> select * from t;
X
----------
1
[email protected]> drop table t;
Table dropped.
[email protected]> create table t (x int);
Table created.
[email protected]> insert into t values (1);
1 row created.
[email protected]> insert into t values (2);
1 row created.
[email protected]> commit;
Commit complete.
[email protected]> select * from t;
X
----------
1
2
[email protected]> drop table t;
Table dropped.
[email protected]> create table t (x int);
Table created.
[email protected]> insert into t values (1);
1 row created.
[email protected]> insert into t values (2);
1 row created.
[email protected]> insert into t values (3);
1 row created.
[email protected]> commit;
Commit complete.
[email protected]> select * from t;
X
----------
1
2
3
[email protected]> drop table t;
Table dropped.
到此,表T已经被三次DROP,每次DROP之前所包含的数据不相同。
3.使用Flashback技术恢复表到指定版本
1)恢复要求
恢复到T表到包含两条数据时的版本。
2)获得回收站中的信息
(1)第一种方法:查询RECYCLEBIN内容
[email protected]> 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”命令
[email protected]> 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被删除的时间进行确定。
[email protected]> select * from "BIN$o3eq5kyQ6g/gQMKQt8Au+g==$0";
X
----------
1
2
3
[email protected]> select * from "BIN$o3eq5kyP6g/gQMKQt8Au+g==$0";
X
----------
1
2
[email protected]> select * from "BIN$o3eq5kyO6g/gQMKQt8Au+g==$0";
X
----------
1
可见其中的“BIN$o3eq5kyP6g/gQMKQt8Au+g==$0”是我们需要恢复的目标。
4)对回收站中指定内容进行闪回
[email protected]> flashback table "BIN$o3eq5kyP6g/gQMKQt8Au+g==$0" to before drop;
Flashback complete.
5)确认恢复成果
[email protected]> select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BIN$o3eq5kyO6g/gQMKQt8Au+g==$0 TABLE
BIN$o3eq5kyQ6g/gQMKQt8Au+g==$0 TABLE
T TABLE
[email protected]> 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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/519536/viewspace-696325/