ITPub博客

【CONNECT】ORA-00020错误模拟及处理方法

原创 Linux操作系统 作者:secooler 时间:2011-12-12 22:25:52 2 删除 编辑
  当数据库的连接数达到上限后,后续的登陆操作都会报ORA-00020错误,这里给出ORA-00020错误的模拟及处理方法。

1.调整数据库的processes参数到25
1)由于processes参数是静态参数,调整时需要使用“scope=spfile”选项进行调整。
sys@ora11g> alter system set processes=25 scope=spfile;

System altered.

2)重启数据库使参数调整生效
sys@ora11g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ora11g> startup;
ORACLE instance started.

Total System Global Area  535662592 bytes
Fixed Size                  1337720 bytes
Variable Size             398460552 bytes
Database Buffers          130023424 bytes
Redo Buffers                5840896 bytes
Database mounted.
Database opened.

3)确认调整结果
sys@ora11g> show parameter processes

NAMETYPE                          VALUE
--------------------------------- -------------
aq_tm_processesinteger            0
db_writer_processesinteger        1
gcs_server_processesinteger       0
global_txn_processesinteger       1
job_queue_processesinteger        1000
log_archive_max_processesinteger  4
processesinteger                  25

此时数据库的processes参数已经成功调整为25。

2.查看当前数据库进程数
sys@ora11g> select count(*) from v$process;

  COUNT(*)
----------
       23

此时进程数是23。25是进程数的上限,因此次数据库实例还可以支持一个进程连接。

3.开启新窗口连接数据库实例
ora11g@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Dec 12 21:25:30 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

sys@ora11g> select count(*) from v$process;

  COUNT(*)
----------
       24

此时显示成功连接到数据库实例,进程数显示为24。

4.再次开启新窗口创建数据库连接
ora11g@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Dec 12 21:26:37 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ERROR:
ORA-00020: maximum number of processes (25) exceeded


Enter user-name:

ORA-00020错误已经成功模拟出来,原因是此时已经达到数据库进程数的上限25。注意25表示最大的进程数,即当进程数为25时即会报错,数据库实例最多支持24个有效的进程。

5.处理ORA-00020错误
既然是由于进程数过多到时的报错,因此我们最直接的处理方法便是手工杀掉无用的用户连接。
1)查看数据库后台进程信息
ora10g@secdb /home/oracle$ ps -ef | grep ora11g
oracle   22882     1  0 21:24 ?        00:00:00 ora_pmon_ora11g
oracle   22884     1  0 21:24 ?        00:00:00 ora_vktm_ora11g
oracle   22888     1  0 21:24 ?        00:00:00 ora_gen0_ora11g
oracle   22890     1  0 21:24 ?        00:00:00 ora_diag_ora11g
oracle   22892     1  0 21:24 ?        00:00:00 ora_dbrm_ora11g
oracle   22894     1  0 21:24 ?        00:00:00 ora_psp0_ora11g
oracle   22896     1  0 21:24 ?        00:00:00 ora_dia0_ora11g
oracle   22898     1  0 21:24 ?        00:00:00 ora_mman_ora11g
oracle   22900     1  0 21:24 ?        00:00:00 ora_dbw0_ora11g
oracle   22902     1  0 21:24 ?        00:00:00 ora_lgwr_ora11g
oracle   22904     1  0 21:24 ?        00:00:00 ora_ckpt_ora11g
oracle   22906     1  0 21:24 ?        00:00:00 ora_smon_ora11g
oracle   22908     1  0 21:24 ?        00:00:00 ora_reco_ora11g
oracle   22910     1  0 21:24 ?        00:00:00 ora_mmon_ora11g
oracle   22912     1  0 21:24 ?        00:00:00 ora_mmnl_ora11g
oracle   22914     1  0 21:24 ?        00:00:00 ora_d000_ora11g
oracle   22916     1  0 21:24 ?        00:00:00 ora_s000_ora11g
oracle   22945 22103  0 21:24 ?        00:00:00 oracleora11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   22947     1  0 21:24 ?        00:00:00 ora_qmnc_ora11g
oracle   22961     1  0 21:24 ?        00:00:00 ora_cjq0_ora11g
oracle   22972     1  0 21:25 ?        00:00:00 ora_q000_ora11g
oracle   22974     1  0 21:25 ?        00:00:00 ora_q001_ora11g
oracle   22993 22992  0 21:25 ?        00:00:00 oracleora11g (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   23106 23066  0 21:27 pts/6    00:00:00 grep --color ora11g

这里显示出两类进程,一类是Oracle数据库的后台进程,另外一类是用户连接进程。
我们可以考虑讲用户连接进程杀掉,注意Oracle数据库后台进程不可轻易手工杀掉。

2)杀掉用户连接进程22945
ora10g@secdb /home/oracle$ kill -9 22945

3)尝试重新连接数据库
ora11g@secdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Mon Dec 12 21:28:56 2011

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

sys@ora11g>

连接成功。到此ORA-00020错误便处理完毕。

6.小结
  本文给出了ORA-00020错误的模拟以及简单的处理方法。对于生产环境最有效的避免发生ORA-00020错误的方法便是,上线前充分评估系统需要的最大进程数,一次性设置充分。这样便可以从根本上防止ORA-00020错误的发生。

Good luck.

secooler
11.12.12

-- The End --

请登录后发表评论 登录
全部评论
Oracle ACE 总监,OCM联盟(ocmu.org)创始人,恩墨学院(enmoedu.com)创始人,ITPUB Oracle专题深入讨论版版主,资深Oracle数据库专家,北京大学理学硕士,获Oracle OCM 10g 11g认证,ACOUG核心成员,DATAGURU专家团成员,Blogger。Good luck.

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    7853071