ORACLE:ORA-00020 maximum number of processes (1000) exceeded

解决办法1(删归档):

--此时已经登录不进库

ps -ef|grep LOCAL               --可以看到很多连接

使用os命令kill掉一些进程以释放资源 --head 取前10条

ps -ef|grep LOCAL=NO|grep -v grep|awk '{print $2}'|head|xargs kill -9

登陆后台数据库进一步观察会话使用情况

SELECT EVENT, PROGRAM, COUNT(*)
  FROM V$SESSION
 GROUP BY EVENT, PROGRAM
 ORDER BY 3;
EVENT                                    PROGRAM                          COUNT(*)
---------------------------------------- ------------------------------ ----------
DIAG idle wait                            oracle@lf1  (DIAG)                       1
class slave wait                          oracle@lf1  (GCR0)                       1
buffer busy waits                         oracle@lf1  (J004)                       1
library cache lock                 		OMS                                   59

library cache lock OMS 59

从结果输出发现大量的会话处于library cache lock等待事件中,接下来 定位阻塞者是哪个会话

select event,p1raw,p2 from v$session where event ='library cache lock';

EVENT                P1RAW                    P2
-------------------- ---------------- ----------
library cache lock   000000007C384160 1737585656
library cache lock   000000007C384160 1737462296
library cache lock   000000007C384160 1737338936
library cache lock   000000007C384160 1737215576
library cache lock   000000007C384160 1737092216
library cache lock   000000007C384160 1736968856



select event from v$session where saddr=( select kgllkses from x$kgllk where KGLLKhdl ='000000007C384160' and KGLLKMOD>0 );

EVENT
----------------------------------------------------------------
log file switch (archiving needed)

至此已经看到了导致ORA-00020错误的源头,归档满了,删除多余日志问题解决!

解决办法2(修改参数):

在xshell里面登录oracle

# su - oracle

# sqlplus / as sysdba    连接Oracle

提示要输入用户名和密码。

并报错ORA-00020: maximumnumber of processes (300) exceeded

根据报错信息是由于processes进程数达到了最大值。

常规方法无法登录,我们连接时候要加上-prelim参数

# sqlplus -prelim/ as sysdba 这样终于登录进Oracle的SQL界面

SQL> set linesize 1000;

SQL> show parameter processes;

可以看到默认的processes设置的是300. 太小了,稍后我们得改一改。

生产系统,不能重启数据库,好在系统过了一会儿恢复正常了。主要是因为大量数据库的插入修改操作造成的。

解决方案:

在系统空闲时,修改系统processes参数为1000,重启数据库。【processes参数是静态参数,修改后需要启动数据库。】

SQL> alter system set processes=1000 scope=spfile;

SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP;

SQL> show parameter processes;

可以看到现在processes 参数被改成1000了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值