Oracle > ORA-12516(Oracle接続不可)

2011-11-18 11:21:59 (Fri);

ORA-12516: TNS: リスナーは、一致するプロトコル・スタックが使用可能なハンドラを検出できませんでした。


今まで問題なく接続できていたのに、
突然データベースに繋がらなくなったときによく発生するエラー。

上記エラー発生時の主な原因は、
  • Oracleの最大セッション数が超えている
  • listenerの構成が正しくない
などなど


Oracleの最大セッション数が超えている

以下SQLを実行して、セッション上限と現在数/最大数を確認する
conn system/manager@db

SELECT
    RESOURCE_NAME リソース名,CURRENT_UTILIZATION 現在数
    ,MAX_UTILIZATION 最大数,LIMIT_VALUE 上限
FROM V$RESOURCE_LIMIT
WHERE RESOURCE_NAME IN ('processes','sessions')


V$RESOURCE_LIMIT の内容
列  説明                    
CURRENT_UTILIZATION  現在使用されている(リソースまたはロック、プロセスの)数
MAX_UTILIZATION    最後にインスタンスを起動してからのこのリソースの最大消費量
INITIAL_ALLOCATION  初期の割当て。これは、初期化パラメータ・ファイルに指定したリソースの値と同じ(無制限の場合、UNLIMITED)。
LIMIT_VALUE      リソースおよびロックの場合は無制限。これは、初期の割当て値より大きくてもかまわない(無制限の場合、UNLIMITED)。


最大接続数が超えていそうな場合は、
単に利用者やセッションが急増したから発生したのか、
プログラムで不要なセッションを張りまくっているかのどちらかの切り分けを行う。

プログラムに不具合が無い場合は、該当システムの最大利用ユーザ数を調査し、
(もちろんバッチ処理などからの接続も考慮)セッション上限を適切に変更する。

リソースが不足するので過度の増加には注意。


listenerの構成が正しくない

listener.ora を確認して、記述が間違っていないか確認する
コマンドプロンプトなどで、lsnrctl services コマンド等で状況を確認する





最終更新:2011年11月18日 11:21