ORA-12541「TNS: リスナーがありません」の原因と対処(Oracle Database 21c XE・Windows)

ORA-12541 リスナー起動で解決! 似たエラーとの違いを見分けて正しく直す Oracle

Oracle Database に接続しようとすると、ORA-12541: TNS: リスナーがありません というエラーが出ることがあります。この記事では、Windows 11 の Oracle Database 21c Express Edition(XE)で実際にこのエラーを出し、原因と対処を確かめた結果をまとめます。リスナーを開始した直後に出る ORA-12514 や、外部から接続したときの ORA-12170 との違いも説明します。

結論
・ORA-12541 は、リスナーが動いていないときに出ます。サービス OracleOraDB21Home1TNSListener を開始します。
・開始した直後は、しばらく ORA-12514 になります。1 分ほど待つか、ALTER SYSTEM REGISTER; を実行します。
・XE のサービス名は XE(CDB)と xepdb1(PDB)です。orcl などほかの名前では接続できません。

XE のインストールと、外部から接続できるようにする設定は「Windows 11 Pro に無料の Oracle Database 21c Express Edition(XE)をインストールして外部から接続する手順」で説明しています。

この記事の例では、データベースのパソコンのコンピューター名を DBHOST01、IP アドレスを 192.168.1.110 としています。コード中の赤い太字は、自分の環境に合わせて書き換える部分です。コマンドやパスの \(バックスラッシュ)は、日本語のフォントでは ¥ に見えることがありますが、同じ文字です。

似たエラーとの違い

接続のエラーは、番号でどこが原因かが分かります。この記事の環境で実際に出たものです。

エラー出た場面原因対処
ORA-12541
リスナーがありません
リスナーが止まっているときに、データベースのパソコンの上から接続リスナーが動いていないサービス OracleOraDB21Home1TNSListener を開始する
ORA-12514
サービスを認識していません
リスナーを開始した直後に接続データベースがまだリスナーに登録されていない1 分ほど待つ。または ALTER SYSTEM REGISTER;
ORA-12514
サービスを認識していません
サービス名を間違えて接続(例:orcl)その名前のサービスが無いXE または xepdb1 を指定する
ORA-12518
リスナーはクライアント接続をハンドオフできませんでした
listener.ora に存在しない SID(ORCL)を書き足して接続リスナーが、存在しないインスタンスに接続を渡せない書き足した設定を元に戻す(→「listener.ora に SID を書き足しても解決しない」)
ORA-12170
接続タイムアウト
外部のコンピューターから接続ファイアウォールで 1521 番が止められている。リスナーが止まっているときも、外部からはこのエラーになったリスナーが動いているか確かめ、ファイアウォールで 1521 番を許可する
外部からの接続が通る 3 つの関門。ファイアウォールで止まると ORA-12170、リスナーが止まっていると外部からは ORA-12170・サーバー上では ORA-12541、サービス名が違うと ORA-12514

ORA-12541 が出る状況

データベースのパソコン(DBHOST01)の上でコマンドプロンプトを開き、SQL*Plus で XEPDB1 に接続します。リスナーが止まっていると、すぐに ORA-12541 になります。

C:\Users\admin>sqlplus -L system/manager@192.168.1.110/xepdb1

SQL*Plus: Release 21.0.0.0.0 - Production on 日 11月 8 00:09:30 2026
Version 21.3.0.0.0

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

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


SP2-0751: Oracleに接続できませんでした。SQL*Plusを終了します。
データベースのパソコンの上で sqlplus -L system/manager@192.168.1.110/xepdb1 を実行すると ORA-12541 TNS リスナーがありません になる

-L は、接続に失敗したときにユーザー名を聞き直さずに終わらせるオプションです。

リスナーの状態を確かめる

lsnrctl status を実行すると、リスナーに接続できないことが分かります。

C:\Users\admin>lsnrctl status

LSNRCTL for 64-bit Windows: Version 21.0.0.0.0 - Production on 08-11月-2026 00:09:17

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

(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DBHOST01)(PORT=1521)))に接続中
TNS-12541: TNS: リスナーがありません。
 TNS-12560: TNS: プロトコル・アダプタ・エラー
  TNS-00511: リスナーがありません。
   64-bit Windows Error: 61: Unknown error
(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))に接続中
TNS-12541: TNS: リスナーがありません。
(略)
リスナーが止まっているときの lsnrctl status。TCP の 1521 番(HOST=DBHOST01)に接続できず TNS-12541 リスナーがありません になる

サービスで確かめる

Windows キー+R で services.msc を実行してサービスの一覧を開きます。OracleOraDB21Home1TNSListener がリスナーのサービスです。「状態」が空欄なら止まっています。

