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 回答