參考資料: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的重作日誌傳輸是支持兩種方式:
要求主數據庫上的日誌寫入器等待 LNS 確認備用數據庫已經接收重作數據並已將其寫入備用重作日誌,而後才能確認到客戶端應用程序的提交。這確保了提交的全部事務都在磁盤上,並在備用位置受到保護;可是影響了主庫的性能。
不要求主數據庫上的日誌寫入器等待備用數據庫確認重作已被寫入磁盤。確認到客戶端應用程序的提交與重作傳輸是異步進行的。
異步傳輸方式會根據場景的不一樣,調節讀取日誌的方式不一樣:
DataGuard支持配置三種數據保護模式,以實現成本、可用性、性能和數據保護的平衡:
保護模式 |
主數據庫出現故障時的數據丟失風險 |
重作傳輸 |
最大保護 |
零數據丟失
|
SYNC |
最高可用性(maximum availability mode) |
零數據丟失 — 假設出現故障以前主數據庫提交事務時的同步通訊沒有中斷
|
SYNC |
最高性能(maximum performance mode) |
最小數據丟失 — 只有幾秒,具體取決於網絡帶寬
|
ASYNC |
二、 DataGuard實現自動切換
Oracle DataGuard支持使用快速啓動故障切換FSFO(fast-start failover)特性來自動將故障數據庫Failover到遠程容災節點,數據庫RTO與FastStartFailoverLagLimit參數有關,可小於30秒。
當Primary數據庫故障後,FSFO會自動地快速把原Standby數據庫切換爲爲Primary數據庫操做。FSFO的觸發條件:
FSFO只支持DataGuard配置在最高可用性(maximum availability mode)、最高性能(maximum performance mode)模式下:
三、 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))
)
)