ITPub博客

首页 > 数据库 > Oracle > Oracle ENABLE=broken参数与TCP KeepAlive

Oracle ENABLE=broken参数与TCP KeepAlive

原创 Oracle 作者:badguy001djh 时间:2022-06-12 15:55:29 0 删除 编辑

环境:

    数据库服务器端:

操作系统:        Oracle linux6.5

数据库:           Oracle database 11.2.0.4

ip:                     192.192.192.3

service_name:orcl

参数相关设置:

无sqlnet.ora文件,listener未设置任何参数。net.ipv4.tcp_keepalive_time = 10,net.ipv4.tcp_keepalive_probes = 20,net.ipv4.tcp_keepalive_intvl = 2

    客户端:

操作系统:             Oracle linux6.5

数据库客户端工具:sqlplus  11.2.0.4

ip:                          192.192.192.4

参数相关设置:

无sqlnet.ora文件。net.ipv4.tcp_keepalive_time = 6,net.ipv4.tcp_keepalive_probes = 10,net.ipv4.tcp_keepalive_intvl = 1


Linux内核TCP KeepAlive参数介绍:

net.ipv4.tcp_keepalive_time :在TCP连接空闲时间段内,内核会以此参数设定的 时间间隔发送 tcp侦测包。单位秒。

net.ipv4.tcp_keepalive_probes :如果连续N个 发出去的tcp 侦测包没有响应,则内核认为此TCP连接已经中断了,并通知应用程序。 N即此参数设定的值。

net.ipv4.tcp_keepalive_intvl :如果发出去的tcp 侦测包没有得到响应,那么会以此参数设定的间隔发送tcp 侦测包,直至得到响应,或者超过 net.ipv4.tcp_keepalive_probes设定的次数,被认为连接中断 。单位秒。

例如:

    按上面环境中数据库服务器的设置来说明,如果tcp连接空闲时间达到10秒,则 数据库服务器端会发送一个tcp侦测包,如果此侦测包得到了响应,那么 数据库服务器端会再等待10秒,如果10秒内tcp连接仍旧一直处于空闲状态,那么 库服务器端 会再发送一个tcp侦测包,如此往复。如果 数据库服务器端 发送的tcp侦测包没有得到响应,那么 数据库服务器端会每隔2秒发送一个 tcp侦测包,直至得到响应后继续按10秒的间隔发 tcp侦测包,或者,发送的 tcp 侦测包达到了20个仍旧没有得到响应,那么 数据库服务器端会认为这tcp连接已经中断了,给应用层程序发通知。


实验1:

    客户端tnsname中不加ENABLE=broken参数。

# 客户端连接数据库
[oracle@oel6-11204-norac ~]$ sqlplus sys@orcl as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sun Jun 12 22:59:26 2022
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> 
# tcpdump抓包结果
22:59:40.001193 IP 192.192.192.3.1521 > 192.192.192.4.14330: Flags [.], ack 1995, win 162, options [nop,nop,TS val 13687124 ecr 13652371], length 0
22:59:40.001229 IP 192.192.192.4.14330 > 192.192.192.3.1521: Flags [.], ack 2728, win 199, options [nop,nop,TS val 13662372 ecr 13677083], length 0
22:59:50.002356 IP 192.192.192.3.1521 > 192.192.192.4.14330: Flags [.], ack 1995, win 162, options [nop,nop,TS val 13697125 ecr 13662372], length 0
22:59:50.002392 IP 192.192.192.4.14330 > 192.192.192.3.1521: Flags [.], ack 2728, win 199, options [nop,nop,TS val 13672373 ecr 13677083], length 0
23:00:00.004261 IP 192.192.192.3.1521 > 192.192.192.4.14330: Flags [.], ack 1995, win 162, options [nop,nop,TS val 13707127 ecr 13672373], length 0
23:00:00.004296 IP 192.192.192.4.14330 > 192.192.192.3.1521: Flags [.], ack 2728, win 199, options [nop,nop,TS val 13682375 ecr 13677083], length 0
23:00:10.005410 IP 192.192.192.3.1521 > 192.192.192.4.14330: Flags [.], ack 1995, win 162, options [nop,nop,TS val 13717128 ecr 13682375], length 0
23:00:10.005436 IP 192.192.192.4.14330 > 192.192.192.3.1521: Flags [.], ack 2728, win 199, options [nop,nop,TS val 13692376 ecr 13677083], length 0

