暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle jdbc SQL重播错误

askTom 2021-08-16
320

问题描述

你好,

在错误堆栈中,我们不断得到连接关闭错误。

你能告诉我我们能找谁吗。我们在错误堆栈中没有更多的详细信息。是否有任何重放设置,我们必须调整?这种情况每月发生几次,而且这些天的频率在不断增加。

原因: java.sql.sql.SQLRecrecableEx异常:连接已关闭
位于oracle.ucp.jdbc.pr.NonReplayableConnectionProxy.pre(NonReplayableConnectionProxy.java:198)~[ucp-18.3.0.0.jar:18.3.0.0.0]

谢谢

专家解答

尝试以下操作,摘自MOS注释1642867.1

要使连接保持活动状态,请执行以下操作:

1.在连接描述符的描述子句中,设置参数:例如:

jdbc:oracle:thin:@(DE描述=(EN/BROEN)) (地址=(PROTOCOL=tcp) (端口=<\) (HOST=))) (连接_DATA=(服务_NAME=<服务名称>)))

2.并在数据库sqlnet.ora中设置SQLNET.SEPIRE_TIM=10。这将启用失效连接检测(DCD)。

DCD是一种保活机制。要总结DCD的功能:

*在数据库上建立连接时,启动DCD。
* SQL*Net读取SQLNET.ORA文件中的SQLNET.SEPIRE_TAM参数。
*根据此参数的值, SQL*Net设置定时器以产生“告警”。
*此计时器到期时, SQL*Net向客户端发送一个“探测”数据包。
*这是一个空的SQL*Net数据包;它不包含数据,但会在底层协议上创建数据流量。
*如果连接的客户端仍处于活动状态,则丢弃探测,并重置计时器机制。
*如果客户端异常终止,服务器将从为探测器发出的发送调用中接收到一个错误,服务器上的SQL*Net将向操作系统发出信号,释放连接的资源。

(EN/Nable=BROK)子句将与服务器端sqlnet.expre_time=10一起使用,通过启用JDBC驱动程序在到达sqlnet.expi_time时响应服务器端发送的客户端探测来实现。这将提供固定的通信量在插座上,并防止它们超时。

文章转载自askTom,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论