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。
具體操作步驟如下:
1、開啟Flashback Database的準備條件
a)、參數開關
select flashback_on,force_logging from v$database;
FLASHBACK_ON FORCE_LOGGING
------------ -------------
NO NO
開啟方法如下:
shutdown immediate;
startup mount;
alter database archivelog;
alter database flashback on;
alter database open;
alter database force logging;
到此,閃回資料庫的2個參數FLASHBACK_ON和FORCE_LOGGING均開啟;
b)、閃迴文件存放位置db_recovery_file
show parameter db_recovery_file;
設定閃回區檔案存放路徑和大小:
alter system set db_recovery_file_dest='/dba/fb' scope=both; --預設的路徑位置一般不改變
alter system set db_recovery_file_dest_size=6G scope=both;
c)、設定可閃回時間長度
alter system set db_flashback_retention_target =1440 scope=both;
該參數用來控制flashback log 資料保留的時間,或者說,你希望flashback database 能夠恢複的最早的時間點。
預設值是1440,單位是minute,即24 小時,需要注意的是該參數雖然未直接指定flash recovery area大小,但卻受其制約,
舉個例子假如資料庫每天有10%左右的資料變動的話,如果該初始化參數值設定為1440,則flash recovery area 的大小至少要是當前資料庫實際容量的10%,
如果該初始化參數設定為2880,則flash recovery area 的大小就至少是資料庫所佔容量的20%。
到此,資料庫閃回條件已經準備完畢。
2、閃回最早時間的查看,若閃回的時刻比oldest_flashback_time還早,會報日誌不足的錯誤.
select t.oldest_flashback_scn, t.oldest_flashback_time from v$flashback_database_log t ;
3、閃回操作
shutdown immediate;
startup mount;
Flashback database to timestamp to_timestamp('2013-11-23 11:41:16','yy-mm-dd hh24:mi:ss'); --此時刻不能早於前面查出來的閃回最早時間
4、 開啟資料庫:
在執行完flashback database 命令之後,Oracle 提供了兩種方式讓你修複資料庫:
1). 直接alter database open resetlogs 開啟資料庫,當然,指定scn 或者timestamp 時間點之後產生的資料統統丟失。--此種方法等於是把資料庫改到記錄點了,閃回時間點後的一切都會消失。
2). 先執行alter database open read only 命令以read-only 模式開啟資料庫,然後立刻通過邏輯匯出的方式將誤操作涉及表的資料匯出,
再執行recover database 命令以重新應用程式資料庫產生的redo,將資料庫修複到flashback database 操作前的狀態,
操作如下:
alter database open read only;
PL/SQL工具,右擊對象名,匯出丟失的資料;
shutdown immediate;
startup mount;
recover database;--用redo日誌進行資料庫恢複,取消了閃回對資料庫的影響;
alter database open;
說明:
執行recover database時 ,Oracle會以當前controlfile所紀錄的SCN為準,利用archive log和 redo log的redo entry, 把相關的datafile 的 block恢複到“當前controlfile所紀錄的SCN”。
Oracle 11g flashback Data Archive(閃回資料歸檔)
Oracle flashback閃回機制
flashback table快速恢複誤刪除的資料
Oracle 備份恢複:flashback閃回
[Oracle]閃回flashback功能的使用