2010-11-30 3 views
2

2つの接続を使用してアプリケーションを2つのOracleデータベースに呼び出します。特定の機能については、分散トランザクションを使用します。接続文字列にEnlist = falseがあり、トランザクションへの接続を手動で登録します。 問題は、分散トランザクション内で同じレコードを非常に頻繁に更新するシナリオがあり、前回の実行でコミットされたデータを表示するのに遅延が見られます。ODACを使用して2つの接続がOracleのトランザクションに登録されている場合に、コミットと選択間の遅延/遅延

ex。

using (OracleConnection connection1 = new OracleConnection()) 
{ 
    using(OracleConnection connection2 = new OracleConnection()) 
    { 
    connection1.ConnectionString = connection1String; 
    connection1.Open(); 
    connection2.ConnectionString = connection2String; 
    connection2.Open(); 

    //for 100 times, do an update 
    { 
    .. check the previously updated value 

    connection1.EnlistTransaction(currentTransaction); 
    connection2.EnlistTransaction(currentTransaction); 

    .. do an update using connection1 
    .. do some updates with connection2 
    } 
    } 
} 

上記コードのように、私たちは次の繰り返しで以前に更新された値を更新して確認します。この問題は、過去の繰り返しでコミットされたにもかかわらず、次の反復で最後の反復でコミットされた更新が表示されない単一のレコードに対して頻繁に実行するときに発生します。しかし、このアップデートが発生すると、このアップデートは非常に小さな遅延で他のアプリケーションにも表示され、コード内でさえ、デバッグして再度実行すると表示されます。 前のコミットがコードから返されても、コミットの遅延に似ています。 いずれかのアイデアがありますか?

+0

これは、Oracle 11g with ODAC(.Net用Oracle Data Access Component) –

答えて

1

ODACを使ってこの動作を制御する方法がないことが判明しました。したがって、唯一実行可能な解決策は、非常にまれにしか発生しないため、10秒後に再試行するため、コード内で再試行動作を実装することでした。

Additional details on things I that I found on this can be found here

関連する問題