实验2:

    客户端tnsname中加ENABLE=broken参数。

# 客户端连接数据库
[oracle@oel6-11204-norac ~]$ sqlplus sys@orcl as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sun Jun 12 22:59:26 2022
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> 
# tcpdump抓包结果
23:04:28.163882 IP 192.192.192.3.1521 > 192.192.192.4.14447: Flags [.], ack 2025, win 162, options [nop,nop,TS val 13975287 ecr 13940532], length 0
23:04:28.163918 IP 192.192.192.4.14447 > 192.192.192.3.1521: Flags [.], ack 2726, win 199, options [nop,nop,TS val 13950534 ecr 13971245], length 0
23:04:30.123721 IP 192.192.192.4.14447 > 192.192.192.3.1521: Flags [.], ack 2726, win 199, options [nop,nop,TS val 13952494 ecr 13971245], length 0
23:04:30.127384 IP 192.192.192.3.1521 > 192.192.192.4.14447: Flags [.], ack 2025, win 162, options [nop,nop,TS val 13977250 ecr 13950534], length 0
23:04:36.127516 IP 192.192.192.4.14447 > 192.192.192.3.1521: Flags [.], ack 2726, win 199, options [nop,nop,TS val 13958498 ecr 13977250], length 0
23:04:36.128661 IP 192.192.192.3.1521 > 192.192.192.4.14447: Flags [.], ack 2025, win 162, options [nop,nop,TS val 13983251 ecr 13950534], length 0
23:04:38.163949 IP 192.192.192.3.1521 > 192.192.192.4.14447: Flags [.], ack 2025, win 162, options [nop,nop,TS val 13985287 ecr 13950534], length 0
23:04:38.163976 IP 192.192.192.4.14447 > 192.192.192.3.1521: Flags [.], ack 2726, win 199, options [nop,nop,TS val 13960534 ecr 13983251], length 0
23:04:42.129380 IP 192.192.192.4.14447 > 192.192.192.3.1521: Flags [.], ack 2726, win 199, options [nop,nop,TS val 13964500 ecr 13983251], length 0
23:04:42.129898 IP 192.192.192.3.1521 > 192.192.192.4.14447: Flags [.], ack 2025, win 162, options [nop,nop,TS val 13989253 ecr 13960534], length 0
23:04:48.129365 IP 192.192.192.4.14447 > 192.192.192.3.1521: Flags [.], ack 2726, win 199, options [nop,nop,TS val 13970500 ecr 13989253], length 0
23:04:48.129919 IP 192.192.192.3.1521 > 192.192.192.4.14447: Flags [.], ack 2025, win 162, options [nop,nop,TS val 13995253 ecr 13960534], length 0
23:04:48.164646 IP 192.192.192.3.1521 > 192.192.192.4.14447: Flags [.], ack 2025, win 162, options [nop,nop,TS val 13995287 ecr 13960534], length 0
23:04:48.164674 IP 192.192.192.4.14447 > 192.192.192.3.1521: Flags [.], ack 2726, win 199, options [nop,nop,TS val 13970535 ecr 13995253], length 0

结论:

    通过上面两个实验的结果,我们可以知道,当客户端没有使用 ENABLE=broken参数时,只有数据库服务端定时主动往客户端发送了tcp keepalive的侦测包,客户端响应侦测包; 当客户端使用了 ENABLE=broken参数后, 数据库 服务端会定时 主动 往客户端发送了tcp keepalive的侦测包,客户端也 会定时 主动往 数据库服务端发送了tcp keepalive的侦测包。

    即 ENABLE=broken启用了客户端的 tcp keepalive功能,能够让没有在应用层实现keepalive功能的客户端也能感知到数据库连接的中断。

应用场景:

     ENABLE=broken参数在复杂网络环境中,使用db link进行复杂的跨库分布式事务操作中,比较有用。

    因为在db link中默认情况下,客户端调用服务端耗时的存储过程或执行耗时的查询,db link连接可能会被防火墙中断,而此时客户端却无法感知到中断,会一直持有资源,导致阻塞的发生。而如果db link客户端上使用 ENABLE=broken参数, 客户端便可以感知到中断,并释放其持有的资源。

   

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69955733/viewspace-2900108/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2020-12-19

  • 博文量
    4
  • 访问量
    2519