対処:リスナーを開始する

OracleOraDB21Home1TNSListener を選び、上の ▶(サービスの開始)を押します。

サービスの一覧で OracleOraDB21Home1TNSListener を選ぶ。状態が空欄で止まっている。上のサービスの開始ボタンを押す

「状態」が「実行中」になれば、リスナーが動いています。

OracleOraDB21Home1TNSListener の状態が実行中になった

管理者として開いたコマンドプロンプトで lsnrctl start を実行しても開始できます。

スタートアップの種類を確かめてください。XE をインストールした直後は「自動」で、Windows の起動と一緒にリスナーも動きます。「手動」になっていると、Windows を起動し直したときにリスナーが止まったままになり、また ORA-12541 になります。いつも使うなら、サービスをダブルクリックして「スタートアップの種類」を「自動」にしておきます。

開始した直後は ORA-12514 になる

リスナーを開始してすぐに lsnrctl status を実行すると、サービスの一覧に CLRExtProc しかありません。XE と xepdb1 がまだ出ていません。

C:\Users\admin>lsnrctl status
(略)
稼働時間                  0 日 0 時間 0 分 12 秒
(略)
サービスのサマリー...
サービス"CLRExtProc"には、1件のインスタンスがあります。
  インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。
リスナーを開始して 12 秒後の lsnrctl status。サービスは CLRExtProc だけで、XE と xepdb1 はまだ登録されていない

このときに接続すると、今度は ORA-12514 になります。

C:\Users\admin>sqlplus -L system/manager@192.168.1.110/xepdb1
(略)
ERROR:
ORA-12514: TNS:
リスナーは接続記述子でリクエストされたサービスを現在認識していません
リスナーを開始した直後に接続すると ORA-12514 リスナーは接続記述子でリクエストされたサービスを現在認識していません になる

リスナーは、自分ではデータベースの名前を知りません。データベースのほうが、リスナーに「XE・xepdb1 はここにある」と知らせる(登録する)しくみです。リスナーだけを開始し直すと、データベースが次に知らせてくるまでの間は名前が分からないので、ORA-12514 になります。

リスナーを開始してからデータベースが登録されるまでの流れ。開始から 34〜60 秒後までは CLRExtProc だけで、接続すると ORA-12514。その後 XE・XEXDB・xepdb1 が加わって接続できる。ALTER SYSTEM REGISTER を実行するとすぐ登録される

1 分ほど待つ

何もしなくても、この記事の環境では開始から 34〜60 秒後(3 回計測)に XE と xepdb1 が登録されました。

C:\Users\admin>lsnrctl status
(略)
稼働時間                  0 日 0 時間 0 分 56 秒
(略)
サービスのサマリー...
(略)
サービス"XE"には、1件のインスタンスがあります。
  インスタンス"xe"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"XEXDB"には、1件のインスタンスがあります。
  インスタンス"xe"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"xepdb1"には、1件のインスタンスがあります。
  インスタンス"xe"、状態READYには、このサービスに対する2件のハンドラがあります...
コマンドは正常に終了しました。
リスナーを開始して約 1 分後の lsnrctl status。XE と xepdb1 が自動で登録されている

登録された後は、接続できます。

C:\Users\admin>sqlplus -L system/manager@192.168.1.110/xepdb1
(略)
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL> show con_name

CON_NAME
------------------------------
XEPDB1
登録された後に sqlplus で xepdb1 に接続すると、接続されました と表示され CON_NAME は XEPDB1

すぐに登録する(ALTER SYSTEM REGISTER)

待たずに登録したいときは、データベースのパソコンの上で管理者として接続し、ALTER SYSTEM REGISTER; を実行します。

C:\Users\admin>sqlplus / as sysdba
(略)
SQL> alter system register;

システムが変更されました。

SQL> exit
sqlplus / as sysdba で接続して alter system register を実行し、システムが変更されました と表示された

リスナーを開始してから 22 秒の時点で、XE と xepdb1 が登録されていました。

ALTER SYSTEM REGISTER の後の lsnrctl status。開始から 22 秒で XE と xepdb1 が登録されている

sqlplus / as sysdba は、Windows のログインで認証する方法です(インストールしたユーザーは ORA_DBA グループに入っているので、パスワードは要りません)。

サービス名を間違えたときも ORA-12514 になる

XE で使えるサービス名は、lsnrctl status の「サービスのサマリー」に出る XE(コンテナ・データベースのルート)と xepdb1(プラガブル・データベース)です。ほかの名前(例:orcl)で接続すると、リスナーが動いていても ORA-12514 になります。

