一、故障发生时的现状
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。




