前言

  • 从项目中日志发现Oracle大量数据插入时会报错 :
java.sql.SQLException: Listener refused the connection with the following error: ORA-12516, TNS:listener could not find available handler with matching protocol stack!

问题原因 :

  • 该问题是数据库负载压力较大,数据库已经启用的进程数达到了参数限制的最大进程数,无法再创建新的进程了,这个时间再连接数据库就会报错了。(连接数据库会创建新的进程,占用新的 session 会话)

解决方法:

  • 我们把数据库参数的进程session 的最大限制数调高,再重启数据库就能解决问题了。

首先先查询当前已启用进程数

--- 当前已启用进程数
select count(*) from v$process;

然后查询参数里限制的最大进程数

--- 查询参数里限制的最大进程数
select value from v$parameter where name = 'processes';

然后设置参数里的最大值,我这两个由原来的 500,调到现在的 2000 了。

alter system set processes = 2000 scope = spfile;
alter system set sessions = 2000 scope = spfile;
  • 重启后解决问题

数据库参数的进程和 session没问题排查思路

  • 大批量数据插入数据库时,要批量插入,不要单条插入。不然参数调再大也会报错的

总结

如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