Oracle 六大閃回技術,flashback
Flashback 技術是以Undo segment中的內容為基礎的, 因此受限於UNDO_RETENTON參數。
要使用flashback 的特性,必須啟用自動撤銷管理資料表空間。
在Oracle 11g裡又出了一個新特性:Oracle Flashback Data Archive.
FDA通過將變化資料另外儲存到建立的閃迴歸檔區(Flashback Archive)中,以和undo區別開來,
這樣就可以為閃迴歸檔區單獨設定儲存策略,使之可以閃回到指定時間之前的舊資料而不影響undo策略。
在Oracle 10g中, Flash back家族分為以下成員:
Flashback Database,
Flashback Drop,
Flashback Query(分Flashback Query,Flashback Version Query,
Flashback Transaction Query 三種)
和Flashback Table。
Oracle 11g中閃回新特性 :閃迴歸檔
Oracle 11g Flashback Data Archive(閃回資料歸檔)
Oracle Flashback閃回機制
Oracle Flashback database
Flashback table快速恢複誤刪除的資料
Oracle 備份恢複:Flashback閃回
1 閃回恢複區(Flashback Recovery Area)
在oracle 9i中引入flashback查詢,以便能在需要的時候查到過去某個時刻的一致性資料,
依賴於undo資料表空間儲存的資訊來閃回查詢以前的版本,當然這個受限於undo資料表空間的大小,
以及保留原則。如果undo 被覆蓋了就不能進行查詢。
oracle10g中增強了閃回查詢的功能,並且提供了將整個資料庫回退到過去某個時刻的能力,
這是通過引入一種新的flashback log實現的。flashback log有點類似redo log,
只不過redo log將資料庫往前滾,flashback log則將資料庫往後滾。
為了儲存管理和備份恢複相關的檔案,oracle10g提供了一個叫做閃回恢複區(Flashback recovery area),
這個地區預設建立在oracle_base目錄下。 可以將所有恢複相關的檔案,
比如flashback log,archive log,backup set等,放到這個地區集中管理。
1.1 設定閃回恢複區
閃回恢複區主要通過3個初始化參數來設定和管理:
db_recovery_file_dest:指定閃回恢複區的位置
db_recovery_file_dest_size:指定閃回恢複區的可用空間大小
db_flashback_retention_target:指定資料庫可以回退的時間,單位為分鐘,
預設1440分鐘,也就是一天。當然,實際上可回退的時間還決定於閃回恢複區的大小,
因為裡面儲存了回退所需要的flash log。
所以這個參數要和db_recovery_file_dest_size配合修改。
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3g SCOPE=BOTH;
System altered.
SQL> ALTER SYSTEM SET db_recovery_file_dest=' D:/app/Administrator/flash_recovery_area ' SCOPE=BOTH;
System altered.
SQL> show parameter db_recovery_file_dest
NAME TYPE VALUE
--------------------------- ----------- ------------------------------
db_recovery_file_dest string D:/app/Administrator/flash_recovery_area
db_recovery_file_dest_size big integer 3852M
SQL> show parameter db_flashback
NAME TYPE VALUE
---------------------------- -------- ------------------------------
db_flashback_retention_target integer 1440
我們看到db_flashback_retention_target 預設是1440分鐘,即24 小時,
需要注意的是該參數雖然未直接指定flash recovery area大小,但卻受其制約,
舉個例子假如資料庫每天有10%左右的資料變動的話,如果該初始化參數值設定為1440,
則flash recovery area 的大小至少要是當前資料庫實際容量的10%,
如果該初始化參數設定為2880,則flash recovery area 的大小就至少是資料庫所佔容量的20%。
修改該參數:
SQL>alter system set db_flashback_retention_target=2880 scope=both;
1.2 取消閃回恢複區
將db_recovery_file_dest參數設定為空白,可以停用閃回恢複區。
如果已經啟用flashback database,則不能取消閃回恢複區。
SQL> alter system set db_recovery_file_dest='';
alter system set db_recovery_file_dest=''
*
第 1 行出現錯誤:
ORA-02097: 無法修改參數, 因為指定的值無效
ORA-38775: 無法禁用恢複區 - 閃回資料庫已啟用
SQL> shutdown immediate
資料庫已經關閉。
已經卸載資料庫。
ORACLE 常式已經關閉。
SQL> startup mount;
ORACLE 常式已經啟動。
Total System Global Area 849530880 bytes
Fixed Size 1377896 bytes
Variable Size 637536664 bytes
Database Buffers 205520896 bytes
Redo Buffers 5095424 bytes
資料庫裝載完畢。
SQL> alter database flashback off;
資料庫已更改。
SQL> alter database open;
資料庫已更改。
SQL> alter system set db_recovery_file_dest='';
系統已更改。
SQL> show parameter db_recovery_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 3852M
SQL>
注意:
(1)DB_RECOVERY_FILE_DEST_SIZE 只有在 DB_RECOVERY_FILE_DEST 清空之後才可以清空。
(2)初始化參數 db_recovery_file_dest_size 的設定有一點點需要注意的地方:
檔案的第0塊和作業系統資料區塊頭的空間大小不包含在內,該參數並不代表實際佔用的空間大小。
如果空間被壓縮、鏡像、RAID 的話,該參數的值意義是不一樣的
更多詳情見請繼續閱讀下一頁的精彩內容: