【CONNECT】ORA-00020錯誤模擬及處理方法

secooler發表於2011-12-12
  當資料庫的連線數達到上限後,後續的登陸操作都會報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 --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-713198/,如需轉載,請註明出處,否則將追究法律責任。

相關文章