8

私のアプリケーションでは、Oracleへの接続を使用していますが、接続が失われ、再接続しようとすると、例外が発生します。

java.sql.SQLException: Io exception: Broken pipe
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:124)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:161)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:273)
    at oracle.jdbc.driver.T4CStatement.fetch(T4CStatement.java:540)
    at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:264)
    at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:196)

回復するには、アプリケーションを再起動する必要がありますが、再起動せずに回復することはできますか?ありがとう。

4

1 に答える 1

4

以下は、例外を引き起こしている可能性がある可能性があります。

  1. ネットワークの問題:これは、データベースとアプリケーションサーバー間のネットワークであり、一定期間後に物理接続が切断されます。これはおそらく、指定された期間の後にdb接続を強制終了するように構成されたネットワークの背後で実行されているファイアウォールが原因です。アプリケーションサーバーを再構成するだけで、接続を常に維持するための回避策を検討できます。Tomcatの場合validationQuery="select 'validationQuery' from dua、Tomcatデータソースのconfファイル(context.xml)にlを追加してみてください。

  2. データベースサーバーへの接続がリセットされており、クライアントはデータベースドライバーから通知されません。この場合の問題は、Oracleドライバーが、DBMSへのソケットが何らかの理由で(ファイアウォールが再び閉じられている可能性がありますか?)、もう一方の端によって閉じられていることを検出していることです。解決策として、(プール内の)接続タイムアウトをネットワーク/DBサーバーのタイムアウトよりも短く設定することを検討してください。

于 2012-03-19T08:46:27.793 に答える