C# 无法登记到具有NHibernate的分布式事务中
我在单元测试中发现了一个问题,Oracle抛出了一个异常,消息是“无法登记到分布式事务中”。我们正在使用ODP.net和NHibernate。在嵌套事务中对数据库进行一定数量的提交后,会出现此问题。令人烦恼的是,这在持续集成服务器(Windows server 2003 R2 SP1)上失败,而在我的开发人员机器(XP SP2)上则没有 这是对该问题的一个小(ish)复制:C# 无法登记到具有NHibernate的分布式事务中,c#,oracle,nhibernate,transactions,C#,Oracle,Nhibernate,Transactions,我在单元测试中发现了一个问题,Oracle抛出了一个异常,消息是“无法登记到分布式事务中”。我们正在使用ODP.net和NHibernate。在嵌套事务中对数据库进行一定数量的提交后,会出现此问题。令人烦恼的是,这在持续集成服务器(Windows server 2003 R2 SP1)上失败,而在我的开发人员机器(XP SP2)上则没有 这是对该问题的一个小(ish)复制: using (new TransactionScope()) { for (int j = 0; j < 1
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();
}
}
}
使用(新TransactionScope())
{
对于(int j=0;j<15;j++)
{
使用(var transactionScope=new transactionScope(TransactionScopeOption.Required))
使用(var session=sessionFactory.OpenSession())
{
对于(int i=0;i<200;i++)
{
var obj=[创建新的NHibernate映射obj]
session.Save(obj);
}
session.Flush();
transactionScope.Complete();
}
}
}
我们正在使用的连接字符串是:
数据源=服务器;用户Id=用户;密码=密码;登记=真
显然,这看起来像是一件很繁重的事情,但是产品代码的情况更复杂(外部事务循环和内部事务循环非常分离)
在构建服务器上,它在外部循环(j)的第五次迭代中可靠地爆炸。当它在我的本地机器上传递时,我想知道这是否达到了某种事务或连接的配置限制
有人有预感我可以试试吗?解决这个问题的明显方法是更改代码以更好地处理这种情况,但我只想了解为什么它在一台机器上工作,而不是在另一台机器上工作。谢谢 在我看来,这与您的Oracle数据库配置有关
- 您是否在两种环境中使用相同的数据库服务器(我假定不是)
- 您使用哪个版本的数据库(我要10g)
- 检查。
参数的默认值设置为5,这可能与您的问题有关。但是,在采取任何行动之前,请阅读整个页面(您也可以尝试增加ORAMTS\u NET\u CACHE\u MAXFREE
和会话
参数)进程
- 你可以看看那里到底发生了什么
- 如果仍然卡住,我想你可以尝试获得更多的洞察力