Flashback Database 閃回資料庫

2021-07-30 11:27:22 字數 4126 閱讀 7360

一、  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

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

yes4.查詢當前的 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 的空間需求

Flashback Database 閃回資料庫

flashback database 閃回資料庫 一 flashback database 說明 flashback database 功能非常類似與 rman 的不完全恢復,它可以把整個 資料庫回退到過去的某個時點的狀態,這個功能依賴於 flashback log 日誌。比 rman 更快速和高效...

oracle oracle閃回 閃回資料庫

閃回技術 實現基於磁碟上閃回恢復區的自動備份恢復 配置閃回恢復區閃回恢復區 1 閃回資料庫 可以將資料庫恢復到以前的某個時間,使用該技術必須先配置閃回恢復區 sql connect sys newtouch as sysdba sql shutdown immediate sql startup m...

mysql 閃回 Mysql資料閃回操作備忘

準備工作 更新mysql客戶端到5.7版本 shell wget i c shell yum y install mysql57 community release el7 11.noarch.rpm shell yum y install mysql community server 檢查mysq...