【Oracle】リスナーを起動する方法|lsnrctl start・自動起動設定・起動しない場合の対処まで完全解説

Oracle データベースに接続するには、リスナーが起動している必要があります。本記事では lsnrctl start によるリスナーの起動手順から、Linux・Windows それぞれの自動起動設定、起動しない場合のトラブルシューティングまでを体系的に解説します。

この記事で解決できること

  • lsnrctl start でリスナーを起動する手順(Linux・Windows)
  • 起動後に lsnrctl status でサービス登録を確認する方法
  • OS 起動時にリスナーを自動起動する設定(systemd・Windows サービス)
  • リスナーが起動しない原因と対処(ポート競合・権限・環境変数・構文エラー)
  • 起動したのにサービスが登録されない場合の対処

リスナーの設定ファイル(listener.ora・tnsnames.ora)の書き方は リスナー設定完全解説(listener.ora・lsnrctl・tnsnames.ora) で、起動後の状態確認(lsnrctl status の読み方)は リスナーの確認方法完全ガイド(lsnrctl status・tnsping) で詳しく解説しています。

スポンサーリンク

起動前の確認事項

起動コマンドを実行する前に、環境変数と設定ファイルの場所を確認しておきましょう。

環境変数の確認

# ORACLE_HOME が正しく設定されているか確認(Linux)
echo $ORACLE_HOME
# 例: /u01/app/oracle/product/19.0.0/dbhome_1

echo $ORACLE_SID
# 例: ORCL

# lsnrctl のパスを確認
which lsnrctl
# または
ls $ORACLE_HOME/bin/lsnrctl
Oracle ユーザーで実行する
リスナーの起動・停止は Oracle インストールユーザー(通常 oracleで実行してください。root ユーザーや別ユーザーで実行すると権限エラーになります。

su - oracle      # oracle ユーザーに切り替え
lsnrctl start    # その後実行

listener.ora の場所を確認

# 標準パス
ls $ORACLE_HOME/network/admin/listener.ora

# TNS_ADMIN 環境変数が設定されている場合はそちらが優先
echo $TNS_ADMIN
ls $TNS_ADMIN/listener.ora

listener.ora が存在しない場合はデフォルト設定でリスナーが起動しますが、ホスト名・ポートが期待通りか必ず確認してください。設定ファイルの作成方法は上記のリスナー設定記事を参照してください。

lsnrctl start でリスナーを起動する

基本的な起動コマンド

# リスナーを起動(リスナー名省略 = LISTENER)
lsnrctl start

# リスナー名を明示して起動
lsnrctl start LISTENER

# 別名のリスナーを起動する場合
lsnrctl start LISTENER2

正常起動時の出力例

$ lsnrctl start

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 14-MAR-2026 09:00:00

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

Starting /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/db01/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db01.example.com)(PORT=1521)))

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 0 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)))
The listener supports no services
The command completed successfully
「The listener supports no services」は正常
起動直後は DB インスタンスからのサービス登録がまだ完了していない状態です。DB が起動中であれば PMON プロセスが数秒〜数十秒以内に自動登録します。しばらく待ってから lsnrctl status を再確認してください。

起動後のサービス登録確認

# リスナーの状態とサービス登録を確認
lsnrctl status

# Services Summary に「status READY」が出れば接続可能
# Service "ORCL" has 1 instance(s).
#   Instance "ORCL", status READY, has 1 handler(s) for this service...

# PMON に強制的に再登録させる(登録が遅い場合)
sqlplus / as sysdba
SQL> ALTER SYSTEM REGISTER;
SQL> EXIT

# 再度確認
lsnrctl status

Windows でのリスナー起動

コマンドプロンプトから起動

rem 管理者権限のコマンドプロンプトで実行
lsnrctl start

rem または ORACLE_HOME を明示して実行
set ORACLE_HOME=C:\app\oracle\product\19.0.0\dbhome_1
set PATH=%ORACLE_HOME%\bin;%PATH%
lsnrctl start

Windows サービスから起動

rem サービス名を確認
sc query type= service | findstr OracleTNS

rem サービスを起動(サービス名は環境により異なる)
sc start OracleOraDB19Home1TNSListener

rem または net コマンドで起動
net start OracleOraDB19Home1TNSListener

rem PowerShell の場合
Start-Service -Name "OracleOraDB19Home1TNSListener"

自動起動の設定

Linux: systemd による自動起動

Oracle 19c 以降の推奨方法は systemd サービスの作成です。

