ITPub博客

首页 > 数据库 > Oracle > 闪回删除技术:

闪回删除技术:

原创 Oracle 作者:skyin_1603 时间:2016-09-30 00:17:58 0 删除 编辑

闪回删除技术,方便我们平时恢复有意无意地错误删除了的表,要知道,一般情况下,没有加purge强制删除表的
情况下,普通drop的表一般都会先放回数据库中得recyclebin(还有垃圾箱空间足够),相当window系统的垃圾箱。
我们可以先看看oracle数据库中recyclebin的结构,我们登录Scott用户
conn scott/tiger0520

SQL> desc user_recyclebin

 Name                                 Null?    Type

 ----------------------------    ------------- --------  

OBJECT_NAME                               NOT NULL VARCHAR2(30)

 ORIGINAL_NAME                                      VARCHAR2(32)

 OPERATION                                          VARCHAR2(9)

 TYPE                                               VARCHAR2(25)

 TS_NAME                                            VARCHAR2(30)

 CREATETIME                                         VARCHAR2(19)

 DROPTIME                                           VARCHAR2(19)

 DROPSCN                                            NUMBER

....
....
查看

Test1表中原有的数据:

SQL> select * from test1;

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

此时,我们删除表Test1,
QL> drop table test1;


Table dropped.

此外,重新重新创建一个 test1,


SQL> create table test1(

  2  deptno number(2),

  3  dname varchar2(10),

  4  location varchar2(10));

Table created.

SQL> insert into test1 values(40,'OPERATIONS','BOSTON');

1 row created.

此时,我们想找回原来的test1表,先查看垃圾箱,
SQL> show recyclebin


ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

---------------- ---------------          --------------- ------------

TEST1            BIN$PafEvIK1PW/gUwEAAH/iiQ==$0 TABLE        2016-09-29:23:02:38

以上红色的一长串字符锁代表的就是原来test1删除后的显示形式,
可以查看垃圾箱删除的表,发现表结构与数据跟删除前的一样(为了容易看,用双引号“”括起来),

SQL> desc "BIN$PafEvIK1PW/gUwEAAH/iiQ==$0";

 Name                                      Null?    Type

 --------------------     ----------------- --------  

DEPTNO                                             NUMBER(2)

 DNAME                                              VARCHAR2(14)

 LOC                                                VARCHAR2(13)

SQL> select * from "BIN$PafEvIK1PW/gUwEAAH/iiQ==$0";

    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

此时从垃圾箱还原原来的表test1,在没有相同表名的情况下,还原后的表名跟删除前一样,
SQL> flashback table "BIN$PafEvIK1PW/gUwEAAH/iiQ==$0"


  2  to before drop;

flashback table "BIN$PafEvIK1PW/gUwEAAH/iiQ==$0"

*

ERROR at line 1:

ORA-38312: original name is used by an existing object

该出报错,是因为我们在删除原来的test1表后,又创建了一个表test1,为了能够还原,此时需要
对从垃圾箱还原的表重新命名,此时执行语句为以下,用rename to “新表名”,

SQL> flashback table "BIN$PafEvIK1PW/gUwEAAH/iiQ==$0"

  2  to before drop rename to test11;

Flashback complete.
此时查看垃圾箱,没有表在里面,已被还原,

SQL> select original_name,object_name,type,droptime

  2  from user_recyclebin;

no rows selected

由此,我们的闪回删除成功,找回来误删除的表格,容易解决了生成当中遇到类似的问题。






来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31392094/viewspace-2125775/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 闪回表技术
请登录后发表评论 登录
全部评论

注册时间:2016-09-06

  • 博文量
    231
  • 访问量
    215153