web-dev-qa-db-ja.com

Oracle DB:Java.sql.SQLException:閉じられた接続

Java.sql.SQLExceptionの理由:Oracleからの接続を閉じましたか??

Java.sql.SQLException:Oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.Java:112)at Oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.Java:146)at Oracle.jdbc.driver.DatabaseError .throwSqlException(DatabaseError.Java:208)at Oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.Java:1131)at Oracle.jdbc.OracleConnectionWrapper.commit(OracleConnectionWrapper.Java:117)

フェールオーバーデータベース接続からこのエラーが発生しています。他のデータベースにも同じコードを使用します。ただし、データベースの1つだけでこの問題が発生します。これは、非アクティブ期間が長いために接続がタイムアウトする可能性があり、それを使用しようとしているためですか?詳細が必要な場合はお知らせください...

AbandonedConnectionTimeoutを15分に設定InactivityTimeoutを30分に設定

33
Java Guy

これは、ある時点で接続が正常に確立されたことを意味しますが、すぐにコミットしようとすると、接続は開かれなくなりました。あなたが述べたパラメータは、接続プール設定のように聞こえます。もしそうなら、彼らはこの問題とは無関係です。最も可能性の高い原因は、一定時間のアイドル時間後に接続を切断しているデータベースとユーザーの間のファイアウォールです。最も一般的な修正方法は、接続がチェックアウトされたときに接続プールで検証クエリを実行することです。これにより、すぐに無効な接続が識別および排除され、プールから適切な接続のみを取得できます。

44
Ryan Stewart

接続を検証する必要があります。

Oracleを使用する場合は、Oracleの niversal Connection Pool を使用する可能性があります。以下は、そうすることを前提としています。

接続を検証する最も簡単な方法は、接続を借用中に検証する必要があることをOracleに伝えることです。これは

pool.setValidateConnectionOnBorrow(true);

ただし、接続を短時間保持する場合にのみ機能します。接続を長期間借りると、接続を保持している間に接続が切断される可能性があります。その場合、接続を明示的に検証する必要があります

if (connection == null || !((ValidConnection) connection).isValid())

詳細については、 Oracleドキュメント を参照してください。

9
ceving