こんにちは、KiYOです。
システムエンジニア歴20年オーバーの経歴です。
Oracleを使用してて、急に以下のエラーで接続できなくなる事があった場合、Oracleのプロセス数とセッション数の現在値を確認し、見直す必要があります。
- 「ORA-00020 最大プロセス数を超えました」
- 「ORA-00018 最大セッション数を超えました」
目次
現状のプロセス数とセッション数を把握し、原因を特定
V$RESOURCE_LIMITのオブジェクトを参照できるユーザー(system or sys)でSQLを実行します。
SELECT
RESOURCE_NAME リソース名,
CURRENT_UTILIZATION 現在数,
MAX_UTILIZATION 最大数,
LIMIT_VALUE 上限
FROM
V$RESOURCE_LIMIT
WHERE
RESOURCE_NAME IN ('processes','sessions');
・意味
processes → 同時接続できるOSプロセス最大数
sessionsS → セッション最大数
上限に達していれば、原因は設定値より多くの接続数が発生したことになります。
対処法
DBにログイン
$ sqlplus /nolog
SQL> connect / as sysdba
接続されました。
パラメータファイルの確認
pfile(初期化パラメータファイル)かspfile(サーバパラメータファイル)のどちらが優先になっているか確認。
下記コマンドでSPFILEのパスが表示されたら、SPFILEを使用
VALUEがNULLLだったらPFILE
SQL> SHOW PARAMETER spfile
NAME TYPE VALUE
-------------------------- ----------- ---------------------------------------------
spfile string %ORACLE_HOME%¥DATABASE¥SPFILE%ORACLE_SID%.ORA
最適なプロセス数とセッション数の算出
現状把握した際の上限より多くプロセス数を設定
セッションはプロセス数の約10%程度大きくしていた方がいいです。
SESSIONSのデフォルト値 = (1.1 x PROCESSES) + 5
パラメータファイルに適用
以下のコマンドを実行。xxxには上記で算出した値をそれぞれの箇所に設定します。
alter system set processes = xxx scope=spfile;
alter system set sessions = xxx scope=spfile;
パラメータファイルの反映
Oracleの再起動で値が反映されます。
上記のV$RESOURCE_LIMITのSQLで変わったかどうか確認してください。
(1)Oracle 停止(shutdown immediate)
(2)Oracle 起動(startup)
以上で、対応完了となります。
トラブルにならないよう、業務要件にあったOralce設計が大事ですね。これらの本とかシステム構築・運用する上で大変お勧めです。
Udemyというオンライン講座でもデータベースの学習はできます。 再生速度を早めてみたり、何度も見返すことができるのでおすすめです! 私も色々なデータベースをここで学習しています。
[affi id=2]
リンク
Oracleの運用中は色々トラブルが発生します。
デッドロックが発生したときの調査方法や解決法はこちらをご覧ください。
Oracleのロック原因のセッション抽出&強制ロック解除 こんにちは、KiYOです。 システムエンジニア歴20年オーバーの経歴です。 KiYO Oracleを使ったシステムを構築しているとたまーにデッドロックが発生して応答が返ってこ…
統計情報について詳しく知りたい方はこちらをご覧ください。
Oracleの統計情報の確認と取得方法 【統計情報とは】 統計情報とはテーブルやインデックス、レコード件数などの情報のことです。これらの情報が記録されたものを統計情報と呼びます。 【統計情報が古いと…
コメント