问题描述
客户端使用达梦数据库管理工具以及运行JAVA程序会出现超过一定空闲时间(10分钟)数据库连接会自动断开
环境说明
数据库版本:DM V8
操作系统版本:NFS Security Server 4.0(安全版)
客户端:Windows(安全版本)
问题排查
1、排查了数据库相关资源限制
检查了数据库用户的相关资源限制以及参数,比如会话空闲时间,会话持续时间等,均未做限制,参数也正常。同时也是用达梦数据库disql工具和管理工具在服务器本地测试,均正常,服务器本地不会自动断开连接。在客户端使用disql工具和管理工具测试,发现只有JDBC连接出现自动断开连接的情况,disql没有出现自动断开的情况下。
另外,如果数据库配置用户资源限制的情况,客户端连接以及服务器本地连接,disql或者jdbc等方式都会有影响。
大概率可以排除数据库本身的问题。
2、排查服务器操作系统
(1)对于普通的服务器操作系统,主要检查防火墙、sysctl相关参数以及是否有定时中断连接的任务进程等。普通服务器操作系统默认情况不会出现自动中断远程客户端连接的情况。排查方法可以使用一台未做配置的操作系统,开放端口或者关闭防火墙,安装部署数据库,然后使用应用或者工具测试。
(2)对于国产安全版本Linux操作系统,除了防火墙以及相关安全软件外,还需要检查操作系统与安全卡同步端口的相关脚本(ListenPort.sh或者ports.sh)是否会有影响。
本次问题发生环境为国产安全版linux操作系统,根据之前经验,主要检查操作系统与安全卡同步端口的执行是否会影响到客户端连接。将端口同步脚本mv到别的目录,kill掉操作系统上对应的相关进行(如不能kill考虑重启操作系统),清空防火墙规则,然后测试客户端JAVA连接还是会自动断开。
通过操作系统以及数据库排查,可以大致判断问题可能出来客户端与服务器中间环节。
3、排查客户端机器
客户端机器排查相对简单,虽然客户端Windows上安装了很多安全管理软件,但是测试多台客户端机器上连接同网段机器以及其他Windows服务器上数据库不会出现自动断开的情况。基本可以判断客户端机器本身应该是正常的。如果客户端机器连接其他服务器也存在问题,那么排查的话,可以使用一台新的或者未安装相关安全管理软件的机器进行对比测试。
4、排查网络安全设备
检查客户端与服务器中间是否经过防火墙,检查防火墙上是否有会话长连接配置等策略。检查防火墙上发现对应服务器IP的会话长连接策略未勾选,勾选后多次测试未出现会话自动断开的情况。
问题原因
防火墙设备未开启数据库服务器的会话长连接策略。
某些防火墙设备TCP连接默认老化时间为10分钟(不同品牌的防火墙默认时间可能不同),空闲10分钟后会将会话自动从会话表中删除,导致连接被自动断开。
问题处理
在防火墙设备上将对应数据库IP的配置会话长连接。
总结
本次遇到的这种问题情况,以前也在使用Oracle数据库的时候遇到过,通过PLSQL工具连接Oracle空闲一段时间之后会自动断开,数据库本身未配置相关资源限制,最后发现问题就是出现在防火墙未配置长连接上。后面在国产化全安全版本的环境中,遇到由于安全软件和操作系统同步安全卡端口会导致数据库连接自动断开连接的情况(最新的国产安全版本Linux可能已经修复该问题)。所以,对于本次遇到的问题首先想到的就是数据库本身会话超时限制、安全版国产操作系统与安全卡同步端口、防火墙会话长连接配置这三个地方。
本次问题处理也是依靠之前的经验,对于这类涉及网络上的问题,应该是可以通过网络抓包进行分析排查发现问题。如果经过上面排查还是未解决可能到最后也还是可能需要进行网络抓包分析。所以对于DBA而言,需要学习的知识是比较全面的,包括数据库本身、操作系统、网络、存储等相关知识,尤其是在国产数据库以及操作系统这块很重要。
更多资讯请上达梦技术社区了解:https://eco.dameng.com