Oracle DataGuard機制在容災場景下應用

參考資料:html

Oracle技術網:https://www.oracle.com/technetwork/cn/tutorials/smiley-fsfo-088047-zhs.html數據庫

DataGuard日誌傳輸模式:http://blog.itpub.net/12679300/viewspace-1973194/緩存

DataGuard自動切換:http://blog.itpub.net/26736162/viewspace-1811944/安全

DataGuard傳輸模式:http://blog.itpub.net/12679300/viewspace-1973194/服務器

fast-start failover(FSFO):http://blog.itpub.net/28211342/viewspace-2138894/網絡

TAF:https://blog.csdn.net/wll_1017/article/details/9469063session

TAF:http://blog.itpub.net/26736162/viewspace-1811944/oracle

 

===========================異步

Oracle RACtcp

===========================

Oracle Real Application Clusters (簡稱RAC)是屢獲獎項的 Oracle Database Enterprise Edition 的一個選件。Oracle RAC採用共享緩存體系結構的數據庫集羣。一組Oracle RAC數據庫服務器組成一個集羣,他們之間經過高速內網互聯,共享緩存。用戶經過外部網絡鏈接到數據庫集羣,當數據庫服務器有單點故障時,上層用戶不會受到任何影響。數據庫集羣共享下層的SAN存儲。

Oracle Extended Distance Cluster是 Oracle RAC的一種部署模式,經過將集羣中的服務器部署在物理分隔的位置。Oracle Extended Distance Cluster提供更勝於本地Oracle RAC的可用性。Oracle Extended Distance Cluster對距離、時延等都有較嚴格的要求,所以在現有的網絡技術及存儲技術的前提下,建議最遠的距離不超過100km,兩節點之間採用裸光纖。

Oracle異地RAC不適合於全量災備恢復,只適合防範停電,空難,洪水等災難性事故。更推薦的異地高可靠性方式是本地RAC + 異地DataGuard。

 

===========================

Oracle DataGuard

===========================

一、 DataGuard重作日誌同步原理

主數據庫的LGWR進程將重作數據寫入到本身的ORL,同時DataGuard的LNS (Log Network Server)進程捕獲日誌寫入器寫入的重作數據,並以同步或異步方式將重作數據傳輸到備用數據庫。

備用數據庫Data Guard的RFS(Remote File Server)接收重作數據,而後將其寫入一個名爲備用重作日誌(Standby Redo Log,SRL)文件的順序文件中。備用數據庫端的MRP(Managed Recovery Process)進程或者LSP進程在備用數據庫上應用這些日誌,進而同步數據。

DateGuard支持一主多備間經過重作日誌方式同步。

 

DataGuard的重作日誌傳輸是支持兩種方式:

  • 同步重作傳輸 (SYNC)

  要求主數據庫上的日誌寫入器等待 LNS 確認備用數據庫已經接收重作數據並已將其寫入備用重作日誌,而後才能確認到客戶端應用程序的提交。這確保了提交的全部事務都在磁盤上,並在備用位置受到保護;可是影響了主庫的性能。

  1. 用戶提交一個事務,事務在SGA 中建立一個重作記錄。LGWR從日誌緩衝區中讀取重作記錄,寫入ORL,而後等待LNS 的確認。
  2. LNS 從日誌緩衝區中讀取相同的重作記錄,經過Oracle Net 服務傳給備用數據庫。備用數據庫上的RFS 接收重作數據,而後將其寫入備用重作日誌文件中。
  3. 當RFS 從磁盤接收到一個寫完消息時,會將一個確認消息傳回給主數據庫上的LNS進程,LNS 接着通知LGWR 傳輸完成。LGWR 接着向用戶發送提交確認信息。

  • 異步重作傳輸 (ASYNC)

  不要求主數據庫上的日誌寫入器等待備用數據庫確認重作已被寫入磁盤。確認到客戶端應用程序的提交與重作傳輸是異步進行的。

  

  異步傳輸方式會根據場景的不一樣,調節讀取日誌的方式不一樣:

 

  1. LNS的讀取速度跟得上重作日誌產生的速度,LNS進程從日誌緩衝池中讀取重作日誌,而後經過Oracle Net服務傳給備用數據庫。
  2. 當LNS趕不上SGA重作日誌的產生速度,在將重作數據傳給備用數據庫前就回收了日誌緩衝區,LNS將自行轉爲從ORL讀取和發送重作數據,當LNS遇上進度後,將自行轉回到直接從日誌緩衝區中讀取/發送。
  3. 若是主數據庫和備用數據庫斷開鏈接(網絡故障或備用服務器故障),主數據庫將繼續處理事務並累積不能傳輸到備用數據庫的重作數據積壓並按文件歸檔,直到能創建新的網絡鏈接爲止(稱爲歸檔日誌差別)。在這種狀態下,DataGuard在主數據庫上使用ARCH進程連續Ping備用數據庫來肯定其狀態。當還原與備用數據庫的通訊後,ARCH進程會查詢備用控制文件(經過其RFS進程),來肯定備用數據庫從主數據庫收到的最後一個完整日誌文件。DataGuard肯定須要哪些日誌文件來從新同步備用數據庫,而後當即開始使用其餘ARCH進程傳輸相應文件。

 

DataGuard支持配置三種數據保護模式,以實現成本、可用性、性能和數據保護的平衡:

保護模式

主數據庫出現故障時的數據丟失風險

重作傳輸

最大保護

