项目场景:
提示:这里简述项目相关背景:
新开发的系统需要去连接已经运行一段时间的数据库服务器读写表中的数据
问题描述
提示:这里描述项目中遇到的问题:
在新开发系统中测试连接数据库失败,提示错误代码:ORA-12519,无法连接数据库。在数据库服务器本机上使用SYSTEM用户测试连接也失败,提示错误代码:ORA-12516;
原因分析:
出现该错误的原因是到达了PROCESSES/SESSIONS参数指定的最大值限制,PMON进程会会告诉监听器当前配置的限制,有空闲连接时,才会允许新的连接进来,通俗讲就是:数据库里当前的连接数已经超过它能够处理的最大值。
解决方案:
提示:这里填写该问题的具体解决方案:
由于已知连接该数据库的进程数量远远小于当时配置的最大连接数,需要排查是哪个进程或服务器在不断连接占用监听程序。
(1)首先查询连接数(process)配置
1、show parameter processes---查看连接数配置
2、select count(*) from v$process;----查看当前连接数
(2)登录数据库服务器,打开任务管理器,在 性能 页中打开资源监视器,在网络一栏中找到TCP连接—端口号排序(Oracle默认1521),可以看到大量来自同一服务器的请求。
(3)经过排查为新上系统采用了断线重连机制,数据断开连接后自动重新连接,未能成功连接且在程序里没有设置最大尝试次数或终止,造成了此故障发生。由于新上系统还在测试阶段中,直接重启新系统服务器成了最方便的方式,重启完成后,数据库登录恢复正常。
(4)也可以通过增加连接数(process)和session的方式来处理:
1 show parameter processes---查看连接数配置
2 select count(*) from v$process----查看当前连接数
3 show parameter session----查看session配置
4 select count(*) from v$session----查看当前session数
5 alter system set processes=300 scope=spfile---增加连接数
6 alter system set session=335 scope=spfile--增加session数=1.1*连接数+5
修改完成后需要重启数据库才会生效。