/*
* ORA-12518 报错是因为数据库服务进程超出最大限制而崩溃, 因此我们先得监控一下数据库的process,session 的变化情况
* 一下是在cmd sqlplus 下操作
*/
show parameter processes; -- 查看数据库最大进程数量限制;
show parameter sessions; -- 查看数据库最大对话数量限制;
select count(*) from v$process; -- 监控一下看看当前的进程数量变化情况;
select count(*) from v$session; -- 监控一下对话数量变化情况;
-- 如果以上最大限制和当前数量比较接近的话, 可以把最大值调大一些
alter system set processes=1000 scope=spfile; --最大进程数
alter system set sessions=1500 scope=spfile; -- 最大对话数量限制
-- 再监控一下当前进程和对话数量的变化情况
select '进程数量',count(*) from v$process
union all
select '对话数量',count(*) from v$session;
/*
* 进程还是一直在递增, 肯定有什么任务一直在创建进程
*/
select count(*), s.PNAME, s.USERNAME, s.TERMINAL,s.PROGRAM from v$process s
group by s.PNAME,s.USERNAME, s.TERMINAL,s.PROGRAM;
--监控进程创建情况
select count(*), s.PNAME, s.USERNAME, s.TERMINAL,s.PROGRAM from v$process s
group by s.PNAME,s.USERNAME, s.TERMINAL,s.PROGRAM;
--发现 ORACLE.EXE (SHAD) 这个program 的数量持续增加, 查了一下发现这个程序跟客户端尝试连接服务端有关系
--查看系统,有几个用户密码过期,系统一直无法正常连接重复尝试连接导致连接数和进程持续增长
--密码设置为永不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
--再把那些因密码过期而锁定的用户密码都更新一下
alter user user_name identified by <原来的密码> ;