1. ホーム
  2. java

[解決済み] Amazon RDS Oracleインスタンスへの接続時に発生する「Got minus one from a read call」エラーの対処方法について

2022-02-02 16:55:40

質問内容

Amazon RDS インスタンスで Oracle 11GR2 を実行しています。 IO Error: Got minus one from a read call を呼び出すと DriverManager.getConnection(getUrl()) と表示され、理由がよくわからない。他のアプリケーションは正常に動作します。

さらに混乱させるのは、このエラーは時折(プログラムの次の反復の後に)修正されることです。

Got minus one from a read call"エラーにどのように対処すればよいですか?

フルスタックトレース

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ドライバが、相手側によって閉じられたネットワーク・ソケットから読み込もうとしたことです。

これには、いくつかの原因が考えられます。

  • リモートサーバーが、あなたのIPからの接続を受け入れないように設定されている場合(例:"SQLNET.ora"ファイル内)。

  • JDBC urlが正しくない場合、データベースではないものに接続しようとしている可能性があります。

  • データベースサービスに対して開いている接続が多すぎる場合、新しい接続を拒否する可能性があります。

症状を考えると、quot;too many connections"のシナリオが最も可能性が高いと思われます。 つまり、アプリケーションが接続をリークしている、つまり、接続を作成し、それを(常に)閉じることができないことを示唆しています。