oracle 閃回

閃回

 

 閃回是10g的一個新特性 ,開啓閃回數據庫必須處於mount狀態並且還要開啓歸檔。

Databasemounted.

sys@OCP>alter database flashback on;

alterdatabase flashback on

*

ERROR atline 1:

ORA-38706:Cannot turn on FLASHBACK DATABASE logging.

ORA-38707:Media recovery is not enabled.  --- 必須開啓閃回

sys@OCP>alter database  archivelog;

 

Databasealtered.

 

sys@OCP>alter database flashback on;

 

Databasealtered.

     第01章  閃回查詢(查過去某時間點,基於undo)

         Oracle10g對於閃回查詢進行了增強,支持更簡單的 SQL 操作,允許對誤刪

誤更新等 DML操作進行閃回。Flashback Query 僅僅是查詢以前的一個快照

而已,並不改變當前表的狀態,

 

1.        原表記錄

hr@OCP> select count(*) from t1;

 

    COUNT(*)

     ----------

        3

2.        刪除記錄並提交更改

 

hr@OCP>delete from t1;

 

3 rowsdeleted.

 

hr@OCP>commit;

 

   Commit complete.

3.        獲取當前的scn號 

[oracle@station10 ~]$ date

     Fri Aug  2 16:12:55 CST 2013

sys@OCP>  selectdbms_flashback.get_system_change_number scn from dual;

       SCN

----------

    641612

hr@OCP>select count(*) from t1  as of scn  641400;

selectcount(*) from t1  as of scn  64100

                     *

ERROR atline 1:

ORA-01466: unable to read data - table definition haschanged  ---不能查詢在表定義之前

hr@OCP>select count(*) from t1  as of scn  641450;

 

  COUNT(*)

----------

         3

或者利用timestamp

hr@OCP>select * from t1 as of timestamp sysdate-13/1440;

 

         A

----------

         1

         2

             3

最後不要忘了提交

4.        利用閃回查詢恢復表

通過增加as of timestamp的語法,就可以到undo表空間中查找到5分鐘之前的記錄前鏡像,使用它我們就可以很輕易的並且迅速的將記錄恢復:

hr@OCP>insert into t1 select * from t1 as of timestamp sysdate-15/1440; ----做筆記時    時間有過了

 

     3 rows created.

 第02 章  閃回表( 恢復表及附屬對象到某時,row  movement,基於undo)

OracleFlashback Table特性允許利用Flashback Table 語句,確保閃回到表

一個時間點。利用回滾段信息來恢復一個或一些表到以前的一個時間點( 一

照) 。FlashbackTable 將改變當前表及附屬對象一起回到以前的時間點。

注意:如果需要閃回一個表,需要以下條件:

1.   需要有flashback anytable 的系統權限或者是該表的 flashback 對象權限;

2.   需要有該表的select,insert,delete,alter 權限;

3.   必須保證該表row movement。

 

hr@OCP>select * from t1 ;

 

         A

----------

         1

         2

         3

刪除一行

hr@OCP>delete from t1 where a=2;

 

1 rowdeleted.

 

hr@OCP>commit;

查詢時間

hr@OCP>select to_timestamp(sysdate,'yyyy-mm-dd:hh24:mi:ss' ) from dual;

 

TO_TIMESTAMP(SYSDATE,'YYYY-MM-DD:HH24:MI:SS')

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

02-AUG-1304.32.05 PM

設定test使能行移動

hr@OCP>alter table t1 enable row movement;

 

Tablealtered.

 

 

hr@OCP>flashback table t1  to  timestamp sysdate-6/1440;

 

Flashbackcomplete.

 

hr@OCP>select * from t1;

 

         A

----------

         1

         2

         3

第03章  閃回刪除(基於recyclebin)

Oracle Flashback Drop特性提供一個類似回收站的功能,用來恢復不小心被

刪除的表。當刪除表時,Oracle10g並不立刻釋放被刪除的表所佔用的空間,而

是將這個被刪除的表進行自動重命名( 爲了避免同類對象名稱的重複) 並放進回

收站中。所謂的回收站類似於Windows系統中的回收站,是一個虛擬的容器,

用於存放所有被刪除的對象,在回收站中被刪除的對象將佔用創建時的同樣的空

間。如果這個被刪除的表需要進行恢復,就可利用Flashback Drop 功能。

 

不能被閃回的表包括:

1 system 表空間

2 virtual private database

3  表空間被數據字典管理

4 purged 刪除

5  基於空間壓力被覆蓋

6  表上存在策略

hr@OCP> show recyclebin ---回收站爲空表示沒有任何表在回收站中

hr@OCP> drop table t1;

 

