【发布时间】:2019-08-25 03:46:34
【问题描述】:
我正在处理使用 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 池上工作?
也许唯一的出路就是摧毁池子?
【问题讨论】: