概述
简单记录一下最近处理的一个小问题,主要是应用程序过多无效连接导致,看下思路就行。。
1、问题现象
报错日志提示:
ORA-12520: TNS:监听程序无法为请求的服务器类型找到可用的处理程序,测试应用端telnet数据库服务器端口也无法连通,远程oracle服务器端,Sqlplus登陆oracle,也报错:ORA-00020:maximum number of processes (800) exceeded
![be9fdae75666c01c7e5290b3c61e4c5d.png](https://i-blog.csdnimg.cn/blog_migrate/bc7dabd59d76ff2a81e83012008f0c39.jpeg)
2、问题分析
根据提示得知,是Processes过多,超出最大值,正常解决办法是需要将oracle的最大process调大,但我之前已调整为800,不可能又去加这个值的,下面记录下问题排查过程
3、查看当前进程连接情况
可以看出当前进程数799,最大值是800,外面的连接就进不来了。
--查看当前进程数select count(*) from v$process;--查看进程,会话的历史最大数和最大数select resource_name,max_utilization,limit_value from v$resource_limit where resource_name in('processes','sessions');
![69da2b16a1bf6f8aec30271a40aabc04.png](https://i-blog.csdnimg.cn/blog_migrate/46cdbdb44e64f45a53ae60dd7d6bb292.jpeg)
4、查看oracle总的连接数以及活跃连接数
活跃的连接只有22,看来是过期失效的连接很多
select t.INST_ID,count(*) count_all,sum(case when t.STATUS = 'ACTIVE' then 1 else 0 end) count_activefrom gv$session t group by t.INST_ID order by t.inst_id;
![b56eb6637b74c6f73003650f5e49b48b.png](https://i-blog.csdnimg.cn/blog_migrate/6b1e8f5ad9dbf080a31719f0584adfad.jpeg)
5、查看连接oracle每台机器的连接数和状态
为了判断究竟是哪台主机产生的问题就需要用以下sql查了
select machine,status,count(*) from gv$session group by machine,status order by status;
好吧,问题在ZL-FSL-XXX主机上,应该是上面跑的应用事务处理后没有及时关闭数据库连接导致,后面开发排查应用程序解决..
![ceb7dc0fa822c5ef685d418ba3e09231.png](https://i-blog.csdnimg.cn/blog_migrate/cac23597b6eccf64b04e30d47256b483.jpeg)
后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下~
![0669775cd4b8bb13eb262883dda3b6f3.gif](https://i-blog.csdnimg.cn/blog_migrate/b84dcf1b8b72c6e51d7a4fbd64187d2d.gif)