Redo Gap 處理與優化

張衝andy發表於2017-03-11

理論背景

當redo data 傳送發生中斷時就會產生redo gap。當redo 傳送恢復正常以後,redo transport service 會自動檢測redo gap併傳送缺失的redo 到destination。解決redo gap的時間與gap 的數量和網路有一定的關係。 Gap越少,網路越好,解決gap就會越快。

手工解決 Gap 問題

在Oracle 11g裡,Data Guard 切換多了一個新的功能:flush redo。
SQL> alter system flush redo to target_db_name;
Flush 能把沒有傳送的redo 從主庫傳送到standby庫。 只要主庫能啟動到mount 狀態,
那麼Flush 就可以把沒有傳送的歸檔和current online redo 傳送到備庫。

1 解決物理standby Gap問題

1.1 物理standby 庫上執行如下SQL,判斷是否存在gap:
SQL> SELECT * FROM V$ARCHIVE_GAP;
THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#
----------- ------------- --------------
1 8 11

1.2 主庫查詢,確認一下:
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 7 AND 11;
NAME
--------------------------------------------------------------------------------
/primary/thread1_dest/arcr_1_8.arc 
/primary/thread1_dest/arcr_1_9.arc
/primary/thread1_dest/arcr_1_10.arc

1.3 把這些歸檔copy到物理standby,並使用ALTER DATABASE REGISTER LOGFILE應用這些歸檔:

SQL> ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_7.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_8.arc';
SQL> ALTER DATABASE REGISTER LOGFILE '/physical_standby1/thread1_dest/arcr_1_9.arc';

2 解決邏輯standby Gap問題

2.1 對於logical standby database,在logical standby database上查詢DBA_LOGSTDBY_LOG檢視。 
SQL> COLUMN FILE_NAME FORMAT a55
SQL> SELECT THREAD#, SEQUENCE#, FILE_NAME FROM DBA_LOGSTDBY_LOG L WHERE NEXT_CHANGE# NOT IN 
(SELECT FIRST_CHANGE# FROM DBA_LOGSTDBY_LOG WHERE L.THREAD# = THREAD#) ORDER BY THREAD#, SEQUENCE#;

THREAD# SEQUENCE# FILE_NAME
---------- ---------- -----------------------------------------------
1 6 /disk1/oracle/dbs/log-1292880008_6.arc
1 10 /disk1/oracle/dbs/log-1292880008_10.arc

正常情況下,這裡每個trhead只返回一個最高值,這裡返回2個,說明的7,8,9確實了。

2.2 Copy 缺失的log file到logical standby database,然後註冊:
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/disk1/oracle/dbs/log-1292880008_7.arc'; 
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/disk1/oracle/dbs/log-1292880008_8.arc';
SQL> ALTER DATABASE REGISTER LOGICAL LOGFILE '/disk1/oracle/dbs/log-1292880008_9.arc';

優化:

在網路條件不好的情況下,Redo transport services有2個可選的引數,可以提高恢復速度:
(1)Redo Transport Compression
壓縮屬性是在LOG_ARCHIVE_DEST_n 引數中指定,指定後,會在傳送之前對redo data進行壓縮,從減少傳送的時間。 
日誌檔案的壓縮比很高,對效能會有很大的提高。但會消耗一定的CPU 資源。
(2)Parallel Redo Transport Network Sessions
MAX_CONNECTIONS 屬性同樣也是在LOG_ARCHIVE_DEST_n 引數中指定,可以指定多個sesion 來同時傳送redo data。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2135151/,如需轉載,請註明出處,否則將追究法律責任。

相關文章