当池生命周期为LIFE_CYCLE_FAILED时,使用UCP管理器调用closeConnections()时,UCP连接是否关闭?

时间:2019-04-03 14:51:56

标签: java oracle jdbc ucp

我正在使用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池上工作?

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

1 个答案:

答案 0 :(得分:1)

仅当池对象已经处于“停止”生命周期的情况下,“ stopConnectionPool()”才不执行任何操作。在所有其他情况下,此管理员的呼叫应停止池关闭所有打开的连接。如果在上述情况下您仍然看到打开的连接,请准备一个能够再现所报告行为的小型应用程序,然后与Oracle联系。