Oracle リスナーが正常に動いているか確認したい、接続できない原因を切り分けたい──そんな場面で使う確認コマンドと診断手順を体系的にまとめました。lsnrctl status の出力の読み方から OS レベルのポート確認・DB ビューでの状態照会・クライアント側の tnsping まで、角度を変えた多層的な確認方法を解説します。
- lsnrctl status・lsnrctl services の出力の意味を正確に読む方法
- OS レベルのポートリッスン確認(netstat / ss / ps)
- DB 側からリスナー状態を確認する方法(v$listener_network・v$services)
- クライアント側の tnsping での疎通確認と出力の読み方
- リスナーログ(listener.log)の読み方
- 設定変更後・DB 起動後・エラー発生時の確認シナリオ
確認の全体像
リスナーの問題は複数のレイヤーで発生するため、1 つのコマンドだけで判断せず段階的に確認することが重要です。
| 確認レイヤー | 主なコマンド・手段 | 確認できること |
|---|---|---|
| リスナー本体 | lsnrctl statuslsnrctl services |
起動状態・登録サービス・稼働時間 |
| OS ネットワーク | netstat / ssps -ef |
ポートのリッスン状態・プロセス存在確認 |
| DB 側 | v$listener_networkv$services |
動的登録の内容・サービス名と SID の対応 |
| クライアント側 | tnsping |
名前解決・ネットワーク疎通・応答時間 |
| ログ | listener.log |
接続履歴・エラー詳細・タイムスタンプ |
lsnrctl status の読み方
lsnrctl status はリスナーの状態を確認する最も基本的なコマンドです。各フィールドの意味を正確に理解しましょう。
$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 14-MAR-2026 10:00:00 Copyright (c) 1991, 2019, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db01.example.com)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 19.0.0.0.0 Start Date 14-MAR-2026 09:00:00 Uptime 0 days 1 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora Listener Log File /u01/app/oracle/diag/tnslsnr/db01/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db01.example.com)(PORT=1521))) Services Summary... Service "ORCL" has 1 instance(s). Instance "ORCL", status READY, has 1 handler(s) for this service... The command completed successfully
status の種類と意味
| status 値 | 意味 | 原因・対処 |
|---|---|---|
READY |
DB 起動済み・動的登録完了。接続可能 | 正常状態 |
BLOCKED |
DB は起動しているが接続を受け付けない | DB が制限モード(startup restrict)で起動している |
UNKNOWN |
静的登録のみ。DB 起動確認ができていない | DB が停止中、または listener.ora の静的登録のみの場合 |
lsnrctl status の Services Summary に何も表示されない、または UNKNOWN のみの場合は、DB が起動しているか・動的登録が完了しているかを確認してください。DB 起動直後は PMON の登録処理が数秒かかるため、少し待ってから再確認します。
サービスが表示されない場合の確認手順
# 1. DB インスタンスが起動しているか確認 ps -ef | grep pmon # ora_pmon_ORCL が表示されれば起動中 # 2. PMON に動的登録を強制する(sqlplus から) sqlplus / as sysdba SQL> ALTER SYSTEM REGISTER; # 3. 少し待ってから再確認 lsnrctl status
lsnrctl services の読み方
lsnrctl services は status よりも詳細なサービス情報を表示します。ハンドラー数や接続方式が確認できます。
$ lsnrctl services
Services Summary...
Service "ORCL" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:100 refused:0 state:ready
LOCAL SERVER
Service "ORCLXDB" has 1 instance(s).
Instance "ORCL", status READY, has 1 handler(s) for this service...
Handler(s):
"D000" established:0 refused:0 current:0 max:1022 state:ready
DISPATCHER
(ADDRESS=(PROTOCOL=tcp)(HOST=db01.example.com)(PORT=51234))
| フィールド | 意味 |
|---|---|
established |
これまでに確立した接続の累計数 |
refused |
拒否された接続の累計数(0 以外なら問題の可能性) |
DEDICATED |
専用サーバー接続(1 クライアント = 1 サーバープロセス) |
D000 等 |
共有サーバーのディスパッチャー |
state:ready |
接続受け付け可能 |
OS レベルの確認
ポートのリッスン確認(netstat / ss)
リスナープロセスが実際にポートを待ち受けているかを OS コマンドで確認します。
# netstat でポート 1521 の確認 netstat -tlnp | grep 1521 # 正常な出力例 tcp 0 0 0.0.0.0:1521 0.0.0.0:* LISTEN 12345/tnslsnr # ss コマンド(netstat の代替、最近の Linux) ss -tlnp | grep 1521 # 結果が空の場合はリスナーが起動していない # ポート番号を変更している場合は合わせて変更 ss -tlnp | grep 1522
リスナープロセスの確認(ps)
# tnslsnr プロセスの存在確認 ps -ef | grep tnslsnr | grep -v grep # 正常な出力例 oracle 12345 1 0 09:00 ? 00:00:01 /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr LISTENER -inherit # プロセスが表示されない場合はリスナーが停止している # → lsnrctl start で起動する
# ポート確認 netstat -ano | findstr :1521 # プロセス確認(タスクマネージャーまたはコマンドプロンプト) tasklist | findstr TNSLSNR # サービス状態確認(Oracle サービスとして登録されている場合) sc query OracleOraDB19Home1TNSListener # または services.msc # サービス管理ツールから「OracleOraDB...TNSListener」を確認
DB 側からの確認
DB に接続できる状態なら、データベースビューでリスナーとサービスの状態を確認できます。
v$listener_network(Oracle 11g R2 以降)
-- リスナーへの動的登録状況を確認 SELECT listener_alias, endpoints FROM v$listener_network; -- バージョンによって列が異なる場合は SELECT * FROM v$listener_network で確認 -- 出力例 -- LISTENER_ALIAS: LISTENER -- ENDPOINTS: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db01.example.com)(PORT=1521)))
v$services・v$active_services(登録サービス一覧)
-- DB に登録されているサービス名を確認
SELECT name, network_name, pdb
FROM v$services
ORDER BY name;
-- 現在アクティブなサービス
SELECT name, network_name
FROM v$active_services
ORDER BY name;
-- サービス名のパラメータ確認
SELECT name, value
FROM v$parameter
WHERE name IN ('service_names', 'db_name', 'db_domain', 'local_listener')
ORDER BY name;
v$instance(インスタンスの稼働状態)
-- インスタンスの状態確認 SELECT instance_name, host_name, version, status, logins, database_status FROM v$instance; -- status が OPEN であれば接続受付可能 -- logins が RESTRICTED なら接続が制限モード(lsnrctl services で BLOCKED になる)
クライアント側からの確認(tnsping)
tnsping はクライアント側で tnsnames.ora の名前解決からネットワーク疎通まで確認できるコマンドです。
tnsping の出力の読み方
$ tnsping ORCL TNS Ping Utility for Linux: Version 19.0.0.0.0 Copyright (c) 1997, 2019, Oracle. All rights reserved. Used TNSNAMES adapter to resolve the alias # ← tnsnames.ora で解決した Attempting to contact (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db01.example.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) OK (30 msec) # ← リスナーへの疎通成功(応答時間)
| 出力パターン | 意味 |
|---|---|
Used TNSNAMES adapter to resolve the alias |
tnsnames.ora で解決成功 |
Used EZCONNECT adapter to resolve the alias |
Easy Connect 形式(ホスト:ポート/サービス名)で解決 |
TNS-03505: Failed to resolve name |
tnsnames.ora にエイリアスが見つからない |
TNS-12541: No listener |
リスナーが停止中またはポート・ホストが違う |
TNS-12514: Listener does not know of service |
リスナーは稼働しているがサービスが未登録 |
OK (N msec) |
リスナーへの疎通成功(DB への接続可否は別途確認) |
tnsping はリスナーへの疎通のみ確認します。DB インスタンスへの実際の接続には別の問題が潜む場合があります(DB が RESTRICTED モード、ユーザーのロック、パスワード誤り等)。接続確認の最終手段は
sqlplus user/pass@ORCL での実際のログインです。
tnsping でエラーが出る場合の確認手順
# TNS-03505: Failed to resolve name # → tnsnames.ora のエイリアス名を確認 cat $TNS_ADMIN/tnsnames.ora # または cat $ORACLE_HOME/network/admin/tnsnames.ora # TNS-12541: No listener # → リスナーの起動状態とホスト・ポートを確認 lsnrctl status ss -tlnp | grep 1521 # TNS-12514: Listener does not know of service # → 登録サービスと tnsnames.ora の SERVICE_NAME を照合 lsnrctl services grep SERVICE_NAME $TNS_ADMIN/tnsnames.ora
リスナーログの確認
リスナーのログには接続試行・拒否・エラーが時系列で記録されます。不審な接続や接続失敗の原因調査に使います。
ログファイルの場所を確認
# lsnrctl status でログパスを確認
lsnrctl status | grep "Log File"
# 標準パス(ORACLE_BASE 配下)
# アラートログ(XML): $ORACLE_BASE/diag/tnslsnr/{hostname}/listener/alert/log.xml
# テキストログ: $ORACLE_BASE/diag/tnslsnr/{hostname}/listener/trace/listener.log
# 環境変数でパスを確認
echo $ORACLE_BASE
ls $ORACLE_BASE/diag/tnslsnr/$(hostname)/listener/trace/
ログから接続情報を読む
# listener.log の基本フォーマット # タイムスタンプ * コマンド * サービス名 * ホスト * ステータス # 例: 正常な接続 14-MAR-2026 10:30:00 * (CONNECT_DATA=(SERVICE_NAME=ORCL)(CID=...)) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.10)(PORT=52341)) * establish * ORCL * 0 # 例: 接続エラー(末尾の数字がエラーコード) 14-MAR-2026 10:31:00 * (CONNECT_DATA=(SERVICE_NAME=ORCL)...) * (ADDRESS=...) * establish * ORCL * 12514 # 末尾 0 = 成功、0 以外 = エラーコード # 12514 = ORA-12514(サービス未登録) # 12541 = ORA-12541(リスナーなし)
# 最新 50 行を確認 tail -50 $ORACLE_BASE/diag/tnslsnr/$(hostname)/listener/trace/listener.log # エラー行だけ抽出 grep -v '* 0$' $ORACLE_BASE/diag/tnslsnr/$(hostname)/listener/trace/listener.log | tail -20 # 特定 IP からの接続履歴 grep "192.168.1.10" $ORACLE_BASE/diag/tnslsnr/$(hostname)/listener/trace/listener.log | tail -20 # 今日のログだけ確認 grep "14-MAR-2026" $ORACLE_BASE/diag/tnslsnr/$(hostname)/listener/trace/listener.log | tail -30
確認シナリオ集
シナリオ 1:listener.ora 変更後の確認手順
# 1. 変更前の状態を記録 lsnrctl status > /tmp/listener_before.txt # 2. listener.ora を編集 vi $ORACLE_HOME/network/admin/listener.ora # 3. reload で設定を反映(リスナーを停止しない) lsnrctl reload # 4. 変更後の状態を確認 lsnrctl status # 5. 新しいポート・サービスが反映されているか確認 lsnrctl services # 6. クライアントから tnsping で疎通確認 tnsping ORCL
シナリオ 2:DB 起動後のサービス登録確認
# 1. DB を起動 sqlplus / as sysdba SQL> STARTUP; # 2. リスナーにサービスが登録されたか確認(起動直後は数秒かかる) lsnrctl status # 3. 表示されない場合は PMON に手動登録を促す SQL> ALTER SYSTEM REGISTER; # 4. 再度確認 lsnrctl status # 5. v$services で DB 側のサービスも確認 SQL> SELECT name, network_name FROM v$active_services ORDER BY name;
シナリオ 3:接続できない場合の原因切り分け
# ステップ 1: リスナーが起動しているか lsnrctl status # → 「TNS-01190: The user is not authorized...」または失敗 → lsnrctl start # ステップ 2: ポートが開いているか(DB サーバー上) ss -tlnp | grep 1521 # → 空 → リスナー未起動 # ステップ 3: ポートへの疎通(クライアントから) telnet db01.example.com 1521 # → 接続できない → ファイアウォール確認 # ステップ 4: tnsping でサービス確認 tnsping ORCL # → TNS-12514 → ALTER SYSTEM REGISTER; でサービス再登録 # → TNS-03505 → tnsnames.ora のエイリアス名を確認 # ステップ 5: 実際に接続テスト sqlplus system/pass@ORCL # → ORA-01017 → ユーザー名/パスワード誤り # → ORA-28000 → アカウントロック
よくある質問(FAQ)
Oracle 12c 以降でリスナーにパスワードが設定されている場合、または別ユーザーで実行した場合に発生します。TNS-01190 は「ユーザーがリスナーへの接続を許可されていない」エラーです。
Oracle ユーザー(インストール時の OS ユーザー)で実行するか、以下を確認してください。
# Oracle ユーザーで実行 su - oracle lsnrctl status # 環境変数が正しく設定されているか確認 echo $ORACLE_HOME echo $ORACLE_SID
tnsping はリスナーへの疎通のみ確認し、DB への実際の認証は行いません。接続できない原因として以下が考えられます。
-- 確認コマンド sqlplus / as sysdba # ローカルからサーバーに接続 -- ORA-01017: ユーザー名/パスワードが無効 -- → パスワードの大文字小文字(12c 以降は区別)、期限切れを確認 SELECT username, account_status, expiry_date FROM dba_users WHERE username = 'YOUR_USER'; -- ORA-28000: アカウントがロックされている ALTER USER your_user ACCOUNT UNLOCK; -- ORA-01033: Oracle が起動中または停止中 -- → DB インスタンスが OPEN 状態か確認 SELECT status FROM v$instance;
動的登録と静的登録が両方設定されていると、同一サービスが 2 回表示されることがあります。また、DB を再起動するたびに動的登録が追加される場合があります。
問題がなければ動作に影響はありませんが、整理したい場合は静的登録(SID_LIST)を削除して動的登録のみにするか、lsnrctl reload で重複を解消します。
lsnrctl reload # 重複した登録をリセット # DB が起動していれば PMON が再登録する
ログを記録したまま削除すると、ファイルハンドルが残ってログが消えない場合があります。安全な手順は以下の通りです。
# ログ記録を一時停止 lsnrctl set log_status off # ファイルをリネームまたは削除 mv listener.log listener.log.bak # ログ記録を再開(新しいファイルが自動で作成される) lsnrctl set log_status on # 確認 lsnrctl status | grep "Log File"
Oracle RAC では各ノードにリスナーが存在し、Grid Infrastructure によって管理されます。lsnrctl に加えて srvctl コマンドを使います。
# Grid ユーザーで実行 # リスナーの状態確認(全ノード) srvctl status listener # 特定ノードのリスナー確認 srvctl status listener -n node1 # リスナーの設定確認 srvctl config listener # SCAN リスナーの確認(クライアント接続先) srvctl status scan_listener
まとめ:確認コマンド早見表
| 確認したいこと | コマンド |
|---|---|
| リスナーの起動・稼働状態 | lsnrctl status |
| 登録サービスの詳細 | lsnrctl services |
| OS のポートリッスン確認 | ss -tlnp | grep 1521 |
| リスナープロセス存在確認 | ps -ef | grep tnslsnr |
| DB 側のサービス一覧 | SELECT name FROM v$active_services; |
| 動的登録の確認 | SELECT * FROM v$listener_network; |
| クライアントからの疎通確認 | tnsping エイリアス名 |
| リモートからポート疎通確認 | telnet ホスト 1521 |
| ログでエラー確認 | grep -v '* 0' listener.log |
| PMON に再登録を促す | ALTER SYSTEM REGISTER; |
リスナーの確認は「リスナー本体 → OS ネットワーク → DB 側 → クライアント」の順で段階的に絞り込むのが効率的です。lsnrctl status で READY なサービスが確認できれば接続の準備は整っています。tnsping で疎通を確認し、最終的に sqlplus でログインが通れば完全に正常です。

