(轉)Oracle Rac 資料不同步解決方案

mahanso發表於2010-10-26

現在有這樣的環境:
一臺web Server,一個是純JAVA APP 程式
資料庫兩臺做成RAC的形式。 web Server與APP 程式都透過oci(rac)的方式連線
資料庫。

出了這樣的怪問題,webServer更新或是插圖入一條資料,後面緊跟著的在APP中就查詢不到,等到用工具查詢就沒有問題.

初步懷疑
1. RAC方式下面的資料庫兩個instance的同步沒做好?

查詢相關資料發現在與MAX_COMMIT_PROPAGATION_DELAY有關.

最大提交傳播時延(MAX_COMMIT_PROPAGATION_DELAY,簡稱MCPD),在ORACLE RAC(或OPS)環境中才使用,表示在RAC系統中,一個instance系統提交產生的最新系統改變碼(SCN),能夠以多快的速度反應到另一個instance中。
舉例說明,RAC系統,有A,B兩個例項(instance),A、B本地系統改變碼為SCN1,A更新資料DATA1提交, LGWR操作完成後,A本地系統改變碼為SCN2,經過不大於MAX_COMMIT_PROPAGATION_DELAY時間後,B系統本地改變碼才變為SCN2。

Global Cache Services 將重新整理RAC中的SCN。不管SCN是否及時重新整理,後續的資料查詢都不會因此產生資料庫錯誤。但,在此時間內,有可能查詢結果不是最新資料,產生讀一致性(read consistency)問題。

RAC環境中的所有例項,此引數值必須相同。
ORACLE8i後,建議常用的兩個值是0和700(預設),其他數值皆不建議。其實,這兩個數值就代表了RAC環境中,兩種SCN 產生機制:
Lamport Scheme和 Broadcast on Commit scheme。
設定為預設值700,表示採用Lamport Scheme,SCN改變不會完全同步,同步將在 7秒鐘內完成,而不是總等待7秒鐘後才完成。如果系統比較空閒,同步可能在0.5秒(甚至更短時間)內完成;不管系統多繁忙,同步時間也不可能超過7秒。不難理解,採用此模式,整個RAC系統的執行效率較高。
設定為0,表示採用Broadcast on Commit scheme,SCN改變完全同步。每當commit時(即LGWR 寫redo log時):
- LGWR傳送訊息更新全域性SCN(global SCN),
- LGWR 傳送訊息給每個活動的例項更新其本地SCN(local SCN)。
有資料說,只要MCPD < 700,系統將採用Broadcast on Commit scheme。
Lamport Scheme能夠適應絕大部分應用的要求,只有個別實時性特別高的業務,才需要Broadcast on Commit scheme。透過分析,不難理解,Broadcast on Commit scheme將需要更多的系統資源

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12272958/viewspace-676787/,如需轉載,請註明出處,否則將追究法律責任。

相關文章