连接池 – Oracle ODP.Net和连接池

连接池 – Oracle ODP.Net和连接池,第1张

概述这是我猜的两个问题. 我们开发了一个访问Oracle数据库的.Net应用程序,并注意到在更改用户的Oracle密码后,应用程序会在连接字符串中使用旧密码继续工作一小段时间.据推测,这与现有连接的汇总方式有关? 在第一次调查时我们尝试关闭连接字符串中的池,但是应用程序无法正常工作,在尝试打开连接时抛出错误“无法在分布式事务中登记”.虽然我们可能不想在生产应用程序中关闭连接池,但我很好奇为什么MSDT 这是我猜的两个问题.

我们开发了一个访问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.programFROM   gv$session s       JOIN gv$process p ON p.addr = s.paddr AND p.inst_ID = s.inst_IDWHERE  s.type != 'BACKGROUND';

根据Oracle doc,此连接池服务将在3分钟处于活动状态后关闭连接会话. [http://docs.oracle.com/html/E10927_01/featConnecting.htm]

>所以最可能的原因是,你的申请仍然存在
    使用此池连接到数据库并仍然连接
    很短的时间,即使您更改了数据库密码.
>也可能存在“Oracle ClIEnt Cache”的一种可能性
    ODP.net中的功能.但不太确定,你可以查看,[
    http://www.oracle.com/technetwork/issue-archive/2008/08-jul/o48odpnet-098170.html]

问题二:(为什么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?]

总结

以上是内存溢出为你收集整理的连接池 – Oracle ODP.Net和连接池全部内容,希望文章能够帮你解决连接池 – Oracle ODP.Net和连接池所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1162852.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存