Oracle數據庫的閃回恢復區

Oracle9i開始提供閃回查詢,以便能在須要的時候查到過去某個時刻的一致性數據,這是經過Undo實現的。這個功能有很大的限制,就是相關事務的undo不能被覆蓋,不然就無力迴天了。oracle10g大大的加強了閃回查詢的功能,而且提供了將整個數據庫回退到過去某個時刻的能力,這是經過引入一種新的flashback log實現的。flashback log有點相似redo log,只不過redo log將數據庫往前滾,flashback log則將數據庫日後滾。爲了保存管理和備份恢復相關的文件,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:指定數據庫能夠回退的時間,單位爲分鐘,默認1440分鐘,也就是一天。固然,實際上可回退的時間還決定於閃回恢復區的大小,由於裏面保存了回退所須要的 flash log。因此這個參數要和db_recovery_file_dest_size配合修改。
2.啓動flashback database
設置了閃回恢復區後,能夠啓動閃回數據庫功能。
首先,數據庫必須已經處於歸檔模式
那麼如何設置歸檔呢?很簡單的步驟
1.關閉數據庫
SQL> shutdown immediate;
2.啓動數據庫爲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號
%d 數據庫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
而後,啓動數據庫到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;
數據庫已更改。
SQL> alter database open;
數據庫已更改。
SQL>selectFLASHBACK_ONfrom v$database;
FLASHBACK_ON
------------------------------------
YES
3.取消閃回恢復區
將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: 沒法禁用快速恢復區 - 閃回數據庫已啓用
因此,必須先禁用flashback database,才能取消閃回恢復區
SQL> shutdown immediate;
數據庫已經關閉。
已經卸載數據庫。
ORACLE 例程已經關閉。
SQL> startup mount;
ORACLE 例程已經啓動。
Total System Global Area 142606336 bytes
Fixed Size 1247732 bytes
Variable Size 83887628 bytes
Database Buffers 50331648 bytes
Redo Buffers 7139328 bytes
數據庫裝載完畢。
SQL>alter database flashback off;
數據庫已更改。
SQL> alter database open;
數據庫已更改。
SQL> alter system set db_recovery_file_dest='';
系統已更改。
4.閃回恢復區的內容
全部和恢復相關的文件均可以存放到閃回恢復區
SQL>select file_type from v$flash_recovery_area_usage;
FILE_TYPE
------------------------
CONTROLFILE
ONLINELOG
ARCHIVELOG
BACKUPPIECE
IMAGECOPY
FLASHBACKLOG
已選擇6行。
上面的視圖中能夠看出,包括controfile,online redo logfile,archive logfile,rman backup
piece,rman p_w_picpath copy, flashback log等,均可以利用閃回恢復區來存放、管理。
5.閃回恢復區的一些限制
若是設置了閃回恢復區,則log_archive_dest和log_archive_duplex_dest將不可用
alter system set log_archive_dest='e:/'
*
第 1 行出現錯誤:
ORA-02097: 沒法修改參數, 由於指定的值無效
ORA-16018: 沒法將 LOG_ARCHIVE_DEST 與 LOG_ARCHIVE_DEST_n 或
DB_RECOVERY_FILE_DEST 一塊兒使用
SQL> alter system set log_archive_duplex_dest='e:/';
alter system set log_archive_duplex_dest='e:/'
*
第 1 行出現錯誤:
ORA-02097: 沒法修改參數, 由於指定的值無效
ORA-16018: 沒法將 LOG_ARCHIVE_DUPLEX_DEST 與 LOG_ARCHIVE_DEST_n 或
DB_RECOVERY_FILE_DEST 一塊兒使用
設置閃回恢復區後,若是沒有設置過log_archive_dest_n參數,則歸檔日誌默認是保存到該區域的
SQL> archive log list
數據庫日誌模式 存檔模式
自動存檔 啓用
存檔終點 USE_DB_RECOVERY_FILE_DEST
最先的聯機日誌序列 245
下一個存檔日誌序列 247
當前日誌序列 247
實際上,oracle是經過隱式的設置log_archive_dest_10='location= USE_DB_RECOVERY_FILE_DEST'來實現的。因此,若是以後你修改過log_archive_dest_n將歸檔日誌保存到其餘位置,也能夠修改該參數繼續使用閃回恢復區。
多個數據庫的閃回恢復區能夠指定到同一個位置,可是db_name不能同樣,或者db_unique_name不同。
RAC的閃回恢復區必須位於共享磁盤上,能被全部實例訪問。
6.閃回恢復區的空間管理
當閃回恢復區空間不足(使用超過85%)時,alert中會有警告記錄
Tue Dec 19 10:45:41 2006
Errors in file e:/oracle/ora10/admin/ning/bdump/ning_rvwr_31968.trc:
ORA-19815: 警告: db_recovery_file_dest_size 字節 (共 52428800 字節) 已使用 87.29%, 尚有6665216 字節可用。
同時,oracle在alert中還會給出解決該問題的建議
Tue Dec 19 10:45:41 2006
************************************************************************
You have following choices to free up space from flash recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
system command was used to delete files, then use RMAN CROSSCHECK and
DELETE EXPIRED commands.
************************************************************************
若是閃回恢復區空間耗盡,且歸檔路徑設置到了閃回恢復區中,則因爲日誌沒法歸檔,數據庫會hang住。
Tue Dec 19 10:45:57 2006
Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:
ORA-19815: 警告: db_recovery_file_dest_size 字節 (共 52428800 字節) 已使用 100.00%, 尚有 0 字節可用。
Tue Dec 19 10:45:57 2006
Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:
ORA-19809: 超出了恢復文件數的限制
ORA-19804: 沒法回收 6836224 字節磁盤空間 (從 52428800 限制中)
ARC0: Error 19809 Creating archive log file to
'E:/ORACLE/ORA10/FLASH_RECOVERY_AREA/NING/ARCHIVELOG/2006_12_19/O1_MF_1_250_U_.ARC'
ARC0: Failed to archive thread 1 sequence 250 (19809)
ARCH: Archival stopped, error occurred. Will continue retrying
Tue Dec 19 10:45:58 2006
Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:
ORA-16038: 日誌 1 序列號 250 沒法歸檔
ORA-19809: 超出了恢復文件數的限制
ORA-00312: 聯機日誌 1 線程 1: 'E:/ORACLE/ORA10/ORADATA/NING/REDO01.LOG'
因此,對於生產庫,若是將歸檔放到閃回恢復區中,須要密切關注閃回恢復區的空間使用狀況,不然一旦閃回恢復區的空間用盡,將致使數據庫沒法提供服務。
經過查詢視圖v$flash_recovery_area_usage,能夠得到當前閃回恢復區的空間使用狀況,而且能夠知道
是哪些文件佔中了空間,據此能夠作出相應的處理,或者加大閃回恢復區,或者移走相應的文件。
PHP code:--------------------------------------------------------------------------------
SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------ ------------------ ------------------------- ---------------
CONTROLFILE                0                        0              0
ONLINELOG                    0                        0               0
ARCHIVELOG                91                        0             16
BACKUPPIECE               0                         0              0
IMAGECOPY                   0                         0               0
FLASHBACKLOG             8                        4              2
已選擇6行。
----------------------------------------------------------------------------------
另外,v$recovery_file_dest視圖也提供了閃回恢復區的概要信息。
SQL> select * from v$recovery_file_dest; NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES ----------------------------------- ----------- ---------- ----------------- --------------- Eracleora10flash_recovery_area 104857600 101835264 0 17
相關文章
相關標籤/搜索