はじめに
OracleDBを使用したプログラムを起動した時に、ORA-00020エラーが出た場合の対処法です。
このエラーが出る原因は、同時に起動しているプロセス数が初期化パラメータPROCESSESの上限値に達することです。
プロセス数上限値を大きくする
現在の上限値を調べるには、V$RESOURCE_LIMITのLIMIT_VALUEを見ます。
SELECT *
FROM V$RESOURCE_LIMIT
WHERE NAME = 'processes' OR 'sessions'
V$RESOURCE_LIMITの各カラムの意味は以下のとおりです。
(Oracle® Databaseリファレンより一部引用)
RESOURCE_NAME:リソース名
CURRENT_UTILIZATION:現在使用されている(リソースまたはロック、プロセスの)数
MAX_UTILIZATION:最後にインスタンスを起動してからのこのリソースの最大消費量
INITIAL_ALLOCATION:初期の割当て。初期化パラメータ・ファイルに指定したリソースの値と同じ。無制限の場合はUNLIMITED。
LIMIT_VALUE:上限値。リソースおよびロックの場合は無制限。無制限の場合はUNLIMITED。
では、プロセス数上限値の変更方法です。
初期化パラメータ・ファイル(SPFILE)で上限値を指定し、DBを再起動することになります。
プロセス数だけでなく、セッション数の変更も行う必要があります。
ALTER SYSTEM SET PROCESSES = (上限値) SCOPE = SPFILE
ALTER SYSTEM SET SESSIONS = (上限値) SCOPE = SPFILE
プロセス数の上限値は、同時に起動する可能性がある最大プロセス数に、バックグラウンド・プロセス数を加算した数になります。
バックグラウンド・プロセスの最大値は一概に決めることは出来ないので、現状を顧みて決定します。
セッション数の上限値は、プロセス数の最大値に、バックグラウンド・プロセスの数を加えて、さらに再帰セッションの約10%を加えた値となります。
求め方は以下のようになります。
(1.5 × PROCESSES) + 22
設定が完了したら、DBを再起動してください。
おわりに
セッション数の上限値は推奨値(参考値)となりますので、実際の運用に合わせて変更する場合もあります。