ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【Flashback】使用Flashback Drop技术闪回被DROP表的指定版本数据

【Flashback】使用Flashback Drop技术闪回被DROP表的指定版本数据

原创 Linux操作系统 作者:secooler 时间:2011-05-25 23:19:48 0 删除 编辑
  当同一张表被多次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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    8108285