Oracle の接続設定でよく迷うのが listener.ora ファイルの場所です。バージョン・OS・インストール構成によってパスが異なるうえ、TNS_ADMIN 環境変数で上書きされていることもあります。本記事では listener.ora のデフォルトパス、検索コマンド、TNS_ADMIN による場所変更、複数 ORACLE_HOME 環境での取り扱いまでを体系的に解説します。
- Linux・Windows それぞれの listener.ora デフォルトパス
- find・locate コマンドで listener.ora を探す方法
- TNS_ADMIN 環境変数と listener.ora の優先順位
- 複数の ORACLE_HOME がある環境での listener.ora の特定
- listener.ora が存在しない場合のデフォルト動作
- lsnrctl が実際に読み込んでいる listener.ora を確認する方法
listener.ora の書き方・設定内容については リスナー設定完全解説(listener.ora・lsnrctl・tnsnames.ora) で詳しく解説しています。設定ファイルを見つけた後はこちらを参照してください。
listener.ora のデフォルトパス
Oracle は TNS_ADMIN 環境変数が設定されていない場合、$ORACLE_HOME/network/admin/ 配下の listener.ora を読み込みます。
Linux / Unix の場合
# デフォルトパス $ORACLE_HOME/network/admin/listener.ora # 具体例(Oracle 19c, 典型的なインストール先) /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora # Oracle 12c の例 /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora # Oracle 11g の例 /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Windows の場合
rem デフォルトパス(%ORACLE_HOME%\network\admin\listener.ora) rem 具体例(Oracle 19c, 典型的なインストール先) C:\app\oracle\product\19.0.0\dbhome_1\network\admin\listener.ora rem Oracle が app\ユーザー名 配下に入っている場合 C:\app\%USERNAME%\product\19.0.0\dbhome_1\network\admin\listener.ora rem Oracle Database 21c Express Edition の場合 C:\app\%USERNAME%\product\21.0.0\dbhomeXE\network\admin\listener.ora
listener.ora のパスは
ORACLE_HOME に依存します。まず ORACLE_HOME を確認してから探しましょう。
# Linux echo $ORACLE_HOME # Windows(コマンドプロンプト) echo %ORACLE_HOME% # Windows(PowerShell) $env:ORACLE_HOME
lsnrctl が実際に読み込んでいる listener.ora を確認する
設定ファイルが複数ある環境では、どのファイルが実際に使われているかを lsnrctl status で確認するのが最も確実です。
$ lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 14-MAR-2026 09:00:00 ... 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 ...
Listener Parameter File 行に実際に読み込まれている listener.ora のフルパスが表示されます。
リスナーが停止中は
lsnrctl status でパスを確認できません。下記の検索コマンドで場所を特定してから起動してください。リスナーの起動方法は リスナーの起動方法(lsnrctl start・自動起動設定) を参照してください。
listener.ora をシステムから検索する
Linux: find コマンドで検索
# ORACLE_HOME 配下を検索(最も速い) find $ORACLE_HOME -name listener.ora 2>/dev/null # oracle ユーザーのホーム以下を検索 find /home/oracle -name listener.ora 2>/dev/null # /u01 以下を広く検索(複数 ORACLE_HOME がある場合) find /u01 -name listener.ora 2>/dev/null # システム全体を検索(時間がかかる) find / -name listener.ora 2>/dev/null
Linux: locate コマンドで高速検索
# locate コマンドが使える場合 locate listener.ora # updatedb でデータベースを更新してから検索 sudo updatedb locate listener.ora
Windows: コマンドプロンプトで検索
rem %ORACLE_HOME% 配下を検索 dir /s /b "%ORACLE_HOME%\listener.ora" rem C:\app 以下を検索 dir /s /b "C:\app\listener.ora"
Windows: PowerShell で検索
# %ORACLE_HOME% 配下を検索 Get-ChildItem -Path $env:ORACLE_HOME -Filter "listener.ora" -Recurse -ErrorAction SilentlyContinue # C:\app 以下を再帰検索 Get-ChildItem -Path "C:\app" -Filter "listener.ora" -Recurse -ErrorAction SilentlyContinue | Select-Object FullName
TNS_ADMIN 環境変数と listener.ora の優先順位
Oracle は listener.ora を以下の優先順位で探します。
| 優先順位 | 場所 | 条件 |
|---|---|---|
| 1 | $TNS_ADMIN/listener.ora |
TNS_ADMIN 環境変数が設定されている場合 |
| 2 | /etc/listener.ora(Linux) |
TNS_ADMIN 未設定かつ /etc に存在する場合(一部バージョン) |
| 3 | $ORACLE_HOME/network/admin/listener.ora |
デフォルト(上記が存在しない場合) |
TNS_ADMIN の確認方法
# Linux echo $TNS_ADMIN # 例: /etc/oracle/network/admin (空の場合は未設定) # Windows(コマンドプロンプト) echo %TNS_ADMIN% # TNS_ADMIN が設定されている場合はそこの listener.ora が使われる ls -la $TNS_ADMIN/listener.ora
Windows では環境変数だけでなく、レジストリにも TNS_ADMIN を設定できます。
rem レジストリで確認 reg query HKLM\SOFTWARE\ORACLE /v TNS_ADMIN reg query HKCU\SOFTWARE\ORACLE /v TNS_ADMIN rem 複数の Oracle Home がある場合は各 Home のキーを確認 reg query HKLM\SOFTWARE\ORACLE\KEY_OraDB19Home1 /v TNS_ADMIN
複数の ORACLE_HOME がある環境での listener.ora
開発環境など複数バージョンの Oracle をインストールしている場合、listener.ora が複数存在することがあります。
# 実行中のリスナープロセスと ORACLE_HOME を確認 ps -ef | grep tnslsnr | grep -v grep # 例: oracle 12345 1 0 09:00 ? 00:00:00 /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr LISTENER -inherit # プロセスが起動している ORACLE_HOME のパスから listener.ora の場所が分かる # /u01/app/oracle/product/19.0.0/dbhome_1/bin/tnslsnr # → listener.ora は /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora # または lsnrctl status で確認(最も確実) ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1 $ORACLE_HOME/bin/lsnrctl status | grep "Parameter File"
oraenv で ORACLE_HOME を切り替えて確認
# /etc/oratab に登録されているインスタンスを確認 cat /etc/oratab # ORCL:/u01/app/oracle/product/19.0.0/dbhome_1:Y # ORCL12:/u01/app/oracle/product/12.2.0/dbhome_1:N . oraenv ORACLE_SID = [ORCL] ? ORCL12 # 切り替え後の listener.ora を確認 ls $ORACLE_HOME/network/admin/listener.ora
listener.ora が存在しない場合
listener.ora が存在しなくても、Oracle はデフォルト設定でリスナーを起動できます。
# listener.ora なしでリスナーを起動(デフォルト設定が使われる) lsnrctl start # → TCP/1521 でホスト名を使ってリスニング開始 # 起動後に有効な設定を確認 lsnrctl status # Listener Parameter File の行が空欄になる
listener.ora が存在しない場合のデフォルト設定は以下の通りです。
- リスナー名:
LISTENER - プロトコル: TCP
- ホスト:
hostnameコマンドの出力値 - ポート:
1521
本番環境では必ず listener.ora を明示的に作成し、設定を固定することを推奨します。
listener.ora を新規作成する場合
# ディレクトリが存在するか確認
ls -la $ORACLE_HOME/network/admin/
# ディレクトリがない場合は作成
mkdir -p $ORACLE_HOME/network/admin/
# 最小構成の listener.ora を作成
cat > $ORACLE_HOME/network/admin/listener.ora << 'EOF'
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = db01.example.com)(PORT = 1521))
)
)
EOF
よくある質問(FAQ)
通常は同じディレクトリ($ORACLE_HOME/network/admin/)にあります。Oracle Net の設定ファイルはすべてこのディレクトリに集約されています。
# network/admin ディレクトリの内容を確認 ls -la $ORACLE_HOME/network/admin/ # listener.ora ← リスナー設定 # tnsnames.ora ← 接続記述子 # sqlnet.ora ← SQL*Net 全般設定
TNS_ADMIN で別ディレクトリを指定している場合は、listener.ora・tnsnames.ora・sqlnet.ora のすべてがそのディレクトリに配置されます。
はい。listener.ora を編集しただけではリスナーは設定変更を認識しません。変更を反映するにはリスナーの再起動か reload が必要です。
# 設定のみ再読み込み(接続を切断しない) lsnrctl reload # または再起動 lsnrctl stop lsnrctl start # 設定変更が反映されたか確認 lsnrctl status
複数のアプリケーション・ユーザーが共通の Oracle Net 設定を参照したい場合に便利です。特に以下のケースで使われます。
- 複数の ORACLE_HOME がある環境で設定を一元管理したい
- アプリケーションサーバーで Oracle クライアントのみインストールし、設定をまとめて管理したい
- CI/CD 環境で設定ファイルを ORACLE_HOME から分離してバージョン管理したい
# 共有ディレクトリを TNS_ADMIN に設定 export TNS_ADMIN=/etc/oracle/network/admin # または /etc/profile.d に追加して全ユーザーに適用 echo 'export TNS_ADMIN=/etc/oracle/network/admin' > /etc/profile.d/oracle_tns.sh
Oracle Instant Client にはデフォルトの network/admin ディレクトリがありません。TNS_ADMIN 環境変数で明示的に設定ファイルの場所を指定する必要があります。
# Instant Client で TNS_ADMIN を設定する例 export TNS_ADMIN=/opt/oracle/network/admin mkdir -p $TNS_ADMIN # 設定ファイルを作成 vi $TNS_ADMIN/tnsnames.ora vi $TNS_ADMIN/sqlnet.ora
Instant Client はクライアント接続専用のため、listener.ora は通常不要です。サーバー側のリスナー設定にのみ listener.ora が必要です。
lsnrctl status の Listener Parameter File を確認し、意図したパスが表示されているか確認してください。
# 読み込まれている設定ファイルの確認 lsnrctl status | grep "Parameter File" # TNS_ADMIN が設定されている場合はそちらが優先される echo $TNS_ADMIN # 想定と違うファイルが読まれている場合は TNS_ADMIN を修正してから再起動 lsnrctl stop unset TNS_ADMIN # TNS_ADMIN をクリアして ORACLE_HOME 配下を使う場合 lsnrctl start
それでも解決しない場合は ORA-12560: TNS プロトコル・アダプタ・エラーの解決方法 の記事も参照してください。環境変数の問題が原因の場合があります。
まとめ
| OS | デフォルトパス |
|---|---|
| Linux 19c | /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/listener.ora |
| Linux 12c | /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora |
| Windows 19c | C:\app\oracle\product\19.0.0\dbhome_1\network\admin\listener.ora |
| XE(Express) | C:\app\%USERNAME%\product\21.0.0\dbhomeXE\network\admin\listener.ora |
| TNS_ADMIN 設定時 | $TNS_ADMIN/listener.ora(最優先) |
| 操作 | コマンド |
|---|---|
| 実際に読まれている listener.ora を確認 | lsnrctl status | grep "Parameter File" |
| Linux で検索 | find $ORACLE_HOME -name listener.ora |
| Windows で検索 | dir /s /b "%ORACLE_HOME%\listener.ora" |
| TNS_ADMIN 確認(Linux) | echo $TNS_ADMIN |
| TNS_ADMIN 確認(Windows) | reg query HKLM\SOFTWARE\ORACLE /v TNS_ADMIN |
| 設定変更後の反映 | lsnrctl reload または再起動 |
listener.ora の場所が確認できたら、リスナー設定完全解説(listener.ora・lsnrctl・tnsnames.ora) で設定内容を確認し、リスナーの起動方法(lsnrctl start・自動起動設定) でリスナーを起動してください。起動後は リスナーの確認方法完全ガイド(lsnrctl status・tnsping) で正常に動作しているかを確認することを推奨します。