ORA-12537: TNS:connection closed
ORA-00603: ORACLE server session terminated by fatal error
ORA-00020: maximum number of processes (2000) exceeded
1、问题背景
开发说连接数据库报错,监听程序已经关闭
2、解决办法
1.根据提示我检查了监听状态,发现有一个没起,启动后还是连不上
cd $ORACLE_HOME/network/admin/
lsnrctl start listener
启动后我连接了下数据库,不正常,能连接,但是show parameter name都报错,提示没有登
2.查看alert日志,发现报了大量的ORA-00020报错
cd $ORACLE_BASE/diag/rdbms/orcl/trace/
原来是连接数达到最大限制了,所以才连不上数据库
3.清理会话
#查看非本地连接进程
ps -ef|grep -v grep|grep LOCAL=NO |wc -l
#杀掉所有非本地连接进程
ps -ef|grep -v grep|grep LOCAL=NO |awk '{print $2}'|xargs kill -9
#查看哪个ip链接数最多
netstat -na|grep "ESTA"|awk '{print $5}'|awk -F ":" '{print $1}'|awk '{++S[$NF]} END {for (a in S) print a, S[a]}'
这个根据实际情况而定,我这边是因为应用问题导致,所以要杀掉会话,如果是正常连接达到最大限制,可以根据数据库配置调整链接数
4.查看process相关参数
#查看当前系统允许的进程连接数
show parameter process;
#查看系统允许的会话数
show parameter session;
#查看系统当前进程的连接数
select count(*) from v$process;
#查看系统当前会话的连接数
select count(*) from v$session;
#查看当前系统活动的连接数
select count(*) from v$session where status='ACTIVE';
#修改process和session
alter system set processes=3000 scope=both;
alter system set sessions=3100 scope=both;
#重启生效
shutdown immediate;
startup;