Oracle閃回技術之二 Oracle 11g 利用Oracle RecycleBin (回收站)閃回刪除功能

回收站介紹:實現閃回刪除功能,需要使用oracle回收站。回收站是所有被刪除對象及其相依對象的邏輯存儲容器,例如當一個表被drop時,該表及其相依對象並不會馬上被數據庫徹底刪除,而是被保存到回收站中。

回收站將用戶執行的drop操作記錄在一個系統表中,也就是將被刪除的對象寫到一個數據字典中。如果確定不再需要該對戲那個,可以使用purge命令對回收站進行清空。被刪除的對象的名稱可能相同。爲了確保添加到回收站中的對象的名稱都是唯一的,系統會對這些保存到回收站中的對象進行重命名,命名格式如下:

BIN$globalUID$version

其中,BIN表示RecycleBIN,globalUID是一個全局唯一的、24個字符長的標識對象,該標識與原對象名沒有任何關係,$version表示數據庫分配的版本號。

接下來演示一個示例:

首先創建一個表tb_temptest,並插入兩條數據:

SQL> create table tb_temptest(id number)
  2  /

表已創建。

SQL> insert into tb_temptest select 1 from dual union select 2 from dual

已創建2行。

SQL> commit;

提交完成。

查看剛插入的數據:

SQL> select * from tb_temptest;

        ID
----------
         1
         2

SQL>

執行drop刪除表:

SQL> drop table tb_temptest;

表已刪除。

查看回收站是否保存了剛纔刪除的表

SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------

TB_TEMPTEST      BIN$/xHQTJWwTr20WgwHd65BUQ==$0 TABLE        2013-01-26:20:50:32

從上面可以看出剛纔刪除的表被存儲在回收站中了(注意sys用戶和system用戶除外,只有普通用戶操作才能被保存到回收站中)

執行閃回刪除,相應的數據也恢復回來了:

SQL> flashback table tb_temptest to before drop;

閃回完成。

SQL> show recyclebin;
SQL> select * from tb_temptest;

        ID
----------
         1
         2

SQL>

如果在執行閃回操作時數據庫中已經重建了相同的表名,這時需要對閃回的表進行重命名:

SQL> flashback table tb_temptest to before drop rename to newtablename;

閃回時也可以使用RECYCLEBIN NAME進行恢復,(但要加雙引號)

我們再次drop掉表tb_temptest,並用RECYCLEBIN NAME進行閃回:

SQL> drop table tb_temptest;

表已刪除。

SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------

TB_TEMPTEST      BIN$EjDM+LpCQ22xKBt22KnjXQ==$0 TABLE        2013-01-26:21:08:12

SQL> flashback table "BIN$EjDM+LpCQ22xKBt22KnjXQ==$0" to before drop;

閃回完成。

SQL> show recyclebin;
SQL> select * from tb_temptest;

        ID
----------
         1
         2

SQL>

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章