JDBC:Oracle 通用连接池错误 UCP-45060 无效生命周期状态

问题描述 投票:0回答:2

我正在使用 Oracle UCP(通用连接池)。处理大约 100K 记录后,我收到以下错误。

    oracle.ucp.UniversalConnectionPoolException: Invalid life cycle state. Check the status of the Universal Connection Pool
        at oracle.ucp.util.UCPErrorHandler.newSQLException(UCPErrorHandler.java:488) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
        at oracle.ucp.util.UCPErrorHandler.throwSQLException(UCPErrorHandler.java:163) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
        at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:943) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
        at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:873) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
        at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:863) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
 Caused by: oracle.ucp.UniversalConnectionPoolException: Invalid life cycle state. Check the status of the Universal Connection Pool
            at oracle.ucp.util.UCPErrorHandler.newUniversalConnectionPoolException(UCPErrorHandler.java:368) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:49) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:80) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            at oracle.ucp.util.UCPErrorHandler.throwUniversalConnectionPoolException(UCPErrorHandler.java:131) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionWithoutCountingRequests(UniversalConnectionPoolImpl.java:304) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnectionAndValidate(UniversalConnectionPoolImpl.java:168) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            at oracle.ucp.common.UniversalConnectionPoolImpl.borrowConnection(UniversalConnectionPoolImpl.java:143) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            at oracle.ucp.jdbc.JDBCConnectionPool.borrowConnection(JDBCConnectionPool.java:157) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            at oracle.ucp.jdbc.PoolDataSourceImpl.getConnection(PoolDataSourceImpl.java:931) ~[ucp-11.2.0.3.0.jar:11.2.0.3.0]
            ... 15 more

这是创建数据源的代码片段

PoolDataSource dataSource = PoolDataSourceFactory.getPoolDataSource();


    dataSource.setURL("jdbc.url"));
    dataSource.setUser("jdbc.user"));
    dataSource.setPassword("jdbc.password"));
    dataSource.setMaxConnectionReuseCount(100);

    dataSource.setInitialPoolSize(50);
    dataSource.setMinPoolSize(50);

    dataSource.setMaxPoolSize(100);

    dataSource.setValidateConnectionOnBorrow(true);

    dataSource.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");

然后我从数据源获取连接为

datasource.getConnection();
java oracle jdbc connection ucp
2个回答
0
投票

就我而言,我使用了错误的密码:|


0
投票

就我而言,我在 tomcat 应用程序的例行升级过程中遇到了此异常。当尝试与 Oracle 数据库交互(从而从 UniversalConnectionPool 获取连接)时,应用程序不断收到此异常。

在阅读了 UniversalConnectionPool (overview-using-ucp-manager) 后,我在一些 Oracle 文档中发现了这一行:“如果应用程序尝试启动先前已启动的池,则会发生生命周期状态异常,或者如果池处于停止或失败以外的状态。” 这是我能找到的与此异常相关的最接近的东西。

我最终发现我的构建配置中的一个错误意味着我在我的应用程序中和外部 Tomcat 中都放置了一个 OJDBC 驱动程序,并且不知何故这些驱动程序同时与我的数据源和 UCP 一起交互,从而导致了最后初始化才出现此错误。 从我的应用程序的类路径中删除 OJDBC 驱动程序解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.