加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2021-01-16 11:40:08 所属栏目:百科 来源:网络整理
导读:这是我猜的两个问题. 我们开发了一个访问Oracle数据库的.Net应用程序,并注意到在更改用户的Oracle密码后,应用程序会在连接字符串中使用旧密码继续工作一小段时间.据推测,这与现有连接的汇总方式有关? 在第一次调查时我们尝试关闭连接字符串中的池,但是应

这是我猜的两个问题.

我们开发了一个访问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]

>所以最可能的原因是,你的申请仍然存在
????使用此池连接到数据库并仍然连接
????很短的时间,即使您更改了数据库密码.
>也可能存在“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?]

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!