[Oracle] ORA-00018、ORA-00020が発生したら... | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

sessions 初期化パラメータに必要十分な最大セッション数を設定しているにもかかわらず、

ORA-00018: 最大セッション数を超えました

が発生する...

あるいは processes 初期化パラメータに必要十分な最大プロセス数を設定しているにもかかわらず、

ORA-00020: 最大プロセス数(string)を超えました

が発生する...

といった場合は、アプリケーション内にセッションを閉じ忘れている箇所があり、用済みとなったセッションが残存・蓄積している可能性があります。


こんな時には、以下のような SQL を実行して各セッションが直近に実行した SQL 情報を取得すると、アプリケーションのどこに問題があるのかを特定するためのヒントを得られる可能性があります。

SELECT 
  SS.SID, 
  SS.STATUS, 
  SS.USERNAME, 
  SS.MACHINE, 
  SS.LOGON_TIME, 
  SS.SQL_ID, 
  SS.SQL_CHILD_NUMBER, 
  SQ.SQL_TEXT 
  FROM V$SESSION SS, V$SQL SQ 
  WHERE SS.SQL_ID = SQ.SQL_ID 
    AND SS.SQL_CHILD_NUMBER = SQ.CHILD_NUMBER 
  ORDER BY SS.LOGON_TIME DESC;

つまり、多くのセッションで同じ SQL が実行されていれば、その SQL を発行している個所が怪しいということになります。


ORA-00018 の場合は Oracle にログインすることすらできず、調べようにも調べられないということもありますが...