gpt4 book ai didi

connection-pooling - Oracle ODP.Net 和连接池

转载 作者:行者123 更新时间:2023-12-04 07:56:31 25 4
gpt4 key购买 nike

我猜这真的是两个问题合二为一。

我们开发了一个访问 Oracle 数据库的 .Net 应用程序,并注意到在更改用户的 Oracle 密码后,该应用程序在连接字符串中使用旧密码继续工作一小段时间。大概这与现有连接的池化方式有关?

在第一次调查时,我们尝试关闭连接字符串中的池,但是该应用程序无法工作,并在尝试打开连接时抛出错误“无法登记分布式事务”。虽然我们可能不想在生产应用程序中关闭连接池,但我很好奇为什么 MSDTC 似乎需要它?

我们正在使用 Oracle 11g (11.1.2) 和最新的 ODP.Net(我认为是 11.2)。

提前致谢

安迪

最佳答案

请参阅下面的一些发现:

问题一: (应用程序仍与旧数据库密码连接)

如果我们使用连接池选项连接数据库,连接池管理器将在第一次调用 open 时创建和维护连接 session 的数量。或 closeOracleConnection目的。 (此连接 session 的数量取决于连接字符串中的“最小”和“最大”池大小)。在 Oracle 中,我认为您可以检查事件 session ,例如:

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 文档,此连接池服务将在处于非事件状态 3 分钟后关闭连接 session 。 [ http://docs.oracle.com/html/E10927_01/featConnecting.htm ]
  • 所以最可能的原因可能是,你的应用程序仍然
    使用这个池连接到数据库并且仍然连接
    很短的时间,即使在您更改了数据库密码之后。
  • “Oracle 客户端缓存”也可能存在一种可能性
    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 Database 之间的角色。

    但是在禁用连接池之前你没有发生这个问题(MSDTC)。看起来您的代码正在从取消取消连接池中重用相同的连接,并且它可能消除了提升 DTC 的需要。 StaffOverflow 上也有类似的问题。 [ Why isn't my transaction escalating to DTC? ]

    关于connection-pooling - Oracle ODP.Net 和连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9131066/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com