java.sql.SQLException:Io exception:Socket read timed out vs Closed Connection

kar*_*624 8 java sql oracle exception jdbc

我试图在连接到Oracle DB的以下两个错误上研究此问题:

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

我的理解:

  1. 封闭连接:发生的原因是由于存在某种类型的网络中断或数据库由于某种"不活动"而关闭了会话
  2. java.sql.SQLException:Io异常:套接字读取超时:这是连接成功的情况但由于某种原因,套接字/数据为空并最终超时,因为没有可用的数据.

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

感谢您抽出宝贵时间作出回应.

谢谢.

Rav*_*abu 5

您对封闭连接的理解是正确的。关闭连接的原因:防火墙、网络设备和远程数据库侦听器等外部设备可以强制网络连接在一段时间不活动后关闭

即使在活动连接上也会发生 ReadTimeOut。如果查询或过程花费大量时间,您将收到读取超时异常。

  • Closed Connection:数据库运行时关闭数据库监听
  • ReadTimedOut :在过程中添加睡眠超过 10 分钟并从应用程序调用该过程

Oracle DB env 中复制套接字读取超时错误:

  1. setNetworkTimeout对于 SQL连接// 例如,将超时设置为 120 秒
  2. 从 java 调用数据库过程并在该过程中休眠时间超过 setNetworkTimeout

    dbms_lock.sleep(125); -- sleeps for 125 seconds
    
    Run Code Online (Sandbox Code Playgroud)

由于由于 125 秒的睡眠,程序在 120 秒内没有返回,因此 java 在上述情况下将引发套接字读取超时。


tro*_*mer 0

我刚刚开始使用 java.sql.* 包,但这是我的理解。关闭连接是指发生错误并且数据库会话关闭,但没有执行任何错误处理,因此就结束了。使用 java.SQException 您可以管理此错误(使用 throws 子句)并将其打印出来或执行其他错误处理方法。

这是 Oracle 提供的有关异常及其处理方法的链接。

希望这可以帮助。

Java 中的异常。