Table dropped.

 

hr@OCP> show recyclebin

ORIGINAL NAME    RECYCLEBINNAME                OBJECT TYPE  DROP TIME

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

T1              BIN$4vPpoiKMafbgQKjACjgTvA==$0 TABLE            2013-08-02:16:40:36

hr@OCP> select * from "BIN$4vPpoiKMafbgQKjACjgTvA==$0";

 

         A

----------

         1

         2

         3

hr@OCP> flashback  table"BIN$4vPpoiKMafbgQKjACjgTvA==$0" to before drop;

或者

hr@OCP> flashback  table   t1  tobefore drop

Flashback complete.

 

hr@OCP> select * from t1;

 

         A

----------

         1

         2

         3

 

現在我們再刪除t1表,然後再建一張相同名字的表t1

hr@OCP> drop table t1;

hr@OCP> create table t1(a varchar2(1));

hr@OCP> insert into t1 values('a');

hr@OCP> commit;

hr@OCP>  flashback  table  t1  to before drop;

 flashback  table  t1  to before drop

*

ERROR at line 1:

ORA-38312: original name is used by an existing object---因爲已經存在一個對象了,我們可以對閃回刪除表重命名解決這個問題。

 

hr@OCP>  flashback  table  t1  to before drop rename to t2;

 

Flashback complete.

 

hr@OCP> select * from t2;

 

         A

----------

         1

         2

         3

現在我們再來看看回收站(recyclebin)的管理機制,我們先把t1表刪除,然後把t2改爲t1再刪除

hr@OCP> drop table t1;

 

Table dropped.

 

hr@OCP> alter table t2 rename to t1;

 

Table altered.

 

hr@OCP> drop table t1;

 

Table dropped.

hr@OCP> show recyclebin ---現在回收站裏有兩條記錄,並且recyclebin的名字都一樣

ORIGINAL NAME    RECYCLEBINNAME                OBJECT TYPE  DROP TIME

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

T1              BIN$4vPpoiKPafbgQKjACjgTvA==$0 TABLE        2013-08-02:16:49:06

T1              BIN$4vPpoiKOafbgQKjACjgTvA==$0 TABLE        2013-08-02:16:48:49

現在我們執行閃回刪除表

hr@OCP> flashback table   t1  to before drop;

 

Flashback complete.

 

hr@OCP> select * from t1;---可以看出recyclebin 的管理機制是棧類型的(後進先出)

 

         A

       ----------

         1

         2

         3

hr@OCP> flashback table   t1  to before drop;

flashback  table   t1  tobefore drop

*

ERROR at line 1:

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

 

 

hr@OCP> flashback table   t1  to before drop rename to t2;

 

Flashback complete.

 

hr@OCP> select * from t2;

 

A

-

a

 

注意:需要注意的是sysdba的drop 操作不會被記錄,Oracle 也從不推薦用

戶使用sysdba 身份創建用戶對象。

sys@OCP> create table test1(a number);

 

Table created.

 

sys@OCP> insert into test1 values(1);

 

1 row created.

 

sys@OCP> commit;

 

Commit complete.

 

sys@OCP> drop table test1;

 

Table dropped.

 

sys@OCP> show recyclebin ---沒有數據

sys@OCP>

如果向刪除一個表且不放回收站中不能進行恢復,在drop語句中可以添加purge選項

hr@OCP> drop table t2 purge;

 

Table dropped.

 

hr@OCP> show recyclebin

hr@OCP>

 

在Oracle 10gR2中,recyclebin 變成了一個常規參數,可以在session/system

級動態修改:

sys@OCP> show parameter recyclebin

 

NAME                                TYPE        VALUE

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

recyclebin                          string      on  --默認打開

回收站的管理:只要回收站使用的空間沒有被回收,就可以使用閃回刪除功能。

當發生以下情況是回收站的空間就會被回收

Flashback Drop 需要注意的地方:

 

1). 只能用於非系統表空間和本地管理的表空間

 

2). 對象的參考約束不會被恢復,指向該對象的外鍵約束需要重建。

 

3). 對象能否恢復成功,取決與對象空間是否被覆蓋重用。

 

4). 當刪除表時,信賴於該表的物化視圖也會同時刪除,但是由於物化視圖並不會被放入recycle bin,因此當你執行flashback table to before drop 時,也不能恢復依賴其的物化視圖,需要dba手工介入重新創建。

 

5). 對於Recycle Bin中的對象,只支持查詢.

 

1、手工purege回收站(purge recyclebin)

2、當有空間壓力時自動清空回收站,空閒空間可以查看dba_free_space 視圖

發佈了37 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章