登录oracle数据库,会提示ORA-12516 "TNS监听程序找不到符合协议堆栈要求的可用处理程序"
这个错误的原因是超过连接最大值导致无法登录。
1.我们先查询下数据库允许的最大连接数
SELECT * FROM gv$parameter where name ='processes'; --数据库允许的最大连接数
2.查询数据库的连接数和session连接数
SELECT inst_id,COUNT(*) from gv$process GROUP BY inst_id; --查询数据库实例1和实例2进程的连接数
SELECT inst_id,count(*) FROM GV$SESSION GROUP BY inst_id --查看数据库实例1和实例2节点的会话连接数
3.确认连接数超了,我们可以修改数据库最大的连接数.修改完必须重启oracle服务器监听才能生效
alter system set processes = 3000 scope = spfile; --修改最大连接数:
alter system set sessions=3000 scope=spfile; --修改session最大连接数:
平时操作这一步,我们可能风险会很高,那我们可以看看下面的操作,去定位什么原因导致oracle连接数超了。
4.定位连接数原因
--备份gv$session表,可以方便到时查询原因
create table gv$session_0526 as SELECT * FROM gv$session;
--根据进程和物理机地址查看进程连接数
SELECT COUNT(*),program,machine from gv$SESSION GROUP BY program,machine ORDER BY COUNT(*) DESC
--查找进程连接数较高的sql_id,prev_sql_id
SELECT COUNT(*),a.SQL_id,a.PREV_SQL_ID,a.machine FROM gv$SESSION a WHERE program='JDBC Thin Client' GROUP BY a.INST_ID,a.sql_id,a.PREV_SQL_ID,a.MACHINE
ORDER BY COUNT(*) DESC
---根据sql_id,prev_sql_id去查询对应的sql
SELECT * FROM v$sqlarea WHERE sql_id IN('fsxj48znnp6tv')