我们的应用程序使用两个连接(在整个应用程序中保持打开状态)调用两个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
}
}
}
与上面的代码片段一样,我们会在下一次迭代中更新并检查先前更新的值。当我们经常针对单个记录运行此问题时会出现问题,即使它在上一次迭代中提交,我们也不会在下一次迭代的最后一次迭代中看到提交的更新。但是当发生这种情况时,这个更新在其他应用程序中可以在非常小的延迟中看到,甚至在我们的代码中,如果我们再次调试并运行该行,它也是可见的。 它几乎就像提交中的延迟,即使先前的提交从代码返回。 任何人都有任何想法吗?
答案 0 :(得分:1)
事实证明,我无法通过ODAC控制此行为。所以唯一可行的解决方案是在我们的代码中实现重试行为,因为这很少发生,当它发生时,延迟10秒并重试相同。
Additional details on things I that I found on this can be found here