Boss要求零數據丟失,Data Guard的三種保護模式如何選擇?
公司現在越來越重視數據的災備,部署了大量的Data Guard和Oracle GoldenGate。核心系統的數據非常重要,大boss的要求很簡單就是數據零丟失。
仔細衡量Data Guard的三種保護模式,在最大可用和最大保護之間展開了激烈的討論。下面從技術層面看看這兩種保護模式的特點和區別。
零數據丟失:
在DataGuard中同步傳輸SYNC(synchronous transport)又稱為零數據丟失。因為要等到確認事務恢復所需要的redo數據已經被寫入備用數據庫的磁盤上(StandbyLogFile),才允許LGWR認可提交操作成功。
最高可用:
- ALTER DATABASE SET STANDBY TO MAXIMIZE AVAILABILITY;
這個模式最強調可用性,其次強調零數據損失保護。該模式使用SYNC(同步)方式傳輸redo數據,因此從備用數據庫收到“redo數據已經寫入磁盤”確認消息所需的時間會影響主庫的性能。但是在主庫出現故障時,通??梢园俜职俦Wo數據。
然而網絡故障或者備用數據庫出現故障,將無法向備用數據庫傳輸redo,而主庫仍能繼續接收新事物。 配置最高可用時,其最長等待秒數有NET_TIMEOUT的值決定(默認30秒),此后將放棄備用目標,即使仍然無法與備用數據庫通信,也允許主數據庫繼續進行處理。當連接重新建立后,主庫將強制切換一次日志,關閉current redo log,防止在間隔再同步過程中redo傳輸進一步滯后。僅當在自動重新同步進程尚未完成前,主庫又一次出現故障時才可能丟失數據。
最高保護:
- ALTER DATABASE SET STANDBY TO MAXIMIZE PROTECTION;
采用SYNC同步redo數據傳輸模式,直到收到配置中至少一個備用數據庫的確認消息(恢復事務所需的數據已經可靠第保存在磁盤上),主數據庫才確認提交。與最高可用不同的是,它不再考慮NET_TIMEOUT參數。如果主數據庫未能從SYNC備用數據庫收到確認消息,主數據庫將停下來并最終終止,防止出現未保護提交的情形。
最高性能:
就是快在ASYNC,異步傳輸模式上。LGWR進程不必等待LNS的確認消息。該種方法不再考慮范圍之內。
最高可用vs最大保護
最大可用顧名思義是以可用為第一目標,安全性會為了可用性自動降級。它的阿基里斯之踵就是在NET_TIMEOUT超時后,主庫會繼續處理事務,等到當前redo寫滿,開始進入歸檔模式時才會再次嘗試連接備用數據庫。這個期間主庫與備庫的數據時不一致的,出現災難場景failover后回丟失數據。
可是最大保護呢,這個反對呼聲也非常高,就是擔心網絡問題或是備庫問題導致無法及時給主庫的LGWR反饋信息,使主庫掛掉。
解決方案:
其實滿足boss的零數據丟失,可以采用最大保護模式。為主庫創建2個或3個最大保護模式的同城災備,一個備庫在同機房不同機柜,其它的備庫在不同的機房(可能相隔幾公里)。當主庫發起一個事物提交動作,LGWR進程將redo log buffer中的內容寫入redo log file同時LNS進程將該redo log buffer中的信息發送給備用數據庫。這時只要有一個最大保護模式的備用數據庫成功收到該數據并寫入standby log file中就會給主庫的LGWR進程反饋成功,主庫會繼續處理事務。并不需要所有的備用數據庫都向它反饋。 從某個角度來看該方法更像是解決備用數據庫的“單點故障”。當然只有一臺備用數據庫,并且采用了最大保護模式還是有影響主庫的可能性。