Oracleにログオンする時にエラーが発生しました。
▼SIOBについての過去記事 www.reclog.net
ORA-12516エラー
SIOBを起動して、ログオンをしようとした際に上記のエラーメッセージが表示されました。 個人的に初めて見るメッセージで原因が分かりません。 なので、とりあえず公式のOracleDatabaseエラー・メッセージを調べてみました。
ORA-12516: TNS: リスナーは、一致するプロトコル・スタックが使用可能なハンドラを検出できませんでした。
原因: SERVICE_NAMEの既知および使用可能なサービス・ハンドラが、クライアントのプロトコル・スタック(トランスポート、セッションおよびプレゼンテーション・プロトコル)をサポートしていません。
処置: SERVICE_NAMEのサービス・ハンドラ(ディスパッチャなど)が、リスナーに登録されているか、接続を許可されているか、および要求されたプロトコルをサポートするために適切に構成されているかどうかを確認してください。
ORA-12500からORA-12699より引用
いまいちピンときません。 書いてある内容で関係しそうかなっと思うのはセッション数?
原因はプロセス数
▼参考にさせていただいたサイト replication.hatenablog.com
もう少し調べてみたところ、原因は「最大プロセス数の設定かな?」というところまで分かりました。 Oracleデータベース作成時に少なく設定した最大ユーザープロセス数に関する初期化パラメータPROCESSESが影響しているようです。(エラー発生した時の設定値は50)
エラーを再現してみる
折角なので解消する前にエラーを再現してみることにしてみました。 再現方法は単純に現在プロセス数を確認しつつ切断せずにログオンを繰り返します。
確認には以下のSQLを使用しました。
SELECT * FROM V$RESOURCE_LIMIT WHERE RESOURCE_NAME = 'processes' OR RESOURCE_NAME = 'sessions';
※結果の値が変わらない場合は省略しています。
接続数:1(OK)
接続数:3(OK)
接続数:4(OK)
接続数:6(NG)
6回ログオンを繰り返したところでORA-12516エラーが発生。 前回は接続数:1の段階でエラーが発生していたので、断定は出来ませんがプロセス数が原因の可能性が高そうです。 とりあえずエラーが再現できたことでスッキリしました。
解決方法
今回はWindowsのOracleサービスを再起動する方法で復旧させました。 個人で学習用に立ち上げているDBならサクッとこの方法でやると良いと思います。
上記の方法以外にSQL*Plusを用いた再起動方法もあります。 どちらの方法をとっても良いですが、絶賛稼働中の本番DBでやると大変な事になりますので注意してください。 今回は幸か不幸か業務ではあまり見られないエラーを見ることが出来て勉強になりました。
余談
実はSQL*Plusを再起動方法についても書こうと思ったのですが、別のエラーに遭遇してしまいました。 それはまた今度書こうと思います。