2012-03-19 50 views
6

在我的應用程序使用連接到Oracle,當連接丟失,我嘗試重新連接我收到異常:java.sql.SQLException:Io異常:斷開的管道如何在不重新啓動的情況下恢復?

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) 

對於恢復我需要重新啓動應用程序,它可以恢復不重啓? 謝謝。

回答

3

追隨中可能是這可能會造成異常的可能性:

  1. 網絡問題:這是造成物理連接的一段時間後,要刪除的數據庫和應用服務器之間的網絡。這可能是由於防火牆在網絡後面運行,該網絡被配置爲在指定的時間段後終止數據庫連接。您可以考慮採取一種解決方法,只需重新配置應用程序服務器即可始終保持連接正常。對於Tomcat,您可以嘗試在Tomcat數據源配置文件(context.xml)中添加validationQuery="select 'validationQuery' from dua l

  2. 到數據庫服務器的連接正在重置,客戶端不會被數據庫驅動程序通知。在這種情況下,問題在於Oracle驅動程序發現它是以某種方式連接到DBMS的套接字(防火牆再次,也許是?)已被另一端關閉。您可以考慮將連接超時(在池中)設置爲比網絡/數據庫服務器超時短的解決方案。

+0

「到數據庫服務器的連接正在重置,客戶端不會被數據庫驅動程序通知。」那麼你怎麼稱之爲例外? – EJP 2012-03-19 08:59:07

相關問題