java.sql.SQLException: Io异常: 管道中断 如何在不重启的情况下恢复?

10
在我的应用程序中,我使用连接到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)

为了恢复,我需要重新启动应用程序,是否可能在不重新启动的情况下恢复? 谢谢。
1个回答

4
以下是可能导致异常的原因:
1. 网络问题: 数据库与应用服务器之间的网络在一段时间后会导致物理连接断开。这可能是由于网络后面运行的防火墙配置为在指定时间后终止数据库连接。您可以通过重新配置应用服务器来考虑绕过维持连接一直保持活动状态的解决方法。对于Tomcat,您可以尝试在Tomcat数据源conf文件(context.xml)中添加validationQuery="select 'validationQuery' from dual
2. 数据库服务器的连接正在被重置,但客户端未收到数据库驱动程序的通知。在这种情况下,问题在于Oracle驱动程序发现其与DBMS的套接字(也许是防火墙?)已被另一端关闭。您可以考虑将连接超时(在池中)设置为比网络/DB服务器超时更短的解决方案。

数据库服务器的连接正在重置,但数据库驱动程序没有通知客户端。那么你会如何称呼这个异常? - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接