2

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
   }
  }
 }

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

4

1 に答える 1

1

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

これについて私が見つけたものの詳細については、こちらを参照してください

于 2010-12-18T17:49:24.963 に答える