[20200220]关于SQLNET.EXPIRE_TIME and ENABLE=BROKEN的总结.txt --//昨天做了大量关于SQLNET.EXPIRE_TIME and ENABLE=BROKEN的测试,晚上再仔细看,测试做的有点乱。 --//做一些总结: 1. 12c之前设置SQLNET.EXPIRE_TIME在sqlnet.ora文件中,DCD判断链接并不使用TCP keep-alive feature特性。它会定期发送探测包给客 户端检测链接是否正常,如果在1个SQLNET.EXPIRE_TIME之内客户端有数据包发送,这个探测包在SQLNET.EXPIRE_TIME(单位:分钟)时 间到来时,不会发送探测数据包给客户端,这样有可能出现最大2*SQLNET.EXPIRE_TIME时间端内,没有发送探测数据包给客户端的情 况。 这样会导致一种情况,假设路由器等网络相关设置在10分钟发送接受数据包网络就会断开,设置SQLNET.EXPIRE_TIME最安全的方式是 设置SQLNET.EXPIRE_TIME=5,这样才能保持连接在空闲时链接不会断开。 --//注:关于这个10分钟来历,可以参考链接:http://blog.itpub.net/267265/viewspace-2150614/=>[20180129]测量网络断开时间.txt 2. 12之前如果不设置SQLNET.EXPIRE_TIME在sqlnet.ora文件中,网络链接使用TCP keep-alive feature特性。这点你可以执行 netsta -npo | grep <spid> 看看最后一个字段是否是keepalive确定。 而linux下实际上使用如下参数: # echo /proc/sys/net/ipv4/tcp_keepalive* | xargs -n 1 strings -1 -f /proc/sys/net/ipv4/tcp_keepalive_intvl: 75 /proc/sys/net/ipv4/tcp_keepalive_probes: 9 /proc/sys/net/ipv4/tcp_keepalive_time: 7200 --//参数解析: /proc/sys/net/ipv4/tcp_keepalive_time 当keepalive起用的时候,TCP发送keepalive消息的频度。默认是2小时。 /proc/sys/net/ipv4/tcp_keepalive_intvl 当探测没有确认时,keepalive探测包的发送间隔。缺省是75秒。 /proc/sys/net/ipv4/tcp_keepalive_probes 如果对方不予应答,keepalive探测包的发送次数。缺省值是9。 默认的参数tcp_keepalive_time设置太长,不使用SQLNET.EXPIRE_TIME在sqlnet.ora文件中,必须修改内核对应参数符合实际需求。 假设路由器等网络相关设置在10分钟发送接受数据包网络就会断开,这样必须修改/etc/sysctl.conf文件: net.ipv4.tcp_keepalive_time = 590 net.ipv4.tcp_keepalive_intvl = 10 net.ipv4.tcp_keepalive_probes=4 这也是我个人推荐的模式,我个人感觉这样不会出现上面设置SQLNET.EXPIRE_TIME=5的情况。而且采用TCP keep-alive feature特性 更加科学,因为如果链接有数据包发送接收,计时重新开始(注:你可以执行sql语句后,使用netsta -npo | grep <spid> 看看最后一个字 段是否是keepalive确定),不会像设置SQLNET.EXPIRE_TIME时,定期发送探测包给客户端检测链接是否正常。 缺点就是必须手工设置内核参数/proc/sys/net/ipv4/tcp_keepalive*参数,符合网络需求。 3.12c之后(包括12c)设置SQLNET.EXPIRE_TIME在sqlnet.ora文件中,DCD判断链接使用TCP keep-alive feature特性。实际上就是将 SQLNET.EXPIRE_TIME的数值换成秒,通过调用setsockopt(N, SOL_SOCKET, SO_KEEPALIVE, [1], 4) [注:这里N对应socket的句柄]。 可以通过netsta -npo | grep <spid> 观察 最后一列是否是keepalive确定。 从这里也可以看出使用TCP keep-alive feature特性更加合理科学,不然oracle不会采用这种方式。 4.ENABLE=BROKEN 设置在tns连接串中,设置它相当于客户端使用TCP keep-alive feature特性。 如果不设置ENABLE=BROKEN,就是出现链接http://blog.itpub.net/267265/viewspace-2150555/=>奇怪的SQLNet message from dblink模拟 的情况,大约等927秒(15分钟)才会报错。 "缺点"就是必须手工设置内核参数/proc/sys/net/ipv4/tcp_keepalive*参数,符合网络需求,[注:是指客户端的内核参数。] 而且许多客户端或者中间服务器使用的是windows系统,如何修改注册表,我还给上网查询测试看看,明天继续在查一些资料看看。 5.链接是否可以使用TCP keep-alive feature特性,linux下可以通过执行netsta -npo | grep <进程号> 观察 最后一列是否是keepalive确定。 这是一种简单快捷的方式。
[20200220]关于SQLNET.EXPIRE_TIME and ENABLE=BROKEN的总结.txt
来源:这里教程网
时间:2026-03-03 15:06:55
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle性能优化-SQL优化(案例一)
Oracle性能优化-SQL优化(案例一)
26-03-03 - number----char(to_char)
number----char(to_char)
26-03-03 - redo日志组调整
redo日志组调整
26-03-03 - Oracle LOB 类型及SecureFiles
Oracle LOB 类型及SecureFiles
26-03-03 - 控制文件多路复用
控制文件多路复用
26-03-03 - Oracle数据倾斜导致的问题-无绑定变量
Oracle数据倾斜导致的问题-无绑定变量
26-03-03 - Oracle数据倾斜导致的问题-有绑定变量
Oracle数据倾斜导致的问题-有绑定变量
26-03-03 - Oracle12c迁移-某风险报告类系统升级暨迁移至12c-1
Oracle12c迁移-某风险报告类系统升级暨迁移至12c-1
26-03-03 - Oracle12c迁移-某风险报告类系统升级暨迁移至12c-3
Oracle12c迁移-某风险报告类系统升级暨迁移至12c-3
26-03-03 - Oracle性能优化-SQL优化(案例二)
Oracle性能优化-SQL优化(案例二)
26-03-03
