站内广告
[20200220]关于SQLNET.EXPIRE_TIME and ENABLE=BROKEN的总结.txt
[20200220]关于SQLNET.EXPIRE_TIME and ENABLE=BROKEN的总结.txt
--//昨天做......
[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确定。
这是一种简单快捷的方式。
本文章url:https://www.kukuyl.com/new/30000120.html
相关文章
-
-
09-01Cassandra开山鼻祖:Cassandra是云原生和微服务化场景中最好的NoSQL数据库
-
08-31数据恢复:AMDU数据抽取恢复
-
08-29ORA-65294: PDB's compatible parameter value (12.2.0.1.0) is higher than CDB's
-
08-29达梦(DM)数据库的表空间创建和迁移维护
-
09-02达梦数据库dmap服务无法正常启动
-
08-29你们要的MyCat实现MySQL分库分表来了
-
08-30Oracle Text简介
-
09-01通过RMAN设置standby接收日志后主库归档日志才可删除
-
08-30阅读笔记
-
08-31倒计时7天 | 全球第一的KV内存数据库即将再度升级!
-
08-31亲身经历的一次Mysql OCP考试
-
08-31一文读懂图数据库 Nebula Graph 访问控制实现原理
-
08-30DM8搭建2节点DMDSC
-
09-02MySQL server has gone away
-
08-29【ORA-4030/4031】自动内存管理AMM中的ORA-4030/4031问题
-
08-29ORA-65294: PDB's compatible parameter value (12.2.0.1.0) is higher than CDB's
-
08-29聊新基建、信创,数据库不能少!
-
08-31很久以前某次银行生产环境环境data gurad添加表空间数据文件故障(UNNAMED00011)
-
本栏最新更新
-
08-29Oracle 19C CBD Active DataGuard Standby passwd file 注意事项 ORA-01017
-
09-02对mycat读写分离主从切换策略的调研
-
08-29聊新基建、信创,数据库不能少!
-
09-03PostgreSQL分区表更新思路
-
09-01MySQL传输表空间的简单使用方法
-
09-02再谈记录超长
-
09-01Linux安装MySQL8.0
-
08-29RAC节点hang住, oracle bug导致了cpu过高,无法启动集群隔离
-
08-29聊新基建、信创,数据库不能少!
本栏推荐
阅读排行
-
09-01通过RMAN设置standby接收日志后主库归档日志才可删除
-
08-29ORA-65294: PDB's compatible parameter value (12.2.0.1.0) is higher than CDB's
-
08-31Oracle RMAN备份以及压缩原理分析
-
09-02达梦数据库dmap服务无法正常启动
-
08-30配置数据库监听白名单
-
08-29微信支付的软件架构究竟有多牛逼...
-
08-30MySQL:一个特殊的问题
-
08-31Oracle修改字符集前如何找出可能出现问题的数据?
-
08-31很久以前某次银行生产环境环境data gurad添加表空间数据文件故障(UNNAMED00011)