2 つの接続を使用して 2 つの Oracle データベースを呼び出すアプリケーションがあります (これらはアプリケーション全体で開かれています)。特定の機能については、分散トランザクションを使用します。接続文字列に Enlist=false を指定し、トランザクションへの接続を手動で登録します。問題は、分散トランザクション内で同じレコードを非常に頻繁に更新するシナリオで発生し、前回の実行でコミットされたデータを表示するのに遅延が見られます。
元。
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
}
}
}
上記のコード フラグメントのように、次の繰り返しで以前に更新された値を更新してチェックします。単一のレコードに対してこれを頻繁に実行すると、前の反復でコミットされたにもかかわらず、次の反復の最後の反復でコミットされた更新が表示されない場合に問題が発生します。しかし、これが発生すると、この更新は非常にわずかな遅延で他のアプリケーションに表示され、コード内でさえ、行をデバッグして再度実行すると表示されます。前のコミットがコードから返されたとしても、コミットの遅延のようなものです。誰にもアイデアはありますか?