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

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を終了します。

-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: リスナーがありません。
(略)

サービスで確かめる
Windows キー+R で services.msc を実行してサービスの一覧を開きます。OracleOraDB21Home1TNSListener がリスナーのサービスです。「状態」が空欄なら止まっています。
対処:リスナーを開始する
OracleOraDB21Home1TNSListener を選び、上の ▶(サービスの開始)を押します。

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

管理者として開いたコマンドプロンプトで lsnrctl start を実行しても開始できます。
開始した直後は ORA-12514 になる
リスナーを開始してすぐに lsnrctl status を実行すると、サービスの一覧に CLRExtProc しかありません。XE と xepdb1 がまだ出ていません。
C:\Users\admin>lsnrctl status
(略)
稼働時間 0 日 0 時間 0 分 12 秒
(略)
サービスのサマリー...
サービス"CLRExtProc"には、1件のインスタンスがあります。
インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。

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

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

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件のハンドラがあります...
コマンドは正常に終了しました。

登録された後は、接続できます。
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

すぐに登録する(ALTER SYSTEM REGISTER)
待たずに登録したいときは、データベースのパソコンの上で管理者として接続し、ALTER SYSTEM REGISTER; を実行します。
C:\Users\admin>sqlplus / as sysdba
(略)
SQL> alter system register;
システムが変更されました。
SQL> exit

リスナーを開始してから 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:
リスナーは接続記述子でリクエストされたサービスを現在認識していません

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」で出ます。

しかし接続すると、ORA-12518 になりました。リスナーは ORCL というインスタンスに接続を渡そうとしますが、そのインスタンスは存在しないためです。
C:\Users\admin>sqlplus -L system/manager@192.168.1.110/orcl
(略)
ERROR:
ORA-12518: TNS: リスナーはクライアント接続をハンドオフできませんでした

XE は、データベースが自分でサービス(XE・xepdb1)をリスナーに登録するので、listener.ora にサービスを書き足す必要はありません。書き足した場合は元に戻します(この記事でも、試した後に元に戻しました)。
外部のコンピューターから接続するとき
別のコンピューターから接続するときは、リスナーが止まっていても 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

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

外部から接続するには、リスナーの待ち受けアドレス(listener.ora の HOST)が、外部から届く名前か IP アドレスになっている必要があります。そのパソコンの中だけで使うなら localhost でもかまいません。ファイアウォールの設定や HOST の確かめ方は「XE のインストールと外部から接続する手順」を見てください。
動作確認した環境
| 項目 | 内容 |
|---|---|
| 確認した日 | 2026 年 11 月 8 日 |
| データベースのパソコン | Windows 11 Pro 25H2(Hyper-V の仮想マシン)、コンピューター名 DBHOST01 |
| Oracle Database | 21c 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 での動き |
