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


























