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

使用ODAC在Oracle中将两个连接登记到事务时,提交和选择分布式事务之间的延迟/延迟,oracle,distributed-transactions,odac,Oracle,Distributed Transactions,Odac,我们的应用程序使用两个连接(在整个应用程序中保持打开状态)调用两个Oracle数据库。对于某些功能,我们使用分布式事务。我们在连接字符串中设置了Enlist=false,并手动登记到事务的连接。 问题出现在这样一个场景中:我们在分布式事务中非常频繁地更新相同的记录,在这个场景中,我们看到在上一次运行中看到提交数据的延迟 前 与上面的代码片段一样,我们在下一次迭代中更新并检查先前更新的值。当我们频繁地对单个记录运行此更新时,就会出现问题,在下一个迭代中,我们看不到上一个迭代中提交的更新,即使它是在

我们的应用程序使用两个连接(在整个应用程序中保持打开状态)调用两个Oracle数据库。对于某些功能,我们使用分布式事务。我们在连接字符串中设置了Enlist=false,并手动登记到事务的连接。 问题出现在这样一个场景中:我们在分布式事务中非常频繁地更新相同的记录,在这个场景中,我们看到在上一次运行中看到提交数据的延迟

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

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


.

Oracle 11g和ODAC(用于.Net的Oracle数据访问组件)都观察到了这一点
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
   }
  }
 }