# /etc/systemd/system/oracle-listener.service を作成
cat > /etc/systemd/system/oracle-listener.service << EOF
[Unit]
Description=Oracle Net Listener
After=network.target oracledb.service
Wants=oracledb.service

[Service]
Type=forking
User=oracle
Environment=ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
Environment=ORACLE_SID=ORCL
ExecStart=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start
ExecStop=/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

# サービスを有効化・起動
systemctl daemon-reload
systemctl enable oracle-listener
systemctl start oracle-listener

# 状態確認
systemctl status oracle-listener

Linux: /etc/oratab + dbstart スクリプト

Oracle 付属の dbstart スクリプトを使う方法です。

# /etc/oratab を編集(末尾の N を Y に変更)
# 書式: SID:ORACLE_HOME:Y/N
vi /etc/oratab
# ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y  ← N を Y に変更

# dbstart でリスナーと DB を起動(/etc/init.d または rc.local から呼ぶ)
$ORACLE_HOME/bin/dbstart $ORACLE_HOME

# /etc/rc.local に追加する場合(最終手段)
echo "su - oracle -c \"$ORACLE_HOME/bin/dbstart $ORACLE_HOME\"" >> /etc/rc.local
chmod +x /etc/rc.local

Linux: Oracle Restart(12c 以降の推奨)

# Grid Infrastructure / Oracle Restart を使っている場合は srvctl で管理
# リスナーを Oracle Restart に登録
srvctl add listener -l LISTENER

# 自動起動を有効化
srvctl enable listener -l LISTENER

# 起動
srvctl start listener -l LISTENER

# 状態確認
srvctl status listener
Oracle Restart とは
Oracle Restart は Grid Infrastructure の一部で、OS 起動時に Oracle コンポーネント(リスナー・DB・ASM 等)を指定した順序で自動起動・監視する仕組みです。RAC 環境では Clusterware が同等の役割を果たします。Oracle 12c 以降の単一インスタンス環境では systemd と Oracle Restart のどちらかを選択します。

Windows: サービスの自動起動設定

rem 起動種別を自動に変更
sc config OracleOraDB19Home1TNSListener start= auto

rem または PowerShell
Set-Service -Name "OracleOraDB19Home1TNSListener" -StartupType Automatic

rem 確認
sc qc OracleOraDB19Home1TNSListener

起動しない場合のトラブルシューティング

ポートが既に使用されている

# エラー例
TNS-01201: Listener cannot find executable /u01/.../tnslsnr for PROTOCOL
# または
TNS-12542: TNS:address already in use

# ポート 1521 を使っているプロセスを確認
ss -tlnp | grep 1521
# または
lsof -i :1521

# 別のリスナーが起動中かどうか確認
ps -ef | grep tnslsnr | grep -v grep

# 既存リスナーを停止してから再起動
lsnrctl stop
lsnrctl start

listener.ora の構文エラー

# エラー例
TNS-00525: Insufficient privilege for operation
# または起動時に WARNING が出る

# listener.ora の内容を確認
cat $ORACLE_HOME/network/admin/listener.ora

# 括弧のネストが正しいか確認(開き括弧と閉じ括弧の数が一致しているか)
grep -c "(" $ORACLE_HOME/network/admin/listener.ora
grep -c ")" $ORACLE_HOME/network/admin/listener.ora

# 最小構成のlistener.ora で起動テスト
cat > /tmp/listener_test.ora << EOF
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )
EOF
TNS_ADMIN=/tmp lsnrctl start

ORACLE_HOME 環境変数が未設定・誤り

# エラー例
bash: lsnrctl: command not found

# ORACLE_HOME の設定確認
echo $ORACLE_HOME

# 設定されていない場合は手動で設定
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH

# .bash_profile に追加して永続化
cat >> ~/.bash_profile << 'EOF'
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=ORCL
EOF
source ~/.bash_profile

権限エラー

# エラー例
TNS-01190: The user is not authorized to execute the requested listener command

# oracle ユーザーに切り替えて実行
su - oracle
lsnrctl start

# ファイルの権限確認
ls -la $ORACLE_HOME/bin/tnslsnr
# oracle ユーザーに実行権限があること
# -rwxr-x--- oracle dba のような権限

# oracle グループに属しているか確認
id oracle
groups oracle

listener.log が書き込めない

# ログディレクトリの権限確認
ls -la $ORACLE_BASE/diag/tnslsnr/

# oracle ユーザーが書き込めるか確認
touch $ORACLE_BASE/diag/tnslsnr/test.txt && rm $_

