java - 连接到 Amazon RDS Oracle 实例时如何处理 "Got minus one from a read call"错误

标签 java oracle

我在 Amazon RDS 实例上运行 Oracle 11GR2。有时,我会在调用 DriverManager.getConnection(getUrl()) 时收到 IO 错误:从读取调用中减去一,但我不确定原因。其他应用程序工作正常。

为了进一步混淆事情,错误有时会自行纠正(在程序的下一次迭代之后)。

我应该如何处理“读取调用中的负一”错误?

完整堆栈跟踪:

java.sql.SQLRecoverableException: IO Error: Got minus one from a read call
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:489)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
    at java.sql.DriverManager.getConnection(DriverManager.java:579)
    at java.sql.DriverManager.getConnection(DriverManager.java:243)
    at com.cwd.facile.db.Database.<init>(Database.java:44)
    at com.cwd.facile.ns.NetSuiteRequestBased.<init>(NetSuiteRequestBased.java:29)
    at com.cwd.facile.ns.CommonOperations.isInventoryItem(CommonOperations.java:205)
    at com.cwd.facile.ns.CommonOperations.findItemIdByName(CommonOperations.java:188)
    at com.cwd.facile.ns.CommonOperations.createSalesOrder(CommonOperations.java:970)
    at com.cwd.facile.Main.main(Main.java:47)
Caused by: oracle.net.ns.NetException: Got minus one from a read call
    at oracle.net.ns.Packet.receive(Packet.java:311)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:300)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1140)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:340)
    ... 12 more

Database.java 第 44 行:setConn(DriverManager.getConnection(getUrl()));

其他信息:

  • 我认为这是一个错误的 JDBC url,但它确实有效,有时会连续几天失败。
  • Amazon RDS 是托管实例,可能无法更改配置
  • 我使用 ojdbc6.jar 进行连接

最佳答案

问题的直接原因是 JDBC 驱动程序试图从已被“另一端”关闭的网络 Socket 中读取数据。

这可能是由于以下几个原因造成的:

  • 如果远程服务器已配置(例如在“SQLNET.ora”文件中)不接受来自您的 IP 的连接。

  • 如果 JDBC URL 不正确,您可能正在尝试连接到非数据库的内容。

  • 如果与数据库服务的打开连接过多,它可能会拒绝新连接。

鉴于这些症状,我认为“连接太多”的情况最有可能。这表明您的应用程序正在泄漏连接;即创建连接然后无法(总是)关闭它们。

关于java - 连接到 Amazon RDS Oracle 实例时如何处理 "Got minus one from a read call"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61249595/

相关文章:

java - Android SDK 空指针异常

java - 使用 Redis 限制 Spring Boot 中的 session

java - Ubuntu 上的 Netbeans 不保存面板位置

java - CRL 处理中比较 interim_reasons_mask 和reasons_mask 的原因

php - 由于撇号,mysql 查询未更新

Python SQLAlchemy ORM - 表反射*无*约束和索引反射

java - 基于 JBoss EJB 的 Web 服务日期格式

oracle - 为什么 oracle 选择索引范围扫描而不是快速完整索引扫描

传递逗号分隔数字时出现 Oracle 无效数字错误

sql - 获取sql查询中的百分比