ora_12516:TNS:监听程序找不到符合协议堆栈要求的可用处理程序

1、问题描述

远程登录数据库时报错:

出现问题后去数据库告警文件 alert.log 中查看,发现报错如下:

2、问题原因

错误信息一般在Oracle实例在创建一些辅助后台进程(如mmon的子进程m00x或者子进程W00x等)时出现进程启动失败时出现,而造成该错误的可能性有多种,包括Oracle实例资源不足、操作系统资源不足等等。其中较为常见的是数据库在实际运行过程中实例instance的process使用达到参数设定上限而导致问题出现

通过v$resource_limit视图可以查询实例生命周期内是否发生过process进程达到上限的情况

由于报错无法登录数据库(sys as sysdba也无法登录),所以需要先断掉占用的process,停掉几个tomcat即可释放连接,停掉后就可以连接了。

登录数据库后查询v$resource_limit视图,查询结果如下:

通过查询结果可以看到process的MAX_UTILIZATIOON最大使用数目曾经达到过LIMIT_VALUE限定的150,极有可能就是process总数达到上限数量导致数据库创建新的后台辅助进程失败。

现在可以重新启动 tomcat 服务,一个一个启动,每启动一个 tomcat 都查看一下process和session的值

select count(*) from v$process; //查询process使用数目
select count(*) from v$session; //查询session连接数目

如果发现 process 增长会达到上限数目,则说明确实是这个原因导致数据库报错,则需要修改process和session参数的上限值

3、解决方法

修改修改process和session参数的上限值

altert system set processes = 250 scope = spfile;
alter system set sessions = 380 scope = spfile;

PS:processes和sessions的值,oracle官方文档要求:sessions=processes*1.5+5

修改后重启oracle服务,启动全部tomcat服务,重新查询 process 和 session 的占用情况,process 和 session 使用数目都小于最大限定值即可

ps:但是也有可能是数据库某一时间突然process达到最大值,我遇见的情况就是,没有修改参数,重启tomcat后就可以正常使用了

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值