# 権限を修正
chown -R oracle:dba $ORACLE_BASE/diag/tnslsnr/
chmod -R 755 $ORACLE_BASE/diag/tnslsnr/

起動後にサービスが登録されない場合

リスナーは起動しているのに DB への接続で「ORA-12514: サービスが認識されない」が発生する場合は、サービスの動的登録が完了していない可能性があります。

# サービス登録状況を確認
lsnrctl services

# DB が起動しているか確認
ps -ef | grep pmon | grep -v grep

# DB 側から PMON に強制登録させる
sqlplus / as sysdba
SQL> ALTER SYSTEM REGISTER;
SQL> SELECT name, network_name FROM v$active_services;
SQL> EXIT

# 再確認
lsnrctl status
ORA-12560 が出る場合はリスナーではなくローカル接続の問題
sqlplus / as sysdbaORA-12560: TNS プロトコル・アダプタ・エラーの解決方法 が発生する場合は、リスナーではなく Oracle のローカルプロトコルの設定問題です。リスナーとは別の原因を調査してください。

よくある質問(FAQ)

Q リスナーを起動したら DB も自動的に起動する?
A

いいえ。リスナーと DB インスタンスは独立したプロセスです。リスナーを起動しても DB は自動起動しません。逆に DB を起動してもリスナーは自動起動しません(Oracle Restart を使っている場合を除く)。

それぞれ個別に起動する必要があります。

# 起動順序の例
lsnrctl start           # 1. まずリスナーを起動
sqlplus / as sysdba     # 2. DB を起動
SQL> STARTUP;
SQL> ALTER SYSTEM REGISTER;  # 3. PMON にサービス登録を促す
Q 複数の ORACLE_HOME がある環境でリスナーを起動する方法は?
A

使用する ORACLE_HOME を明示的に指定して実行します。環境変数が別の ORACLE_HOME を指している場合、意図しないバージョンの lsnrctl が実行されることがあります。

# ORACLE_HOME を明示して実行
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
$ORACLE_HOME/bin/lsnrctl start

# フルパスで直接実行
/u01/app/oracle/product/19.0.0/dbhome_1/bin/lsnrctl start
Q lsnrctl start は成功したが tnsping が通らない
A

リスナーは起動しているが、クライアント側の tnsnames.ora の HOST・PORT が実際のリスナーと一致していない可能性があります。

# lsnrctl status で実際の待受アドレスを確認
lsnrctl status
# Listening Endpoints Summary に表示される HOST・PORT を確認

# tnsnames.ora の内容と照合
cat $TNS_ADMIN/tnsnames.ora

# tnsping の詳細確認
tnsping ORCL 3   # 3 回試行
Q lsnrctl start が「Already running」と言って起動しない
A

リスナーはすでに起動しています。確認コマンドで状態を確認してください。

# 現在の状態確認
lsnrctl status

# 一度停止してから再起動したい場合
lsnrctl stop
lsnrctl start

# または設定を再読み込みだけしたい場合(停止不要)
lsnrctl reload
Q リスナーの起動・停止を DB と同時に行う方法は?
A

スクリプトにまとめることで一括操作できます。また、Oracle Restart(srvctl)を使えばリスナーと DB をまとめて管理できます。

#!/bin/bash
# start_oracle.sh: リスナーと DB を一括起動するシェルスクリプト
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
export ORACLE_SID=ORCL
export PATH=$ORACLE_HOME/bin:$PATH

echo "=== Starting Listener ==="
lsnrctl start

echo "=== Starting Database ==="
sqlplus / as sysdba << SQL
STARTUP;
ALTER SYSTEM REGISTER;
EXIT;
SQL

echo "=== Status Check ==="
lsnrctl status

まとめ

操作 コマンド
リスナー起動 lsnrctl start
起動確認 lsnrctl status
サービス登録確認 lsnrctl services
PMON に強制登録 ALTER SYSTEM REGISTER;
自動起動設定(Linux) systemctl enable oracle-listener
自動起動設定(Windows) sc config ... start= auto
自動起動設定(Oracle Restart) srvctl enable listener
ポート競合確認 ss -tlnp | grep 1521
環境変数確認 echo $ORACLE_HOME

リスナーの起動は lsnrctl start の 1 コマンドで完了します。起動後は lsnrctl status でサービスが READY になっていることを確認してから接続してください。設定ファイルの詳細は リスナー設定完全解説(listener.ora・lsnrctl・tnsnames.ora) を、起動後の状態診断は リスナーの確認方法完全ガイド(lsnrctl status・tnsping) を参照してください。