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)で実行してください。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
起動直後は 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 は 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
sqlplus / as sysdba で ORA-12560: TNS プロトコル・アダプタ・エラーの解決方法 が発生する場合は、リスナーではなく Oracle のローカルプロトコルの設定問題です。リスナーとは別の原因を調査してください。
よくある質問(FAQ)
いいえ。リスナーと DB インスタンスは独立したプロセスです。リスナーを起動しても DB は自動起動しません。逆に DB を起動してもリスナーは自動起動しません(Oracle Restart を使っている場合を除く)。
それぞれ個別に起動する必要があります。
# 起動順序の例 lsnrctl start # 1. まずリスナーを起動 sqlplus / as sysdba # 2. DB を起動 SQL> STARTUP; SQL> ALTER SYSTEM REGISTER; # 3. PMON にサービス登録を促す
使用する 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
リスナーは起動しているが、クライアント側の 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 回試行
リスナーはすでに起動しています。確認コマンドで状態を確認してください。
# 現在の状態確認 lsnrctl status # 一度停止してから再起動したい場合 lsnrctl stop lsnrctl start # または設定を再読み込みだけしたい場合(停止不要) lsnrctl reload
スクリプトにまとめることで一括操作できます。また、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) を参照してください。
