【问题标题】:Oracle Autonomous database JDBC Error No more data to read from socket but webapp works without errorsOracle自治数据库JDBC错误没有更多数据可以从套接字读取,但webapp可以正常工作
【发布时间】:2021-05-29 04:51:49
【问题描述】:

尝试在云中使用 dbcp2 和 Oracle db 设置数据库连接池。

尝试连接到 Oracle 自治数据库时遇到此错误。最奇怪的部分是,即使遇到此错误,当此连接池开始用于添加用户、提取报告等时,在与基于 webapp 构建的服务交互时,我也没有收到任何错误。

数据库启用了 tcps,我正在使用 Oracle Wallets 连接到该数据库。

错误总是重复出现,如果是网络问题,请慎重考虑

任何想法可能导致此错误?

java.sql.SQLException: Error preloading the connection pool
    at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:573) ~[commons-dbcp2-2.8.0.jar:2.8.0]
    at org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:734) ~[commons-dbcp2-2.8.0.jar:2.8.0]
    at com.testme.mmappserver.upgrade.start.MartUpgrade.isMartVersionPresent(MartUpgrade.java:176) ~[classes/:?]
    at com.testme.mmappserver.upgrade.start.MartUpgrade.upgrade(MartUpgrade.java:129) ~[classes/:?]
    at com.testme.mmappserver.upgrade.start.MartUpgrade.upgrade_main(MartUpgrade.java:81) [classes/:?]
    at com.testme.mmappserver.upgrade.Configui$11.run(Configui.java:499) [classes/:?]
Caused by: java.sql.SQLRecoverableException: No more data to read from socket
    at oracle.jdbc.driver.T4CMAREngineNIO.prepareForUnmarshall(T4CMAREngineNIO.java:784) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at oracle.jdbc.driver.T4CMAREngineNIO.unmarshalUB1(T4CMAREngineNIO.java:429) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at oracle.jdbc.driver.T4C8TTIpro.receive(T4C8TTIpro.java:134) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1623) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:588) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:793) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:57) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:747) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:562) ~[ojdbc8-19.3.0.0.jar:19.3.0.0.0]
    at org.apache.commons.dbcp2.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:52) ~[commons-dbcp2-2.8.0.jar:2.8.0]
    at org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:357) ~[commons-dbcp2-2.8.0.jar:2.8.0]
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:918) ~[commons-pool2-2.9.0.jar:2.9.0]
    at org.apache.commons.pool2.impl.GenericObjectPool.addObject(GenericObjectPool.java:1023) ~[commons-pool2-2.9.0.jar:2.9.0]
    at org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:569) ~[commons-dbcp2-2.8.0.jar:2.8.0]
    ... 5 more

【问题讨论】:

  • 那么您是在白天偶尔看到这个错误,还是只是在启动时,或者每次用户登录时看到这个错误?
  • @MarkStewart 我在启动期间尝试执行程序时收到错误
  • 理论上,java.sql.SQLRecoverableException 用于当特定语句可能工作时,如果再次调用,在诸如表空间空间不足(后来修复)、超时等问题之后. 现在,如果您能找出导致 first 尝试失败的原因,那就太好了,但您可能想尝试(暂时)将该语句放入一个循环中,并在循环说 60 秒,然后循环 5 次。然后,如果它第二次起作用,总是……这可能是一种解决方法。
  • 该错误未在任何其他开发机器上重现,因此我的环境可能有问题。暂时忽略它。

标签: java database oracle jdbc oracle-cloud-infrastructure


【解决方案1】:

您使用的 Oracle JDBC 驱动程序版本非常旧。我建议您将其更新为适合您的 DBMS 版本的最新版本。 请参考随附的页面网址,这可能会有所帮助。

Error:No more data to read from socket

【讨论】:

  • 我已经在使用适用于我的数据库的驱动程序。 ojdbc8-19.3.0.0.
【解决方案2】:

您的自治数据库可能超出了允许的连接总数。因此,您可以只为您的 dbcp2 池添加一个限制。您可以只尝试几个连接(对于 init、min 和 max),然后查看错误是否重现。

【讨论】:

    猜你喜欢
    • 2011-12-11
    • 2015-05-12
    • 1970-01-01
    • 2012-09-18
    • 2017-06-17
    • 2018-01-07
    • 2012-07-16
    • 2015-02-04
    相关资源
    最近更新 更多