1

我正在处理使用 Oracle ojdbc 12 和 Java 8 的 Oracle UCP 管理器的问题。如果 UCP 池启动失败,我希望关闭它创建的连接。

当在池初始化期间遇到 ORA-02391:超出同时 SESSIONS_PER_USER 限制错误时,例如当 initPoolSize 值太大时,startConnectionPool API 会抛出异常并且池状态为 FAILED。这是预期的行为。

但是,调用 stopConnectionPool() 会将池状态变为 STOPPED,而不会实际关闭任何连接。我使用 netstat 和服务器 v$sessions 看到本地连接。

我的预感是,正如文档中提到的(https://docs.oracle.com/cd/E18283_01/java.112/e12265/manage.htm)停止池应该只在它处于 STARTING 或 STARTED/RUNNING 状态时起作用. 但在那种情况下, stopConnectionPool() 应该会抛出一个错误,这不是我所看到的。

所以问题是:stopConnectionPool() UCP API 是否应该在 FAILED 池上工作?

也许唯一的出路就是摧毁游泳池?

4

1 回答 1

1

'stopConnectionPool()' 仅在池对象已经处于“停止”生命周期的情况下不执行任何操作。在所有其他情况下,此管理器的调用应停止池关闭所有打开的连接。如果您在所述情况下仍然看到打开的连接,请准备重现报告行为的小型应用程序并联系 Oracle。

于 2019-04-10T01:07:27.387 回答