ORA-12516:监听程序找不到符合协议堆栈要求的可用处理程序
这种一般都是会话数或者process和session已经到达临界值或者超过最大值了。
1.先cmd登录sqlplus:
sqlplus / as sysdba;
2.查看设置的最大的连接数和进程数:
show parameter process;
3.查看当前数据库的进程数和会话数:
select count(*) from v$process;
select count(*) from v$session;
4.发现资源快占满了,两种处理方法:
(1)第一种:修改数据库允许最大process:
alert system set processes=2000 scope=spfile;
(session会自动随着process调整,一般sessions=processes*1.5+5),修改后需要重启下实例使得配置生效
(2)第二种处理方法:杀死这些占用的会话数:
①.查出来有哪些连接在占用资源
select a.sid||','||a.serial# s_info,blocking_session,a.username,a.osuser,a.sql_id, a.last_call_et ET,a.event,a.p1||','||a.p2||','||a.p3 "p1,p2,p3",a.program,a.machine from v$session a,v$process b where a.paddr=b.addr and a.status='ACTIVE' and a.type <>'BACKGROUND' order by a.username,a.sql_id;
②.通过sql_id查一下是哪个sql在占用资源:
select * from v$sqlarea where sql_id = 'fphrxrdzk193x';
③.通过sid杀死这个会话:
alter system kill session '8539,91' immediate;
或者批量杀死:
select 'alter system kill session ''' || a.sid || ',' || serial# || ''' immediate;' from v$session a where a.username='KYEECIS' AND a.STATUS='ACTIVE' and event in('cursor: pin S wait on X','single-task message')
图中的这段属于拼接一下sql;
然后复制第一列在黑窗口值执行一下就行!
最后查看进程数和会话数,只有244个,明显降下来了!