ORA-12541: TNS:no listener は、Oracleクライアントが指定したホスト・ポートに接続しようとしたものの、その場所でOracleリスナーが待ち受けていない時に発生するエラーです。典型的には、リスナーが起動していない、ポートが違う、ホスト名が違う、ファイアウォールで遮断されている、別のOracle Homeの設定を見ている、といった原因です。
Oracle公式の説明でも、指定されたホストとポートにリスナープロセスがない場合は、リスナーが起動していて、そのキーで待ち受けているかを確認するよう案内されています。そのため、ORA-12541ではまず「リスナーに到達できているか」を確認します。
ORA-12541が出たら、最初にDBサーバー上で
lsnrctl status を実行します。リスナーが起動していなければ lsnrctl start、起動しているのに出るなら接続先ホスト、ポート、listener.ora、OSファイアウォール、ネットワーク経路を確認します。ORA-12541とは
ORA-12541は、接続要求を受けるリスナーが見つからない状態です。同じ接続系でも、ORA-12514 はリスナーに到達した後、サービス名が見つからない状態です。ORA-12541では、その前段階としてリスナーそのものに接続できていない可能性が高いです。
Oracleネットワーク設定の全体像は ネットワーク設定の記事 も参考になります。ただし、エラー対応ではまずリスナーの起動状態とポート待受を確認するのが近道です。
リスナーが停止している
DBは起動していても、リスナーが停止していると外部クライアントから接続できません。
ポート番号が違う
クライアントは1521へ接続しているが、リスナーは1522で待ち受けている、といったケースです。
ホスト名やIPが違う
接続先ホストが古い、DNSが違う、別サーバーを見ている場合があります。
ファイアウォールで遮断されている
サーバー側、ネットワーク機器、クラウドセキュリティグループでポートが閉じていることがあります。
最短チェック順
ORA-12541では、次の順番で見ると原因を分けやすくなります。接続文字列を何度も書き換える前に、リスナーとポートの状態を確認します。
1. DBサーバーでリスナー状態を見る
lsnrctl status を実行し、リスナーが起動しているか確認します。
2. リスナーを起動する
停止していれば lsnrctl start で起動します。起動後に再度接続確認します。
3. ポート待受を確認する
1521 など、接続文字列で指定したポートをOSが待ち受けているか確認します。
4. クライアントから疎通を見る
DBサーバー外から、指定ホスト・ポートへ到達できるか確認します。
lsnrctl statusでリスナー状態を確認する
DBサーバー上で、Oracleを起動しているOSユーザー、または適切なOracle環境変数を設定した状態で確認します。
lsnrctl status # LISTENERが複数ある場合 lsnrctl status LISTENER
lsnrctl status が失敗する、またはリスナーが起動していない場合は、起動します。リスナー確認の詳しい見方は リスナー確認の記事 を参照してください。
DBサーバー内から接続できるか確認する
外部クライアントからORA-12541になる場合でも、DBサーバー内からは接続できることがあります。サーバー内から接続できるなら、リスナー自体は動いていて、外部ネットワーク、ファイアウォール、接続先ホスト名の問題に絞りやすくなります。
# DBサーバー上で確認する sqlplus app_user/password@//localhost:1521/orclpdb1 # ホスト名でも確認する sqlplus app_user/password@//db.example.com:1521/orclpdb1
localhostで成功する
リスナーはローカルでは動いている可能性があります。外部から失敗するなら待受アドレスやファイアウォールを確認します。
localhostでも失敗する
リスナー停止、ポート違い、Oracle Home違い、listener.ora不備を優先して確認します。
localhostは成功、ホスト名は失敗
名前解決、listener.oraのHOST、OSのhosts、DNS、IPv4/IPv6の違いを確認します。
サーバー内は成功、外部だけ失敗
OSファイアウォール、ネットワークACL、クラウドセキュリティグループ、経路を確認します。
lsnrctl startでリスナーを起動する
リスナーが停止しているなら、まず起動します。複数リスナーを使っている場合は、接続先のリスナー名を間違えないようにします。
lsnrctl start # リスナー名を指定する場合 lsnrctl start LISTENER
自動起動設定や起動しない時の確認は リスナー起動の記事 にまとめています。起動後は lsnrctl status とクライアント接続を再確認します。
OSサービスとして起動しているか確認する
手動で lsnrctl start すると直るのに、OS再起動後にまたORA-12541になる場合は、自動起動設定を確認します。LinuxではsystemdやOracle Restart、WindowsではOracle関連サービスの状態を確認します。
systemctl status oracle-listener # Oracle Restart / Grid Infrastructure 環境の例 srvctl status listener srvctl start listener
Get-Service | Where-Object { $_.Name -like '*TNSListener*' }
# サービス名の例
Get-Service OracleOraDB19Home1TNSListener
ポート待受を確認する
リスナーが起動していても、クライアントが接続しているポートとリスナーの待受ポートが違うとORA-12541になります。サーバー側で1521などのポートがLISTENしているか確認します。
ss -lntp | grep 1521 # 環境によっては netstat を使う netstat -lntp | grep 1521
netstat -ano | findstr :1521 # PowerShellの場合 Get-NetTCPConnection -LocalPort 1521
待受がなければリスナーが起動していない、別ポートで起動している、別Oracle Homeのリスナーを見ている可能性があります。
listener.oraのHOSTとPORTを確認する
listener.ora の HOST と PORT が、接続文字列と一致しているか確認します。ホスト名変更、IP変更、サーバー移行後にズレることがあります。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db.example.com)(PORT = 1521))
)
)
listener.ora の場所が分からない場合は listener.oraの場所の記事 を参照してください。複数Oracle Homeがある環境では、編集しているファイルと実際に起動しているリスナーの設定ファイルが違うことがあります。
クライアントからホスト・ポートへ疎通確認する
DBサーバー上ではリスナーが起動していても、クライアント側から到達できない場合があります。サーバー側ファイアウォール、ネットワークACL、クラウドセキュリティグループ、VPN、名前解決を確認します。
tnsping ORCLPDB1 # Linux / macOS 例 nc -vz db.example.com 1521 # 名前解決確認 nslookup db.example.com
Test-NetConnection db.example.com -Port 1521
tnsping はOracle Netの接続情報確認に使えますが、DBログインまで保証するものではありません。最終的にはSQL*Plusやアプリで実際に接続確認します。SQL*Plusの基本は SQL*Plusの記事 も参考になります。
接続文字列のHOSTとPORTを確認する
ORA-12541では、SERVICE_NAME より先に HOST と PORT を確認します。リスナーに到達できていない段階では、サービス名の問題まで進んでいない可能性が高いためです。
ORCLPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orclpdb1)
)
)
接続識別子自体が解決できない場合は ORA-12154の記事 を確認してください。ORA-12154は接続名の解決段階、ORA-12541は指定ホスト・ポートへの接続段階で失敗している点が違います。
ファイアウォールとクラウド設定を確認する
サーバー上では1521がLISTENしていても、外部から接続できない場合はファイアウォールやネットワーク経路を確認します。オンプレミスではOSファイアウォールやネットワーク機器、クラウドではセキュリティグループやネットワークACLが候補です。
DBサーバー上からは接続できる
ローカル接続が成功し、外部から失敗するなら、ネットワーク経路やファイアウォールを疑います。
特定端末だけ失敗する
端末側のDNS、VPN、プロキシ、セキュリティソフト、ネットワークセグメントを確認します。
特定APサーバーだけ失敗する
APサーバーの名前解決、ルーティング、ファイアウォール、接続先設定を確認します。
クラウド環境
セキュリティグループ、NSG、ネットワークACL、踏み台経由の経路を確認します。
複数Oracle Homeに注意する
サーバーに複数のOracle Homeや複数バージョンがあると、思っているリスナーとは別のリスナーを操作していることがあります。ORACLE_HOME、PATH、起動ユーザー、listener.oraの場所を確認します。
echo $ORACLE_HOME which lsnrctl lsnrctl status # listener.ora の候補 find $ORACLE_HOME -name listener.ora 2>/dev/null
WindowsではOracle関連サービスが複数あることもあります。ORA-12560と合わせて見る場合は ORA-12560の記事 も参考になります。
リスナーログを確認する
ORA-12541では、そもそもリスナーに到達していない場合、リスナーログに記録が残らないことがあります。逆にログが残っているなら、少なくともリスナーには到達している可能性があります。
lsnrctl status # ADR配下の listener.log / log.xml を確認する # 例: $ORACLE_BASE/diag/tnslsnr/<host>/listener/trace/listener.log
リスナーログの場所と確認方法は リスナーログの記事 を参照してください。ORA-03135のように接続後に切れるエラーは ORA-03135の記事 も参考になります。
似た接続エラーとの違い
ORA-12541は、指定ホスト・ポートにリスナーがいない、または到達できない状態です。接続エラーは、どの段階で失敗しているかで切り分けます。
ORA-12541
指定したホスト・ポートにリスナーがいません。リスナー起動、ポート待受、ファイアウォールを確認します。
ORA-12514
リスナーには到達していますが、指定サービス名をリスナーが認識していません。詳しくは ORA-12514の記事 を参照してください。
ORA-12154
接続識別子を解決できません。tnsnames.oraやTNS_ADMINを確認します。詳しくは ORA-12154の記事 を参照してください。
ORA-12560
TNSプロトコル・アダプタエラーです。Windowsローカル接続や環境変数、サービス状態で見ることがあります。詳しくは ORA-12560の記事 を参照してください。
ORA-03135
接続後に通信が失われた状態です。詳しくは ORA-03135の記事 を参照してください。
対応手順まとめ
- DBサーバーで
lsnrctl statusを実行する - リスナーが停止していれば
lsnrctl startで起動する - OS上で指定ポートがLISTENしているか確認する
- 接続文字列の
HOSTとPORTを確認する - クライアントから指定ホスト・ポートへ疎通確認する
- サーバー側/ネットワーク側/クラウド側のファイアウォールを確認する
- 複数Oracle Homeや別リスナーを操作していないか確認する
- リスナーログに接続要求が残っているか確認する
ORA-12541は、リスナーのサービス登録以前に、リスナーそのものへ接続できていない可能性が高いエラーです。まずDBサーバー上でリスナーが起動しているか、指定ポートで待ち受けているかを確認してください。その後、接続文字列、名前解決、ファイアウォール、複数Oracle Homeを順に見ていくと、原因を切り分けやすくなります。
よくある質問
DBは起動しているのにORA-12541になります
DBインスタンスが起動していても、リスナーが停止していると外部接続はできません。lsnrctl status とポート待受を確認してください。
サーバー上では接続できるのに外部から失敗します
サーバー外からのネットワーク経路やファイアウォールが原因の可能性があります。クライアント側から Test-NetConnection や nc でポート疎通を確認します。
lsnrctl startしても直りません
接続文字列のホスト・ポートが別の値になっていないか、別Oracle Homeのリスナーを起動していないか、OSファイアウォールで遮断されていないか確認します。
ORA-12514との違いは何ですか?
ORA-12541はリスナーへ到達できない状態、ORA-12514はリスナーへ到達した後にサービス名が見つからない状態です。まず lsnrctl status が見えるか、次にサービス一覧に目的サービスがあるかを確認します。
