java.sql.SQLException: Io exception: Socket read timed out与Closed Connection的区别

10

我正在研究以下两种连接到Oracle数据库时出现的错误:

  1. 已关闭的连接
  2. java.sql.SQLException: Io异常:Socket读取超时

我的理解:

  1. 已关闭的连接:发生这种情况是因为有一些网络中断或者由于某种“不活动”导致数据库关闭了会话。
  2. java.sql.SQLException: Io异常:Socket读取超时:这种情况下,成功建立了连接,但由于没有数据可用,最终超时了。

是否可能在本地Oracle DB环境中复制上述错误?步骤是什么?

感谢您抽出时间回复。

谢谢。

3个回答

5
你对于关闭连接的理解是正确的。导致连接关闭的原因包括外部设备,如防火墙、网络设备和远程数据库监听器,在一段时间内没有活动后会强制关闭网络连接。
即使在活动连接上,也可能会发生ReadTimeOut。如果查询或过程花费了很长时间,你将收到读取超时异常。
  • 关闭连接:当数据库正在运行时关闭数据库监听器
  • ReadTimedOut:在过程中添加超过10分钟的休眠时间,并从应用程序调用该过程
在Oracle DB环境中复制Socket读取超时错误。
  1. setNetworkTimeout for SQL connection // for example sake, set timeout as 120 seconds
  2. Call a database procedure from java and sleep in that procedure for time more than setNetworkTimeout

    dbms_lock.sleep(125); -- sleeps for 125 seconds
    

由于程序在125秒睡眠后未在120秒内返回,因此在上述情况下Java将抛出套接字读取超时。


0
我遇到过类似的问题。尝试增加等待连接超时时间。

这并没有回答问题。一旦你拥有足够的声望,你就可以评论任何帖子;相反,提供不需要提问者澄清的答案。- 来自审核 - undefined

0
我刚开始使用java.sql.*包,但是这是我所理解的。关闭连接是一种错误,会导致数据库会话关闭,但没有进行错误处理,因此就此结束了。使用java.SQException可以管理此错误(使用throws子句)并将其打印出来或执行其他错误处理方法。
以下是Oracle关于异常及其处理方式的链接。
希望这有所帮助。 Java中的异常。

感谢您的输入。对于“关闭连接”错误,我正在尝试弄清楚DB关闭连接和网络故障之间是否有区别,它们是否提供相同的错误或者是否有区别。此外,我认为两者都是异常,即java.sql.SQLRecoverableException: Closed Connection。还有关于套接字超时异常,它的特定原因是什么,比如“网络”中断。 - kart0624
@kart0624 我不确定。尝试记录错误代码以查看它们是否是不同的。显然,它们之间发生的原因不同,但它们可能使用相同的错误代码或者也可能不同。如果您不熟悉Java中的日志记录,请参考此处的相关信息: 链接 - troy_frommer

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