使用ODAC将两个连接登记到Oracle中的事务时,提交和选择与分布式事务之间的延迟/延迟

时间:2010-11-30 10:09:17

标签: oracle distributed-transactions odac

我们的应用程序使用两个连接(在整个应用程序中保持打开状态)调用两个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
   }
  }
 }

与上面的代码片段一样,我们会在下一次迭代中更新并​​检查先前更新的值。当我们经常针对单个记录运行此问题时会出现问题,即使它在上一次迭代中提交,我们也不会在下一次迭代的最后一次迭代中看到提交的更新。但是当发生这种情况时,这个更新在其他应用程序中可以在非常小的延迟中看到,甚至在我们的代码中,如果我们再次调试并运行该行,它也是可见的。 它几乎就像提交中的延迟,即使先前的提交从代码返回。 任何人都有任何想法吗?

1 个答案:

答案 0 :(得分:1)

事实证明,我无法通过ODAC控制此行为。所以唯一可行的解​​决方案是在我们的代码中实现重试行为,因为这很少发生,当它发生时,延迟10秒并重试相同。

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