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 やイベントビューアなども見て、リスナーのサービスが異常終了していないか、故意に停止されていないかを確認する。

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



類似するエラー

関連事項

 

一覧ページへ戻る

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

ORA-12541の関連トピックス

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ オラクルサポートセンター