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



我正在使用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();

在我的情况下,我使用了错误的密码:|

在我的例子中,我在tomcat应用程序的例行升级过程中遇到了这个异常。当尝试与Oracle数据库交互时(因此从UniversalConnectionPool获得连接),应用程序一直得到此异常。

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

我最终发现我的构建配置中的一个错误意味着我有一个OJDBC驱动程序放在我的应用程序和Tomcat外部,不知怎么的,这些驱动程序同时与我的数据源和UCP交互,导致最后初始化的那个给出这个错误。从我的应用程序的类路径中删除OJDBC驱动程序修复了这个问题。

相关内容

  • 没有找到相关文章