【发布时间】:2010-12-09 14:22:27
【问题描述】:
在一个站点上,我可以使用 SQL Developer 连接到 Oracle 数据库,让它闲置很长时间(例如,> 60 分钟),然后返回,就可以了。在第二个站点,如果它闲置超过 5-10 分钟(我没有准确计算),它会使 SQL Developer 处于新操作将超时的状态,我需要手动“断开连接”,然后按顺序重新连接做任何有用的事情。这似乎是第二个站点的连接超时,我不知道是什么原因造成的(我想知道如何关闭它,尽管这不是我的主要问题)。
我的程序使用 ODP.NET 并处理突然出现的数据。每 30 分钟(为了讨论)它会得到一堆数据来处理,这将涉及到一些重复的连接。它还使用连接池。我已将连接池设置为使用 5 分钟的生命周期。
我在第二个站点(而不是第一个站点)看到的是,我的程序会在每次数据突增开始时出现连接超时异常(例如 ORA-03113)。我相信正在发生的是,在数据激增期间,连接池按设计使用。在冲刺结束时检查“连接生命周期”,并且连接不是太旧,所以它留在连接池中。然后,30 分钟后,当新数据到达时,连接被从池中取出(并且不检查生命周期或超时)并使用,并且正在超时,就像我在 SQL Developer 中看到的那样。
如何避免连接超时,但仍能在突飞猛进期间利用连接池?从文档(和我的经验)看来,连接仅在进入池时检查生命周期,而不是在它出来时。
【问题讨论】:
-
对这些问题不够了解,但我们遇到了一个非常相似的问题(更改了数据中心)。新的数据中心将杀死任何开放时间超过 X 分钟的无活动端口(我们遇到了与您在 SQL Developer 和其他长时间运行的进程中遇到的完全相同的问题。我们拒绝托管公司。他们结束了不要杀死 ora 端口(但他们简短地建议我们为 ora 连接实施一个脉冲,但被立即拒绝)但这需要他们的工作。祝你好运!
标签: .net oracle connection-pooling odp.net