一、今天同事反馈业务化运行的数据中心库发生了oracle无法连接的情况,导致所有业务系统无法正常运作的问题。报:“ORA-12516:TNS:监听程序找不到符合协议堆栈要求的可用处理程序”
二、收到这个情况,没有先去百度,之前经常碰到这个问题。猜想问题应该出在3个地方中的其中一种 A.oracle实例 B.监听服务 C.listener.log :
1.首先比较着急的是想看看数据库本身是否有问题,远程登录oracle服务器,通过sqlplus登录数据库,查询是正常的,说明数据库本身是好的,心里就比较踏实。
2.然后想到的oracle监听服务的问题,先去重启了下oracle监控服务、重启了oracle实例,甚至重启了服务器,依然问题存在。
3.判断可能是oracle监听配置失效,之前有碰到过监听配置失效,重新配置监听就解决问题的情况。 所以通过Net Configuration Assistant 删除了原来的监听服务配置,重新配置了一遍,问题依然存在。
4.listener.log是否存在超过4G,导致无法写入的问题,也排查了,不是这个问题。
三、没有思路的情况下,只能去百度,网上说法是连接池超出最大额度,导致连接无法申请。顺着这个思路,开始排查:
1.通过sqlplus登录,查询oracle最大连接额度的配置: 300个连接,正常,oracle默认是150。之前手动调整过一次。
2.查询目前已经使用了多少个连接: 吓一跳,294个。这下心里有底了。原因找到了。
3.接下来的就是揪出元凶,到底哪个应用程序占用过多连接:
4.发现了问题,接下来就好办了,***程序.exe 占用128个连接,这个服务框架使用的ORM有点问题,之前也出现过几次,占用连接过多的情况。一直想重构,都没找到好的时机。现在没办法,先重启这几个服务框架,一下子连接数量就降下来了。
5.外部的服务器,开启PL/SQL连接正常,搞定。顺便把oracle连接池最大限额搞大点,加一倍,搞到600。