萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> Oracle Rac數據不同步問題

Oracle Rac數據不同步問題

現在有這樣的環境:

一台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將需要更多的系統資源

copyright © 萬盛學電腦網 all rights reserved