零數據丟失

  • Data Guard 確認事務數據安全保存到至少一臺備用服務器的磁盤上以後,主數據庫上的日誌寫入器進程纔會確認到客戶端應用程序的提交。因爲重作傳輸的同步特性,最大保護模式可能影響主數據庫的響應時間。
  • 若是沒有任何一臺備用數據庫能返回重作已被接收並寫入磁盤的確認,主數據庫將停滯(並最終崩潰)。所以此種方式下,強烈建議至少配置兩個備用數據庫。

SYNC

最高可用性(maximum availability mode)

零數據丟失 — 假設出現故障以前主數據庫提交事務時的同步通訊沒有中斷

  • Data Guard 確認事務數據安全保存到至少一臺備用服務器的磁盤上以後,主數據庫上的日誌寫入器進程纔會確認到客戶端應用程序的提交。因爲重作傳輸的同步特性,最大保護模式可能影響主數據庫的響應時間。
  • 若是沒有任何一臺備用數據庫能返回重作已被接收並寫入磁盤的確認,主數據庫處理將繼續進行。當再次創建鏈接時,Data Guard 將自動從新同步備用數據庫和主數據庫。

SYNC

最高性能(maximum performance mode)

最小數據丟失 — 只有幾秒,具體取決於網絡帶寬

  • 在這種模式下,當主數據庫處理事務時,重作數據經過ASYNC 重作傳輸異步傳輸到備用數據庫。主數據庫上的日誌寫入器不用等待備用數據庫確認便可確認到客戶端應用程序的提交。
  • 在正常操做中,可能丟失的數據量只限於在主數據庫和備用數據庫之間傳輸的數據量 — 這個量由處理主數據庫生成的重作數據量的網絡容量決定。若是有足夠的帶寬,可能丟失的總數據量很是小或爲零。

ASYNC

 

二、 DataGuard實現自動切換

Oracle DataGuard支持使用快速啓動故障切換FSFO(fast-start failover)特性來自動將故障數據庫Failover到遠程容災節點,數據庫RTO與FastStartFailoverLagLimit參數有關,可小於30秒。

當Primary數據庫故障後,FSFO會自動地快速把原Standby數據庫切換爲爲Primary數據庫操做。FSFO的觸發條件:

  • 當數據庫以正常模式(shutdown immediate/normal/transactional)關閉Primaty數據庫時,系統不會觸發FSFO。
  • 使用非正常方式shutdown abort關閉Primaty數據庫時,會觸發FSFO。

FSFO只支持DataGuard配置在最高可用性(maximum availability mode)、最高性能(maximum performance mode)模式下:

  • 最高可用性模式下,在切換時能夠保證無數據丟失(切換以前主數據庫提交事務時的同步通訊沒有中斷)。
  • 在maximum performance mode下面,會有數據丟失,丟失多少數據由FastStartFailoverLagLimit這個參數來配置。

 

三、 TAF實現數據庫切換後客戶端無縫鏈接

TAF(Transparent Application Failover),透明應用程序故障轉移,當客戶端和Oracle數據庫創建鏈接後,正在執行某個應用,此時客戶端鏈接的某個實例忽然宕機,那麼客戶端的鏈接就會被轉移到其餘健康實例上去。對於客戶端的TAF,若是執行的是update、insert等事物語句,那麼就會回退,若是是select語句,那麼會轉移到新的實例繼續執行,這個過程不須要用戶的的介入,是透明的。

TAF配置參考(http://blog.itpub.net/26736162/viewspace-1811944/):

1) 在主庫上配置一個TAF的Service

  此Service在數據庫出現故障時會發送通知給客戶端,容許查詢語句在故障轉移發生後繼續運行。

2) 創建一個存儲過程,調度TAF的Service,確保Service只在主庫運行

 

3) 建立一個觸發器,確保讓數據庫在啓動和角色轉換時運行此存儲過程

  重啓數據庫、或當數據庫切換後,執行存儲過程,觸發主庫啓動TAF的Service。

 

4) 在主庫手工啓動TAF的Service(或重啓數據庫,重啓數據會觸發 觸發器->存儲過程->TAF的Service)

  執行成功後,能夠看到TAF的Service

 

5) 在備庫查詢,確保備庫已經存在觸發器和存儲過程

 6) 客戶端配置

樣例1:

dg_taf =

    (DESCRIPTION =

        (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.59.130)(PORT = 1521))

        (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.59.131)(PORT = 1521))

            (LOAD_BALANCE = yes)

                (CONNECT_DATA =

                    (SERVER = DEDICATED)

                    (SERVICE_NAME = dg_taf_lhr.lhr.com)

                (FAILOVER_MODE =

                    (TYPE = session)

                    (METHOD = basic)

                    (RETRIES = 180)

                    (DELAY = 5)

               )

        )

)

樣例2:(73/74是主站點主庫的RAC、75/76是備站點備庫的RAC)

iccc =

    (DESCRIPTION_LIST=(LOAD_BALANCE=off) (FAILOVER=on)

        (DESCRIPTION= (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)

            (ADDRESS_LIST= (LOAD_BALANCE=on)

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.73)(PORT=1526))

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.74)(PORT=1526))

            )

            (CONNECT_DATA=(SERVICE_NAME=service_ora))

        )

        (DESCRIPTION= (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)

            (ADDRESS_LIST= (LOAD_BALANCE=on)

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.75)(PORT=1526))

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.76)(PORT=1526))

            )

            (CONNECT_DATA=(SERVICE_NAME=service_ora))

        )

)

相關文章
相關標籤/搜索