搭建過dg的同窗確定很是清楚歸檔日誌和備份的重要性,這些歸檔日誌從主庫傳輸到備庫,在備庫被apply。linux
思考一個問題:主庫的歸檔日誌是怎麼管理呢,備庫的歸檔又該怎麼管理呢?數據庫
在11g裏面,隨着ASM、RAC、Data Guard(包括Active Data Guard)的成熟,使用RAC+ASM+Data Guard愈來愈成爲一種可靠的、維護簡單、穩定的高可用性和容災保護方案。這篇文章談談如何管理Oracle 11g Data Guard環境中的歸檔日誌。app
歸檔日誌是重要的,否則就沒必要提到這篇文章,備份恢復須要它,而Data Guard也須要它。在早期版本的Data Guard環境中,經常面臨着歸檔日誌管理問題。在Data Guard環境裏面,對歸檔日誌管理須要達到如下幾個方面的要求或者說是需求:測試
幸運的是,在11g環境裏面,上述的幾點很容易就知足,那就是隻須要作到如下幾點。spa
完成了上述幾個步驟,那麼歸檔管理的要求基本上就達到了。經過這樣的設置,實現的效果以下:日誌
注意上面最後一點,當快速恢復區空間緊張時,Oracle開始刪除歸檔日誌,刪除的條件還包括歸檔日誌已經應用到備庫,這種狀況下若是歸檔日誌尚未備份,也會被刪除掉。這裏的問題是,文檔中描述的快速恢復區空間緊張,具體是指什麼時間?也就是快速恢復區的空間消耗多少百分比的時候纔算是空間緊張?在MOS文章《Files being deleted in the flash recovery area, messages in the alert log Deleted Oracle managed file <filename> (Doc ID 1369341.1)》裏面有提到,空間使用率達到80%之後就開始刪除文件(歸檔日誌)。code
Oracle在往快速恢復區存儲文件時,其步驟大概是這樣的:Oracle估計須要的空間大小(切換日誌時就是歸檔日誌大小),而後將這個大小與當前的佔用空間大小相加,看是否超過了80%,若是超過了,那麼就回收空間(回收的空間應大於等於新建文件須要的空間大小,也就是回收的空間以夠用爲原則)。若是不能回收空間(好比歸檔日誌沒有被應用到備庫),那就只能繼續佔用新的空間,直到空間耗盡。事件
這裏的問題是,假設快速恢復區設定了200G空間,那麼在使用到80%,也就是160G的時候就開始回收空間。那麼咱們在估算空間時,就應該上浮20%。好比咱們要求保留24小時歸檔,這24小時以內歸檔量最大是200G,那麼咱們應該爲快速恢復區設置240G左右的容量。文檔
那麼,這個80%的比率可以更改嗎以便延遲Oracle刪除歸檔日誌的時間嗎?答案是確定的。沒有相應的數據庫參數來設定,可是能夠經過事件來設置,事件號是19823:get
- oerr ora 19823
- 19823, 00000, "soft limit recovery area space pressure percentage"
- // *Document: NO
- // *Cause: Set on all instances to alter recovery area space pressure
- // trigger percentage.
- // *Action: level 1 to 100 indicates the percentage when the space
- // pressure has to be triggered.
下在是一個測試:
測試環境:主庫是Oracle 11.2.0.3 for Linux兩節點RAC,備庫是Oracle 11.2.0.3 for linux單實例庫。測試是在主庫的節點1上進行的,其在線日誌大小爲512MB,快速恢復區指定的大小爲16GB。
當前主庫的FRA(快速恢復區)的使用率已經接近於80%:
select * from V$RECOVERY_AREA_USAGE; FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES -------------------- ------------------ ------------------------- --------------- CONTROL FILE 0 0 0 REDO LOG 15.33 0 13 ARCHIVED LOG 64.04 63.81 45 BACKUP PIECE .24 0 1 IMAGE COPY 0 0 0 FLASHBACK LOG 0 0 0 FOREIGN ARCHIVED LOG 0 0 0
發現FRA(快速恢復區)的空間使用率基本上在80%左右。alert日誌也有相應的刪除較早的歸檔日誌的信息:
- Thu Jan 02 12:28:50 2014
- Thread 1 advanced to log sequence 981 (LGWR switch)
- Current log# 12 seq# 981 mem# 0: +DATA1/ractest/onlinelog/group_12.299.835542549
- Current log# 12 seq# 981 mem# 1: +DG_FLA/ractest/onlinelog/group_12.298.835542551
- Thu Jan 02 12:28:50 2014
- LNS: Standby redo logfile selected for thread 1 sequence 981 for destination LOG_ARCHIVE_DEST_2
- Thu Jan 02 12:28:50 2014
- Deleted Oracle managed file +DG_FLA/ractest/archivelog/2014_01_02/thread_2_seq_309.424.835783855
- Deleted Oracle managed file +DG_FLA/ractest/archivelog/2014_01_02/thread_1_seq_947.426.835783855
- Deleted Oracle managed file +DG_FLA/ractest/archivelog/2014_01_02/thread_1_seq_948.437.835784237
- Archived Log entry 2645 added for thread 1 sequence 980 ID 0xc8804744 dest 1:
上面的日誌也能夠看到其過程是:切換日誌;刪除不須要的最老的歸檔日誌;生成新的歸檔日誌。
如今咱們利用事件19823將這個比率調到95%看看會是什麼樣子:
SQL> alter system set event='19823 trace name context forever,level 95' scope=spfile sid='*';
而後重啓主庫。再運行上面的測試代碼,發現Oracle再也不刪除歸檔日誌,而是到接近95%的空間使用率時再開始刪除歸檔日誌:
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES -------------------- ------------------ ------------------------- --------------- CONTROL FILE 0 0 0 REDO LOG 15.33 0 13 ARCHIVED LOG 68.99 65.72 49 BACKUP PIECE .24 0 1 IMAGE COPY 0 0 0 FLASHBACK LOG 0 0 0 FOREIGN ARCHIVED LOG 0 0 0 ............. FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES -------------------- ------------------ ------------------------- --------------- CONTROL FILE 0 0 0 REDO LOG 15.33 0 13 ARCHIVED LOG 78.62 59.9 55 BACKUP PIECE .24 0 1 IMAGE COPY 0 0 0 FLASHBACK LOG 0 0 0 FOREIGN ARCHIVED LOG 0 0 0
從上面的最後一次對v$recovery_area_usage的查詢數據能夠看到,此時空間利用率達到了94.19%,離95%已經很接近(在線日誌的大小是512MB,佔快速恢復區的3.1%,若是在快速恢復區裏面多一個文件就會超過95%)。
接下來咱們將這個比率調整到50%,看看是什麼結果:
SQL> alter system set event='19823 trace name context forever,level 50' scope=spfile sid='*';
而後重啓主庫。再運行上面的測試代碼,發現Oracle在刪除歸檔日誌,可是每次均刪除的日誌只須要容納要新增的文件便可,不會一會兒刪除到使利用率到50%如下:
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES -------------------- ------------------ ------------------------- --------------- CONTROL FILE 0 0 0 REDO LOG 15.33 0 13 ARCHIVED LOG 72.47 48.57 54 BACKUP PIECE .24 0 1 IMAGE COPY 0 0 0 FLASHBACK LOG 0 0 0 FOREIGN ARCHIVED LOG 0 0 0
而後一直使用alter system switch logfile命令,每執行一次,Oracle會刪除一個歸檔日誌,到最後快速恢復區的空間利用率到接近於50%。
- Thu Jan 02 12:56:29 2014
- Thread 1 advanced to log sequence 1004 (LGWR switch)
- Current log# 12 seq# 1004 mem# 0: +DATA1/ractest/onlinelog/group_12.299.835542549
- Current log# 12 seq# 1004 mem# 1: +DG_FLA/ractest/onlinelog/group_12.298.835542551
- Thu Jan 02 12:56:30 2014
- Deleted Oracle managed file +DG_FLA/ractest/archivelog/2014_01_02/thread_1_seq_963.317.835788195
- Thu Jan 02 12:56:30 2014
- LNS: Standby redo logfile selected for thread 1 sequence 1004 for destination LOG_ARCHIVE_DEST_2
- Archived Log entry 2703 added for thread 1 sequence 1003 ID 0xc8804744 dest 1:
- FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
- -------------------- ------------------ ------------------------- ---------------
- CONTROL FILE 0 0 0
- REDO LOG 15.33 0 13
- ARCHIVED LOG 33.29 28.86 65
- BACKUP PIECE .24 0 1
- IMAGE COPY 0 0 0
- FLASHBACK LOG 0 0 0
- FOREIGN ARCHIVED LOG 0 0 0
所以,咱們能夠了解event 19823的用途。對於空間容量比較小的主機,可是但願歸檔可以儘可能保留在快速恢復區,以便留有足夠的備份時間窗口,那麼能夠考慮把這個百分比調整到更大,好比90%,95%等。