ここでは Oracle Database 21c Express Edition で発生したエラー「ORA-12541: TNS: リスナーがありません」の対処法について紹介します。

エラーの現象

Oracle Database 21c Express Edition にユーザーを作成して接続を確認しようと SQL*Plus で接続しようとしたら「ORA-12541: TNS: リスナーがありません」というエラーが発生しました。

C:\>sqlplus sample/pass@localhost:1521/XEPDB1

SQL*Plus: Release 21.0.0.0.0 - Production on 月 7月 13 08:26:01 2026
Version 21.3.0.0.0


Copyright (c) 1982, 2021, Oracle. All rights reserved.

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


エラーの調査

Oracle Database 21c Express Editionをインストールして、ユーザーを作成して権限を付与しただけなので、設定に問題があると思い調査してみました。

Oracle Listener サービスを確認する

Windowsサービスを開いて「OracleOraDB21Home1TNSListener」が実行中か確認します。もし状態が「実行中」でない場合はサービスを開始します。
Windowsサービスは「ファイル名を指定して実行」に services.msc と入力してEnterキーを押下すると起動します。


listener.ora を確認する

listener.ora(リスナー・オラ)は、Oracle Databaseサーバー側で、クライアントからの接続要求を待ち受けるプログラム(リスナー)の設定ファイルです。
listener.ora の格納場所を確認するには以下のコマンドを入力して、パラメータ・ファイルのパスを確認します。
lsnrctl status

パラメータ・ファイル      C:\app\oracle\product\21c\homes\OraDB21Home1\network\admin\listener.ora


listener.ora の中身を確認します。(listener.ora は初期状態)

# listener.ora Network Configuration File: C:\app\oracle\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

DEFAULT_SERVICE_LISTENER = XE

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\oracle\product\21c\dbhomeXE)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\21c\dbhomeXE\bin\oraclr.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.14)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

19行目の HOST が localhost になっていませんでした。

エラーの対処法

listener.ora を修正する

listener.ora の HOST をIPアドレスから localhost に修正します。

# listener.ora Network Configuration File: C:\app\oracle\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

DEFAULT_SERVICE_LISTENER = XE

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\oracle\product\21c\dbhomeXE)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\21c\dbhomeXE\bin\oraclr.dll")
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )


Oracle Listener サービスを再起動する

listener.ora を修正したら、Windowsサービスの「OracleOraDB21Home1TNSListener」を再起動します。


SQL*Plus で接続してみる

SQL*Plus で接続しようとしたら、今度は「ORA-12514: TNS:リスナーは接続記述子でリクエストされたサービスを現在認識していません」というエラーが発生しました。

C:\>sqlplus sample/pass@localhost:1521/XEPDB1

SQL*Plus: Release 21.0.0.0.0 - Production on 月 7月 13 12:29:31 2026
Version 21.3.0.0.0


Copyright (c) 1982, 2021, Oracle. All rights reserved.

ERROR:
ORA-12514: TNS:リスナーは接続記述子でリクエストされたサービスを現在認識していません


ローカルリスナーの現在値を確認する

「ORA-12514」はリスナーがクライアントからの接続要求を受け取ったものの、指定されたサービス名を認識できていない場合に発生するエラーです。
sysdbaでログインして以下のコマンドを入力します。このコマンドでローカルリスナーの現在値を確認します。
SHOW PARAMETER local_listener;

SQL> SHOW PARAMETER local_listener;

NAME TYPE

------------------------------------ ----------------------
VALUE
------------------------------
local_listener string
LISTENER_XE

リスナー名は「LISTENER_XE」が正しいようです。

listener.ora のリスナー名を修正する

listener.ora のリスナー名を「LISTENER」から「LISTENER_XE」に修正します。

# listener.ora Network Configuration File: C:\app\oracle\product\21c\homes\OraDB21Home1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

DEFAULT_SERVICE_LISTENER = XE

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\app\oracle\product\21c\dbhomeXE)
      (PROGRAM = extproc)
      (ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\21c\dbhomeXE\bin\oraclr.dll")
    )
  )

LISTENER_XE =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )


もう一度、SQL*Plus で接続してみる

listener.ora を修正して Oracle Listener サービスを再起動したら、もう一度、SQL*Plus で接続してみます。
今度は正常に接続できました。

C:\>sqlplus sample/pass@localhost:1521/XEPDB1

SQL*Plus: Release 21.0.0.0.0 - Production on 月 7月 13 13:04:00 2026
Version 21.3.0.0.0


Copyright (c) 1982, 2021, Oracle. All rights reserved.

Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。


「ORA-12541: TNS: リスナーがありません」が発生した場合、Oracle Listener の起動状態、listener.ora を確認しましょう。また、今回は Oracle Database 21c Express Edition の listener.ora の初期値のリスナー名が間違っていました。


以上、Oracle Database 21c Express Edition で発生したエラー「ORA-12541: TNS: リスナーがありません」の対処法について解説しました。