Forums: Open Discussion (Thread #12874)

更新前のデータが取得される (2006-11-17 12:59 by k-daigo #26053)

lavansutilのJDBCを使用させてもらっています。
現在、解せない症状が発生しており困っています。

現象:
OracleRAC環境にて、データ更新直後に同一データの取得をを行うと更新前のデータが取得される時がある。
特にDBが負荷状態の時に頻発する。

上記の様な現象の事例はありませんでしょうか?
ご存知の方がおりましたら教えてください。

使用環境は以下の通りです。
JDK1.4.2.09
lavansutil-1.3
Oracle9.0.1.3 2ノードRAC
ojdbc14.jar

また、lavansutil.xmlの記述は以下の通りです。
<lavansutil>
<database statistics="false">
<default
max_connections="500"
init_connections="1"
force_check_connection="true"
valid_sql="SELECT * FROM DUAL"
driver="oracle.jdbc.driver.OracleDriver"
cluster_node="2"
url="jdbc:oracle:thin:@xxxx01:1521:orcl1"
url2="jdbc:oracle:thin:@xxxxx02:1521:orcl2"
user="username"
pass="pass"
logging="false"
/>
</database>
</lavansutil>

RE: 更新前のデータが取得される (2007-10-23 11:44 by yuk #32929)

すいません、ポストされているのに気づきませんでした。
とっくに解決しているかもしれませんが、これコミットした先のOracleノードとselectしたノードは違いますよね?

OracleRAC環境ではコミットが完了していてもキャッシュフュージョンが完了するまでは、他ノードで古いデータを取得してしまいます。
キャッシュフュージョンの間隔は設定できます。
詳しくはOracleのマニュアルをあたってください。
もちろん更新間隔を短くすると負荷があがります。

回避方法としては、どうしてもコミット直後のデータが
欲しい場合は、同一ノードに接続するようにするしか
ないみたいです。
Reply to #26053