閃回刪除技術:

skyin_1603發表於2016-09-30

閃回刪除技術,方便我們平時恢復有意無意地錯誤刪除了的表,要知道,一般情況下,沒有加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部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2125775/,如需轉載,請註明出處,否則將追究法律責任。

相關文章