【Oracle】リスナーの確認方法完全ガイド|lsnrctl status・tnsping・netstat・DBビュー活用

【Oracle】リスナーの確認方法完全ガイド|lsnrctl status・tnsping・netstat・DBビュー活用 Oracle

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 status
lsnrctl services
起動状態・登録サービス・稼働時間
OS ネットワーク netstat / ss
ps -ef
ポートのリッスン状態・プロセス存在確認
DB 側 v$listener_network
v$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 の静的登録のみの場合
READY でないと接続できない
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 servicesstatus よりも詳細なサービス情報を表示します。ハンドラー数や接続方式が確認できます。

$ 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 で起動する
Windows 環境での確認

# ポート確認
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 OK でも 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)

Q lsnrctl status で「Connecting to … TNS-01190」エラーが出る
A

Oracle 12c 以降でリスナーにパスワードが設定されている場合、または別ユーザーで実行した場合に発生します。TNS-01190 は「ユーザーがリスナーへの接続を許可されていない」エラーです。

Oracle ユーザー(インストール時の OS ユーザー)で実行するか、以下を確認してください。

# Oracle ユーザーで実行
su - oracle
lsnrctl status

# 環境変数が正しく設定されているか確認
echo $ORACLE_HOME
echo $ORACLE_SID
Q tnsping は OK なのに sqlplus で接続できない
A

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;
Q lsnrctl services に同じサービスが複数表示される
A

動的登録と静的登録が両方設定されていると、同一サービスが 2 回表示されることがあります。また、DB を再起動するたびに動的登録が追加される場合があります。

問題がなければ動作に影響はありませんが、整理したい場合は静的登録(SID_LIST)を削除して動的登録のみにするか、lsnrctl reload で重複を解消します。

lsnrctl reload    # 重複した登録をリセット
# DB が起動していれば PMON が再登録する
Q listener.log が巨大になっている。安全に削除できる?
A

ログを記録したまま削除すると、ファイルハンドルが残ってログが消えない場合があります。安全な手順は以下の通りです。

# ログ記録を一時停止
lsnrctl set log_status off

# ファイルをリネームまたは削除
mv listener.log listener.log.bak

# ログ記録を再開(新しいファイルが自動で作成される)
lsnrctl set log_status on

# 確認
lsnrctl status | grep "Log File"
Q RAC 環境でリスナーを確認する方法は?
A

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 statusREADY なサービスが確認できれば接続の準備は整っています。tnsping で疎通を確認し、最終的に sqlplus でログインが通れば完全に正常です。