【发布时间】:2010-11-03 23:19:18
【问题描述】:
我在单元测试中看到一个问题,Oracle 抛出异常并显示消息“无法加入分布式事务”。我们正在使用 ODP.net 和 NHibernate。在嵌套事务中对数据库进行一定数量的提交后,就会出现此问题。烦人的是,这在持续集成服务器(Windows Server 2003 R2 SP1)上失败了,而不是在我的开发机器上(XP SP2)。
这是对该问题的一个小(ish)再现:
using (new TransactionScope())
{
for (int j = 0; j < 15; j++)
{
using (var transactionScope = new TransactionScope(TransactionScopeOption.Required))
using (var session = sessionFactory.OpenSession())
{
for (int i = 0; i < 200; i++)
{
var obj = [create new NHibernate mapped obj]
session.Save(obj);
}
session.Flush();
transactionScope.Complete();
}
}
}
我们使用的连接字符串是:
数据源=服务器;用户 ID=用户;密码=密码;登记=真;
很明显,这看起来是一件很麻烦的事情,但是产品代码的情况更复杂(外部事务循环和内部事务循环非常分离)。
在构建服务器上,它可靠地在外部循环 (j) 的第五次迭代中被炸毁。看到它在我的本地机器上传递,我想知道这是否达到了某种配置的事务或连接限制?
有人有预感我可以试试吗?解决它的明显方法是更改代码以更好地处理这种情况,但我只想了解它为什么在一台机器上工作而不是在另一台机器上工作。谢谢!
【问题讨论】:
-
您使用的是哪个版本的 NHibernate?
-
还有,你收到了 oracle 错误号吗?
-
NHibernate 版本是 2.0.1.4000,Oracle 服务器是 10g 版本 10.2.0.3.0。我试图从异常中挖掘出 oracle 错误号,但它与错误号列表不匹配。错误号显示为 -1050。看到那里是负数,我很怀疑......
标签: c# oracle nhibernate transactions