注册
记一次因用户锁定导致的问题处理过程
专栏/冬日暖阳/ 文章详情 /

记一次因用户锁定导致的问题处理过程

DM_666666 2021/11/26 2713 9 0
摘要 因用户锁定导致了一系列的问题,在此记录一下,方便大家遇到同样的问题能快速定位处理

CPU:龙芯3B3000/8(8核)
操作系统:银河麒麟(SM专用版SV2.8.2)
数据库版本:DM8 2-1-190-21.04.25-138500-SEC SPE Pack5

1、第一次遇到问题

问题现象

查看数据库日志,不停地在刷告警信息“warning:Couldn’t set socket option for set timeout:5000,err_code:95,which:0,r:-1.”
79575f5920a7e094528e959cbd375f7.jpg
此时还有一个现象就是使用管理工具查询当前配置的MAX_SESSIONS值,返回的结果是一会儿成功,一会儿又报“无效的函数参数”错误
54d1a7d8e05670551647b022a3de376.jpg

问题排查

cat /proc/数据库进程id/limits查看进程使用的资源限制值,发现Max open files的值为1024,同时用命令:ls -l /proc/数据库进程id/fd/ |grep -c .查看进程打开的文件数量,这个值已经超过1024,所以问题原因就清楚了:数据库进程打开文件数已经超过系统限制值了。

问题处理

修改系统配置文件vi /etc/systemd/system.conf,增加如下内容:
DefaultLimitCORE=infinity
DefaultLimitNOFILE=65536
DefaultLimitNPROC=65536
重启服务器(重启之前对数据库做一个全库备份),重启完成后查看Max open files的值就变成10000了,日志也不再报这个错误,这个问题就解决了,其实我们在安装数据库之前就要做这一步配置然后再重启服务器生效。

2.第二次遇到问题

问题现象

第一个问题处理之后,日志又报另一个错误“ntsk_login_check_low detect not SYSDBA login,while reach maxinum session limitation”
5e013ccfe8dd93d22c8d29d05fc0a58.jpg

问题排查

此时以为数据库的会话数不够,之前配置的MAX_SESSIONS是2000,将值扩大到8000,执行sp_set_para_value(2,‘MAX_SESSIONS’,8000)再重启数据库,但是依旧报这个错误,奇怪了,8000会话数都不够吗?咨询开发人员,他们反馈会话数不应该有这么大。于是查询V$SESSIONS,分析当前的会话情况:select count(*),substr(clnt_ip,8,20),state from v$sessions group by substr(clnt_ip,8,20),state
beadfcea92d92bb3fcc14569a83fcfe.jpg
此时发现有一个ip请求的STARTUP状态的会话达到七千多个,反馈给开发人员,确认这个应用地址所使用的用户,通过管理工具查看发现这个用户处于锁定状态。问题原因也清楚了:用户被锁定,应用请求这个用户但是一直得不到响应,应用就持续发请求,导致数据库的会话数剧增,所以我们看到的就是数据库会话数达到上限。

问题处理

让开发人员先停止应用服务,将这个用户解锁:ALTER USER XXX ACCOUNT UNLOCK;再重启数据库服务(注意:要重启数据库服务器,这些STARTUP的会话才会释放)。重启数据库服务后这个问题就解决了。

3.第三次遇到问题

问题现象

前面两个问题处理完成后,出现一个新的问题,这个数据库里面有四五个用户,只有前面被锁定过的那个用户不能登录,登录的时候报“网络通信异常”错误,其余用户包括SYSDBA、SYSSSO用户在内的用户都能正常登录,此时再三确认密码是没有输错的,但是依旧无法登录。

问题排查

经过多方面尝试,例如修改用户的资源限制为UNLIMITED,用disql登录等等,还是无法登录,数据库日志也排查了,并未报任何错误信息。

问题解决

将数据库服务停止,使用命令行方式启动数据库服务,此时这个用户就能正常登录了。停止前台数据库服务器,再用脚本后台启动数据库服务,此时也可以正常登录。对于这最后一个问题,确实不清楚具体的原因是什么。只是说我们在遇到问题的时候要多尝试,把能想到的方法都尝试一遍,说不定其中一个方法就能解决它。

总结

1、遇到类似“Couldn’t set socket option for set timeout:5000”的错误,第一时间排查系统资源文件打开数。
2、遇到会话超限,先看MAX_SESSIONS的值,如果已经优化,则要查看V$SESSIONS分析当前的会话分布情况。

更多资讯请上达梦技术社区了解:https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服