连接池 – Oracle ODP.Net和连接池
这是我猜的两个问题. 我们开发了一个访问Oracle数据库的.Net应用程序,并注意到在更改用户的Oracle密码后,应用程序会在连接字符串中使用旧密码继续工作一小段时间.据推测,这与现有连接的汇总方式有关? 在第一次调查时我们尝试关闭连接字符串中的池,但是应用程序无法正常工作,在尝试打开连接时抛出错误“无法在分布式事务中登记”.虽然我们可能不想在生产应用程序中关闭连接池,但我很好奇为什么MSDTC似乎需要它? 我们使用的是Oracle 11g(11.1.2)和最新的ODP.Net(我认为是11.2). 提前致谢 安迪 解决方法请参阅下面的一些发现:问题一:(应用程序仍然与旧的DB密码连接) 如果我们使用连接池选项连接数据库,则连接池管理器将在首次调用OracleConnection对象的打开或关闭时创建并维护连接会话的数量. (此连接会话的数量取决于连接字符串中的“min”和“max”池大小).在Oracle中,我认为您可以检查活动会话,如: SELECT s.inst_id,s.sid,s.serial#,p.spid,s.username,s.program FROM gv$session s JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id WHERE s.type != 'BACKGROUND'; 根据Oracle doc,此连接池服务将在3分钟处于活动状态后关闭连接会话. [http://docs.oracle.com/html/E10927_01/featConnecting.htm] >所以最可能的原因是,你的申请仍然存在 问题二:(为什么MSDTC需要) 如果您在代码中使用嵌套数据库连接,它将被提升为DTC. [http://petermeinl.wordpress.com/2011/03/13/avoiding-unwanted-escalation-to-distributed-transactions/]实际上,Oracle Service for Microsoft Transaction Server(OraMTS)在ODP.net,DTC和Oracle数据库中起作用. 但是在禁用连接池之前,您没有遇到此问题(MSDTC).看起来您的代码正在从取消连接池中重用相同的连接,并且可能无需提升DTC.在StaffOverflow上有类似的问题. [Why isn’t my transaction escalating to DTC?] (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |