Oracle 起動に関するエラー

ORA-12541: TNS: リスナーがありません。

原因

リスナーの稼働は確認しているのに接続の度にエラーが出たり出なかったりする場合
サーバーへの負荷が非常に高い状態でクライアントアプリケーションからの接続と切断を繰り返し行なっている場合、瞬間的にリスナーに同時接続要求数(≠セッション数)の限度を超えた接続要求が発生しエラーとなっている可能性がある。

対応

リスナー設定(listener.ora) の QUEUESIZE を値を大きくする。デフォルト値は 5 (Windows XP)

  • Windows Workstation 系 - 5
  • Windows Server 20XX 系 - 50
  • UNIX 系 - 5

QUEUESIZE を 50 に設定する例

サーバーの listener.ora ファイル を変更した後 リスナーの再起動 または リロード
UNIX 系の場合には OS レベルでの TCP パラメータの設定による制限もあるので OS 個別のマニュアル参照。

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = rivus)(PORT = 1521)(QUEUESIZE = 50))
    )
  )

根本的な対応としては、Webアプリケーションならコネクションプーリングを使用しているかを確認する。プログラムのループ内で DB に接続、切断を繰り返すような行儀の悪いプログラムが存在しないか確認する。
この問題を抱えた Windows 上のアプリケーションは ORA-12542: TNS: アドレスがすでに使用中です。 を併発する可能性もあるので同時に対処することをお勧めする。

原因

リスナーが起動していない(または異常終了してしまった)状態において Oracle Net サービス経由の接続しようとしていると考えられる。

対応

OS の起動時に Oracle を起動する 設定にしておくことでリスナーも同時に起動するようにすることができる。(UNIX 系)
Windows はサービスによって管理されているので、「管理ツール」-「サービス」 スナップインからリスナーを自動起動設定にしておく。

リスナーを手動で起動するには

# lsnrctl start 

と実行し(急いでいれば)

# sqlplus / as sysdba
SQL> alter system register ;

としたあとで、さらに

# lsnrctl service または
# lsnrctl stat

によってリスナーの状態を確認する。

通常運用中に ORA-12541: 〜エラーが発生する場合には alert.log やイベントビューアなども見て、リスナーのサービスが異常終了していないか、故意に停止されていないかを確認する。

  • インストール直後にどうしても解消できない場合はツールを使って作り直しという選択も

    設定ファイルをエディタ等で編集したり Web からコピー&ペーストしていた場合、なにか不都合がある文字コードの混入や表面化していない何かで正しくパースされていない可能性がある。
    listener ファイルの複製を行った後で Oracle Net Manager(netmgr) を起動し [Oracle Net Configuration]+[Local]+[Listeners] からマイクアイコン? が付いた [LISTENER] を選択し、左にある[X] を押下して [LISTENER] を削除し [+] を押下して作成した [LISTER] を選択し、[Add Address] ボタンにてデフォルト値のままでアドレスを追加し、メニュー [File] から [Save Netwrok Configuration] で忘れずにセーブした後

# lsnrctl stop
# lsnrctl start
# lsnrctl service

で再起動とサービスを表示させ

....
Services Summary...
Service "orcl" has 1 instance(s).
...

のように作成したサービス名(orcl など) が正しく登録されていることを確認する。その後、旧リスナーファイルを見ながら設定を再構築してみる。
現在の linsterer.ora の内容を制御コードが見える Windows のエディタなどで一字一句冷静に見比べてみるとミスが見つかるかもしれない。

なお、リスナーを外部から故意に停止されることの無いようにリスナー用のパスワードを暗号化パスワード状態で設定しておくことをお勧めします。

 


類似するエラー

関連事項

 

一覧ページへ戻る

OTN (Oracle Technology Network)によるエラーメッセージによる情報だけでは、対処に困ったエラーについてのプラクティスです。
ベスト・プラクティスというわけではないので、書いてあることに固執しないで広い視野でエラー対応してください。

ORA-12541の関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー