Oracle9i開始提供閃回查詢,以便能在需要的時候查到過去某個時刻的一致性數據,這是通過Undo實現的。這個功能有很大的限制,就是相關事務的undo不能被覆蓋,否則就無力回天了。oracle10g大大的增強了閃回查詢的功能,并且提供了將整個數據庫回退到過去某個時刻的能力,這是通過引入一種新的flashback log實現的。
flashback log有點類似redo log,只不過redo log將數據庫往前滾,flashback log則將Oracle數據庫往后滾。為了保存管理和備份恢復相關的文件,oracle10g提供了一個叫做閃回恢復區(Flashback recovery area)的新特性,可以將所有恢復相關的文件,比如flashback log,archive log,backup set等,放到這個區域集中管理。
?
1.設置閃回恢復區
閃回恢復區主要通過3個初始化參數來設置和管理
?
db_recovery_file_dest:指定閃回恢復區的位置
?
db_recovery_file_dest_size:指定閃回恢復區的可用空間大小
?
db_flashback_retention_target:指定Oracle數據庫可以回退的時間,單位為分鐘,默認1440分鐘,也就是一天。當然,實際上可回退的時間還決定于閃回恢復區的大小,因為里面保存了回退所需要的 flash log。所以這個參數要和db_recovery_file_dest_size配合修改。
?
2.啟動flashback database
設置了閃回恢復區后,可以啟動閃回數據庫功能。
?
首先,數據庫必須已經處于歸檔模式
那么如何設置歸檔呢?很簡單的步驟
1.關閉數據庫
?
?
- SQL>?shutdown?immediate;??
?
2.啟動Oracle數據庫為mount模式
?
?
- SQL>?startup?mount??
?
3.顯示和修改歸檔模式
?
?
- SQL>?archive?log?list ?
- SQL>?alter?database?archivelog; ?
- SQL>?alter?database?open??
?
?
4.設置歸檔日志的格式
?
?
- SQL>alter?system?set?log_archive_format='ARC%s%t%r.log'?scope=spfile;??
?
5.設置歸檔日志的存放路徑
?
?
- SQL>alter?system?set?log_archive_dest='+data/arcl'?scope=spfile; ?
- SQL>shutdown?immediate ?
- SQL>startup??
?
?
6.強制切換歸檔日至
?
?
- SQL>alter?system?switch?logfile;??
?
7.取消歸檔
?
?
- SQL>alter?database?noarchivelog;??
?
?
參數
?
1.格式參數
?
%s 日志序列號
?
%S 日志序列號(帶前導的0)
?
%t 重做線程編號
?
%a 活動的ID號
?
%dOracle 數據庫ID號
?
%r RESELOGS的iD值
?
?
- SQL>?archive?log?list;? ?
- Database?log?mode?Archive?Mode ?
- Automatic?archival?Enabled ?
- Archive?destination?USE_DB_RECOVERY_FILE_DEST ?
- Oldest?online?log?sequence?156 ?
- Next?log?sequence?to?archive?158 ?
- Current?log?sequence?158?
?
?
然后,啟動Oracle數據庫到mount狀態
?
- SQL>?shutdown?immediate;? ?
- Database?closed. ?
- Database?dismounted. ?
- ORACLE?instance?shut?down. ?
- SQL>?startup?mount? ?
- ORACLE?instance?started. ?
- Total?System?Global?Area?285212672?bytes ?
- Fixed?Size?1218992?bytes ?
- Variable?Size?75499088?bytes ?
- Database?Buffers?205520896?bytes ?
- Redo?Buffers?2973696?bytes ?
- Database?mounted. ?
- SQL>alter?database?flashback?on;? ?