暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库连接池爆满告警分析及处理方案

原创 万恶的皮蛋 2023-07-17
548

一、故障发生时的现状

ORCL实例登录不上,相关业务系统已无法正常运作,包括数据库系统后台也登陆不上。

 

二、警告日志报错信息分析

查看alert日志,报ORA-00020错误


分析:process线程爆满导致新的连接无法连接数据库


三、原因分析

查询当前客户端连接的主机及进程总数

set linesize 200 pagesize 200
col MACHINE for a40
col PROGRAM for a40
col USERNAME for a20
select b.MACHINE, b.PROGRAM, b.USERNAME, count(*) from v$process a, v$session b
where a.ADDR = b.PADDR and b.USERNAME is not null
group by b.MACHINE, b.PROGRAM, b.USERNAME
order by count(*) desc;


原因:edi167主机发送的连接过多,已到达线程数限制的最大值,从而导致这次问题的发生


四、解决方法


将数据库实例ORCL重启,强行断开客户端连接,重启后业务恢复正常


如果连本地sys都登录不上,就强制停库

操作命令
1、kill掉oracle实例相关进程
ps -ef | grep ora_ | grep -v grep | awk '{print $2}' | xargs kill -9


2、清除oracle占用的共享内存段
ipcs -m | grep oracle | grep -v grep | awk '{print $2}' | xargs -n 1 ipcrm -m


3、清除oracle占用的共享信号量
ipcs -s | grep oracle | grep -v grep | awk '{print $2}' | xargs -n 1 ipcrm -s


五、避免此问题再次发生的方案


1、   设置SQLNET.EXPIRE_TIME参数

在文件sqlnet.ora中加入SQLNET.EXPIRE_TIME参数来清除僵死连接


已设置该参数值为10,代表客户端连接如果超过10分钟未活动就会被清除

--事实证明并没用

 

2、   限制用户最大连接数

操作方法:

a)      查看profile设置

select distinct profile from dba_profiles;

 

b)      新建profile

create profile sess limit sessions_per_user 500;

 

c)      修改用户JSPYTH的profile

alter user JSPYTH profile sess;

 

d)      查看用户的profile

select username,profile from dba_users where username='JSPYTH';


已修改成功,现在能连接上JSPYTH用户的连接数就不能超过500。

最后修改时间:2023-07-17 11:16:40
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论