中國傳媒大學南廣學院 薛雁丹 卜言彬 陳 婷 楊 艷 楊文娟
Oracle數據庫任意距離零數據丟失保護的解決方案
中國傳媒大學南廣學院 薛雁丹 卜言彬 陳 婷 楊 艷 楊文娟
為實現數據庫長距離零數據丟失保護和可用性,提出了實時遠程同步的解決方案。Oracle Active Data Guard(ADG)實時遠程同步解決方案實現零數據丟失保護擴展至位于主數據庫任意距離的一個或多個備用數據庫,并且不會因此影響性能,避免核心的任務關鍵型的Oracle數據庫發生單點故障,而且成本和復雜性最小,從而避免在數據保護上做出讓步。
零數據丟失;遠程同步;實時處理
ADG與 Oracle 數據庫深度集成,完全專注于實時數據保護和可用性,是Oracle數據庫發生單點故障的最全面的全庫級數據復制解決方案,它具備數據保護和自動檢測恢復的雙重能力。如果主數據庫因各種原因導致不可用,那么,通過ADG解決方案不僅可提供零數據丟失保護,還可實現近似即時恢復。但是,當主數據庫與備用數據庫相隔很遠時,任何實時同步復制方法都會對數據庫的性能產生影響,這使得實現零數據丟失保護變得不切實際,而ADG 遠程同步可將零數據丟失保護擴展到和主數據庫任意距離的備用數據庫上。
數據庫業務連續性是IT系統連續性的核心,但由于種種原因可能導致數據庫系統不可用。因此,在不影響生產數據庫性能前提下,零數據丟失保護尤為重要。
2.1 Data Guard(DG)零數據丟失保護
要實現零數據丟失保護,要求生產數據庫與備用數據庫之間必須進行同步通信,DG通常采用最高可用性保護模式和重做同步傳輸相結合的配置方式來實現。采用這種方案后,用戶在主數據庫中提交事務時,Oracle 會生成重做并寫入本地聯機日志文件,同時, DG傳輸服務立即從主庫日志緩沖區中將相同的重做傳輸到備用數據庫,并將其寫入備用重做日志文件,然后返回寫入成功的確認信息給主庫。即同步傳輸需要主數據庫等待本地和遠程日志文件寫入完成,然后再向應用程序發送提交成功通知,一個交易事務才算完成。然而,隨著主庫與備用庫之間距離的增加,確認遠程日志文件寫入所需的總往返時間可能會對主庫的性能影響非常大,以至于實現零數據丟失保護變得不切實際。
2.2 ADG遠程同步零數據丟失保護
ADG遠程同步可實現零數據丟失故障快速切換至遠程的備用數據庫。遠程同步在距離主數據庫可接受的范圍內部署一個遠程同步實例實現同步傳輸。遠程同步實例是輕量級的 Oracle實例,僅包含控制文件、Spfile、口令文件和備用日志文件,只需少量的計算和內存資源。遠程同步實例通過同步傳輸從主數據庫接收重做日志,并立即通過異步傳輸方式將該重做轉發至最多29 個遠程備用數據庫,如圖1所示。

圖1 ADG遠程同步架構
利用遠程同步,實現跨廣域網零數據丟失保護和故障切換。另外,遠程同步實例可分流主庫的負載壓力,如解析遠程備用庫所接收的歸檔日志中的差異、多個備用庫的重做傳輸開銷和重做壓縮等。
根據應用場景和高可用的需要,可以采用不同的遠程同步部署架構,以下介紹三個常見的遠程同步架構。
3.1 單遠程同步實例配置方案
這是最基本的配置方案,使用一個遠程同步實例將主數據庫零數據丟失故障切換擴展至遠程備用數據庫,如圖2所示。通常情況下,遠程同步實例與主數據庫部署在城域內的不同位置,以免受站點的故障影響正常的容災系統。遠程同步實例即使部署在同一個數據中心內部仍有一定的好處,除完全站點故障之外,主數據庫所有無法恢復的故障都可快速地進行零數據丟失切換到備用庫。

圖2 單遠程同步實例配置
在本配置方案中,如果遠程同步實例發生故障、中斷服務, ADG可自動使用異步傳輸方式直接傳輸重做到遠程的備用數據庫,以實現接近零的數據丟失保護。一旦遠程同步實例修復并重新建立連接,ADG自動恢復為零數據丟失保護模式。
3.2 采用高可用的遠程同步實例配置方案
高可用的遠程同步配置方案建立在上一方案之上,它以HA的方式增加了第二個遠程同步實例作為第一個遠程同步實例的備用目標,如圖3所示。假如正在服務的遠程同步實例發生故障中斷,則ADG自動地切換到另一個遠程同步實例,最大程度地降低了對零數據丟失保護的中斷。

圖3 零數據丟失保護的 HA 配置
HA的切換通常需要幾秒鐘的時間。也可采用Oracle RAC部署遠程同步實例,即RAC的健康節點可快速接管服務,可消除或盡量縮短遠程同步中斷期間配置低于零數據丟失保護級別的時間段。
角色轉換之后的零數據丟失保護配置方案
當故障發生后,主備數據庫角色轉換,為快速恢復零數據丟失服務水平,建議采用本配置方案。本方案建立于方案1和方案2之上,即在遠程備用數據庫的城域距離內增加一個遠程同步實例(圖4)。當備用數據庫處于備用角色時,這個遠程同步實例處于Standby狀態。當備用數據庫轉換為主數據庫角色時,該遠程同步實例轉為活動狀態,允許零數據丟失故障切換至新的備用數據庫(原主數據庫)。當原主數據庫處于備用角色時,其本地的遠程同步實例變為非活動狀態。