【发布时间】:2017-02-04 19:56:33
【问题描述】:
我正在使用 Oracle UCP(通用连接池)。处理大约 10 万条记录后,我收到以下错误。
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
这里是创建数据源的代码 sn-p
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();
【问题讨论】:
-
这可能是您正在使用的 UCP 和 JDBC 版本中的错误。您可能想尝试最新版本 12.1.0.2。请注意,您需要同时升级 JDBC jar 和 UCP jar。
-
我正在使用 UCP 11.2.0.3,根据此链接,最新的是 11.2.0.4。 oracle.com/technetwork/database/enterprise-edition/downloads/…我在哪里可以得到那个版本 12.1.0.2
-
有12.1.0.2下载页面:oracle.com/technetwork/database/features/jdbc/…
-
由于 InitialPoolSize=0,我遇到了同样的问题。我设置了 InitialPoolSize=1,之后一切正常。
标签: java oracle jdbc connection ucp