我们的应用程序已经成功使用OracleDataSource好几年了,我们现在正在评估切换到新的Oracle通用连接池(UCP)。
有了新的UCP池,我们的应用程序将在一段时间后运行到ORA-0100:最大打开游标数。
有些人似乎也遇到过类似的问题:
- https://stackoverflow.com/a/4683797/217862
- https://stackoverflow.com/a/29892459/217862
是否有已知的解决方法/解决方案?
注意:我们确实正确地关闭了会话和语句,并遵循了所有已知的JDBC/Hibernate最佳实践。该应用程序全天候运行,数据访问层代码已有8年历史,经过了详尽的测试。我们使用的是Oracle 12c。
事实证明,我们遵循了所有已知的最佳实践。在某些地方,我们使用ScrollableResult
时没有正确关闭它们。在这种情况下,它显然会泄漏底层游标,即使在hibernate会话关闭之后也是如此。我们修复了在代码中发现的所有情况,作为一项额外的防御措施,我们配置了池的opion maxConnectionReuseTime
,以确保定期更新连接。
注意:我们没花一年时间就发现了这个问题,只花了几天时间,在我们解决了这个问题后,我就忘了回答这个问题