C:\Users\admin>sqlplus -L system/manager@192.168.1.110/orcl
(略)
ERROR:
ORA-12514: TNS:
リスナーは接続記述子でリクエストされたサービスを現在認識していません
XE に存在しないサービス名 orcl で接続すると ORA-12514 になる

orcl は、Standard Edition 2 や Enterprise Edition をインストールしたときによく使われる名前です(例:「Windows Server 2022 に Oracle Database 21c(21.3)をインストールして外部から接続する手順」)。XE では使えません。

listener.ora に SID を書き足しても解決しない

ORA-12514 の対処として、リスナーの設定ファイル listener.ora にサービスを書き足す(静的に登録する)方法が紹介されることがあります。XE で、存在しない SID「ORCL」を書き足して試しました。

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (略)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (SID_NAME = ORCL)
    )
  )

リスナーを再起動すると、lsnrctl status には「サービス”ORCL”」が「状態UNKNOWN」で出ます。

listener.ora に ORCL を書き足した後の lsnrctl status。サービス ORCL がインスタンス ORCL 状態 UNKNOWN で表示される

しかし接続すると、ORA-12518 になりました。リスナーは ORCL というインスタンスに接続を渡そうとしますが、そのインスタンスは存在しないためです。

C:\Users\admin>sqlplus -L system/manager@192.168.1.110/orcl
(略)
ERROR:
ORA-12518: TNS: リスナーはクライアント接続をハンドオフできませんでした
ORCL を書き足した状態で orcl に接続すると ORA-12518 リスナーはクライアント接続をハンドオフできませんでした になる

XE は、データベースが自分でサービス(XE・xepdb1)をリスナーに登録するので、listener.ora にサービスを書き足す必要はありません。書き足した場合は元に戻します(この記事でも、試した後に元に戻しました)。

この記事の以前の版では、Net Manager で SID「ORCL」を登録する方法を ORA-12514 の解決方法として紹介していました。2026 年 11 月に実機で確かめたところ ORA-12518 になり、解決しないことが分かったため訂正しました。

外部のコンピューターから接続するとき

別のコンピューターから接続するときは、リスナーが止まっていても ORA-12541 にはならず、ORA-12170(タイムアウト)になりました(データベースのパソコンのファイアウォールで 1521 番を許可した状態で確認)。外部から ORA-12170 が出たら、まずデータベースのパソコンで lsnrctl status を実行してリスナーが動いているかを確かめます。

この記事では、クライアントに Windows Server 2025 を使い、Oracle Instant Client 19.19 を C:\verify12\instantclient_19_19 に展開して接続しました(画面のプロンプトに出るフォルダ名は、この置き場所です)。

C:\verify12\instantclient_19_19>sqlplus -L system/manager@192.168.1.110/xepdb1
(略)
ERROR:
ORA-12170: TNS:Connect timeout occurred
リスナーが止まっている状態で外部のコンピューターから接続すると ORA-12541 ではなく ORA-12170 TNS:Connect timeout occurred になる

リスナーを開始し、データベースが登録された後は、外部からも接続できます。

C:\verify12\instantclient_19_19>set NLS_LANG=JAPANESE_JAPAN.JA16SJISTILDE

C:\verify12\instantclient_19_19>sqlplus -L system/manager@192.168.1.110/xepdb1
(略)
に接続されました。
SQL> show con_name

CON_NAME
------------------------------
XEPDB1
外部のコンピューターで NLS_LANG を設定してから xepdb1 に接続すると、接続されました と表示され CON_NAME は XEPDB1

外部から接続するには、リスナーの待ち受けアドレス(listener.ora の HOST)が、外部から届く名前か IP アドレスになっている必要があります。そのパソコンの中だけで使うなら localhost でもかまいません。ファイアウォールの設定や HOST の確かめ方は「XE のインストールと外部から接続する手順」を見てください。

動作確認した環境

項目内容
確認した日2026 年 11 月 8 日
データベースのパソコンWindows 11 Pro 25H2(Hyper-V の仮想マシン)、コンピューター名 DBHOST01
Oracle Database21c Express Edition(21.3.0.0.0)。サービス名 XE・xepdb1
クライアントWindows Server 2025(Hyper-V の仮想マシン)+ Oracle Instant Client 19.19(Basic・SQL*Plus)
確かめたことリスナー停止中の ORA-12541(サーバー上)と ORA-12170(外部)、リスナー開始直後の ORA-12514 と自動登録までの時間(3 回)、ALTER SYSTEM REGISTER、サービス名の誤りによる ORA-12514、listener.ora に存在しない SID を書き足したときの ORA-12518
確かめていないことNet Manager(GUI)での listener.ora の編集、Standard Edition 2・Enterprise Edition での動き
タイトルとURLをコピーしました