Oracle 服务器 ORA-12516 错误的处理过程
某用户的双节点Oracle服务器集群,用户在连接Oracle服务器时报如下错误:

查询资料发现,该错误出现的原因通常是到达了PROCESSES/SESSIONS参数指定的最大值限制,即数据库中当前的连接数已经超过它能够处理的最大值。
1、查询数据库中PROCESSES/SESSIONS参数的值,命令如下:
sql
SELECT name, value FROM v$parameter WHERE name IN ('processes', 'sessions');
2、查询当前会话数与进程数,命令如下:
sql
-- 查看当前会话数
SELECT COUNT(*) FROM v$session;
-- 查看当前进程数
SELECT COUNT(*) FROM v$process;
3、查看活跃会话详情,命令如下:
sql
SELECT username, program, machine, COUNT(*)
FROM v$session
GROUP BY username, program, machine
ORDER BY COUNT(*) DESC;
查询结果如下图所示:

发现有一个用户INTERFACE_HLYY创建了大量的连接。
4、使用如下命令终止会话:
sql
ALTER SYSTEM KILL SESSION 'sid,serial#';
使用如下命令查询用户INTERFACE_HLYY的会话信息,并生成相应的终止会话的ALTER SYSTEM ...代码:
sql
SELECT 'ALTER SYSTEM KILL SESSION ''' || sid || ',' || serial# || ''' IMMEDIATE;'
FROM v$session
WHERE username = 'INTERFACE_HLYY'
AND status = 'INACTIVE'
AND last_call_et > 3600; -- 超过1小时不活动的会话
执行结果如下图所示:

执行上述命令生成的终止会话的代码。
重新查询当前会话数与进程数,发现已经降低到不到500,用户重新登录系统,不再报错,故障排除。