Flashback Database 閃回資料庫

張衝andy發表於2017-04-12
一、  Flashback Database 說明


Flashback Database 功能非常類似與 RMAN 的不完全恢復, 它可以把整個
資料庫回退到過去的某個時點的狀態, 這個功能依賴於 Flashback log 日誌。 比
RMAN 更快速和高效。 因此 Flashback Database 可以看作是不完全恢復的替代
技術。 但它也有某些限制:
(1)Flashback Database 不能解決 Media Failure, 這種錯誤 RMAN 恢復仍
是唯一選擇。
(2)如果刪除了資料檔案或者利用 Shrink 技術縮小資料檔案大小,這時不
能用 Flashback Database 技術回退到改變之前的狀態,這時候就必須先利用
RMAN 把刪除之前或者縮小之前的檔案備份 restore 出來, 然後利用 Flashback
Database 執行剩下的 Flashback Datbase。
(3)如果控制檔案是從備份中恢復出來的,或者是重建的控制檔案,也不
能使用 Flashback Database。
(4)使用 Flashback Database 鎖能恢復到的最早的 SCN, 取決與 Flashback Log 中記錄的最早 SCN。


二、  Flashback Database  架構


Flashback Database 整個架構包括一個程式Recover Writer(RVWR)後臺程式,
Flashback Database Log 日誌 和 Flash Recovery Area。一旦資料庫啟用了
Flashback Database, 則 RVWR 程式會啟動,該程式會向 Flash Recovery Area 中
寫入 Flashback Database Log, 這些日誌包括的是資料塊的 " 前映象(before
image)", 這也是 Flashback Database 技術不完全恢復塊的原因。


三、 Flashback Database  操作流程:


1. 配置 Flash Recovery Area
SQL> show parameter db_recovery_file
SQL> alter system set db_recovery_file_dest_size=10G scope=both;    


2. 資料庫必須已經處於歸檔模式
SQL> archive log list; 


3. mount 狀態下 開啟 flashback database
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback on;
SQL> alter database open;
SQL> select flashback_on from v$database;


FLASHBACK_ON
------------------
YES


4.查詢當前的 scn
SQL> SELECT CURRENT_SCN FROM V$DATABASE;


CURRENT_SCN
-----------
    3450135


5.  查詢當前的時間
SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;


TIME
-----------------
15-03-12 16:40:55


6. 模擬業務操作
SQL> create table flashback as select * from dba_objects;


Table created.


SQL> commit;


Commit complete.


7.  重啟 DB 到 到 mount
SQL> shutdown immediate
SQL> startup mount


8.  執行恢復:分 timestamp  或者 SCN 
SQL> flashback database to scn 3450135;


Flashback complete.


或者 (兩者選其一)
SQL> Flashback database to timestamp to_timestamp('15-03-12 16:40:55','yy-mm-ddhh24:mi:ss');


9. 開啟資料庫
SQL> alter database open resetlogs;


說明:
在執行完 flashback database 命令之後,oracle 提供了兩種方式讓你修復資料庫:
1). 直接 alter database open resetlogs 開啟資料庫,當然,指定 scn 或者
timestamp 時間點之後產生的資料統統丟失。
2). 先執行 alter database open read only 命令,以 read-only 模式開啟資料庫,
然後立刻透過邏輯匯出的方式將誤操作涉及表的資料匯出,再執行 recover
database 命令以重新應用資料庫產生的 redo,將資料庫修復到 flashback database
操作前的狀態,然後再透過邏輯匯入的方式,將之前誤操作的表重新匯入,這樣
的話對現有資料的影響最小,不會有資料丟失。


10. 核查閃回操作是否成功
SQL> select * from flashback;
select * from flashback
              *
ERROR at line 1:
ORA-00942: table or view does not exist


11. 關閉閃回資料庫功能
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database flashback off;
SQL> alter database open;
SQL> select flashback_on from v$database;


FLASHBACK_ON
------------------
NO




補充:
-- 檢視是否啟用了 Flashback database 功能
SQL> select flashback_on from v$database;


-- 檢視閃回支援的閃回時間
SQL> select oldest_flashback_scn os, to_char(oldest_flashback_time,'yy-mm-dd hh24:mi:ss') ot, 
retention_target rt,flashback_size fs, estimated_flashback_size es
from v$flashback_database_log; 


Flashback Database 所能回退到的最早時間,取決與保留的 Flashback
Database Log 的多少, 該檢視就可以檢視許多有用的資訊。
Oldest_flashback_scn / Oldest_flashback_time : 這兩列用來記錄可以恢復到最早的時點
Flashback_size: 記錄了當前使用的 Flash Recovery Area 空間的大小
Retention_target: 系統定義的策略
Estimated_flashback_size: 根據策略對需要的空間大小的估計值


--檢視閃回資料庫的活動量
SQL> alter session set nls_date_format='hh24:mi:ss';
SQL> select * from v$flashback_database_stat;


這個檢視用來對 Flashback log 空間情況進行更細粒度的記錄和估計。 這個
檢視以小時為單位記錄單位時間內資料庫的活動量
Flashback_Data 代表 Flashback log 產生數量,
DB_Date 代表資料改變數量,
Redo_Date 代表日誌數量,

透過這 3 個數量可以反映出資料的活動特點,更準確的預計 Flash Recovery Area 的空間需求


感謝 dave 大神 ,有參考dave 老師的筆記。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2137146/,如需轉載,請註明出處,否則將追究法律責任。

相關文章