【Oracle】ネットワーク設定完全ガイド|tnsnames.ora・listener.ora・sqlnet.ora・lsnrctl・Easy Connect の設定と確認方法まで解説

Oracle への接続は Oracle Net(旧称: SQL*Net)というネットワーク層を経由します。サーバー側のリスナー設定・クライアント側のサービス名解決・接続タイムアウトなどを制御する設定ファイルを理解しておくと、接続エラーが発生したときに迅速に原因を特定できます。

設定ファイルは通常 $ORACLE_HOME/network/admin/ ディレクトリに置かれており、tnsnames.ora・listener.ora・sqlnet.ora の3ファイルが主要です。

この記事でわかること

  • tnsnames.ora でサービス名(TNS 名)を定義する方法
  • listener.ora でリスナーを設定する方法
  • sqlnet.ora でタイムアウト・暗号化・ログを設定する方法
  • lsnrctl コマンドでリスナーを管理する方法
  • Easy Connect で設定ファイルなしで接続する方法
  • TNS-12541・ORA-12560 などの接続エラーのトラブルシューティング
スポンサーリンク

tnsnames.ora の設定

tnsnames.ora はクライアント側の設定ファイルで、TNS 名(接続識別子)からホスト・ポート・サービス名へのマッピングを定義します。sqlplus hr/password@ORCLORCL が tnsnames.ora のエントリに対応します。

tnsnames.ora の設定例
# $ORACLE_HOME/network/admin/tnsnames.ora
# (クライアント環境では $TNS_ADMIN 環境変数が指すディレクトリも参照される)

# 基本的な接続エントリ(DESCRIPTION を省略した簡略形式)
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db-server.example.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl.example.com)   # サービス名(DB_NAME.DB_DOMAIN または DB_SERVICE_NAME)
    )
  )

# SID 形式(古い接続方法。サービス名形式を推奨)
ORCL_SID =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db-server.example.com)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SID = orcl)   # SID: インスタンス識別子(DB_NAME に相当)
    )
  )

# FAILOVER: 複数ホストへのフェイルオーバー設定
ORCL_HA =
  (DESCRIPTION =
    (FAILOVER = ON)
    (LOAD_BALANCE = OFF)
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = primary-db.example.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = standby-db.example.com)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl_ha)
    )
  )

# 接続タイムアウトを個別設定する場合(CONNECT_TIMEOUT は sqlnet.ora でも設定可)
ORCL_TIMEOUT =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = db-server.example.com)(PORT = 1521))
    (CONNECT_DATA = (SERVICE_NAME = orcl))
    (RETRY_COUNT = 3)         # 接続リトライ回数
    (RETRY_DELAY = 3)         # リトライ間隔(秒)
    (CONNECT_TIMEOUT = 10)    # 接続タイムアウト(秒)
  )

listener.ora の設定

listener.ora はサーバー側の設定ファイルで、リスナーがどのアドレスで待ち受けるか・どのサービスを処理するかを定義します。通常、動的サービス登録(PMON がリスナーに自動登録)を使うため、最低限の設定で動作します。

listener.ora の設定例
# $ORACLE_HOME/network/admin/listener.ora

# リスナーの待受アドレス設定(デフォルトリスナー名: LISTENER)
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db-server.example.com)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))   # IPC: ローカル接続用
    )
  )

# 静的サービス登録(動的登録が使えない場合・AS SYSDBA 接続時に必要な場合がある)
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (ENVS = "LD_LIBRARY_PATH=/u01/app/oracle/product/19.0.0/dbhome_1/lib")
    )
  )

# 別ポートでリスナーを追加する場合
LISTENER_DEV =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = db-server.example.com)(PORT = 1522))
    )
  )

# ADR_BASE_LISTENER: リスナーのログ・トレースファイルの出力先
ADR_BASE_LISTENER = /u01/app/oracle

sqlnet.ora の設定

sqlnet.ora はクライアントとサーバーの両方に配置する設定ファイルで、接続タイムアウト・ログ・暗号化・名前解決の順序などを設定します。

sqlnet.ora の主要な設定
# $ORACLE_HOME/network/admin/sqlnet.ora

# 名前解決の順序(左から順に試みる)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT, LDAP)
# TNSNAMES: tnsnames.ora を参照する(最も一般的)
# EZCONNECT: Easy Connect 形式を使う
# LDAP: LDAP/OID で名前解決する

# 接続タイムアウト設定
SQLNET.INBOUND_CONNECT_TIMEOUT = 60    # サーバー: クライアントからの接続確立タイムアウト(秒)
SQLNET.EXPIRE_TIME = 10                # キープアライブの間隔(分)。デッドコネクション検出に使う

# クライアント側の接続タイムアウト
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 15   # 接続確立のタイムアウト(秒)

# ログとトレースの設定(障害調査時に有効にする)
LOG_DIRECTORY_CLIENT = /u01/app/oracle/network/log
LOG_FILE_CLIENT = sqlnet.log
TRACE_LEVEL_CLIENT = OFF               # OFF / USER / ADMIN / SUPPORT

# OS 認証のプレフィックス(OS 認証を使う場合の設定)
OS_AUTHENT_PREFIX = ""                # 空文字にすると OS ユーザー名そのままで認証
# デフォルトは "OPS$" なので、OS ユーザー名が "oracle" の場合は "OPS$ORACLE" ユーザーが必要

# 暗号化(Enterprise Edition のみ)
SQLNET.ENCRYPTION_CLIENT = REQUIRED    # REQUIRED / REQUESTED / ACCEPTED / REJECTED
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256, AES192)
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192)

# クライアントの HOSTNAME 解決を無効にする(パフォーマンス向上)
SQLNET.RECV_TIMEOUT = 30              # データ受信タイムアウト(秒)
SQLNET.SEND_TIMEOUT = 30              # データ送信タイムアウト(秒)

lsnrctl でリスナーを管理する

lsnrctl の主要コマンド
# リスナーの起動・停止・再起動
lsnrctl start                     # デフォルトリスナー(LISTENER)を起動
lsnrctl start LISTENER_DEV        # 指定リスナーを起動
lsnrctl stop                      # リスナーを停止
lsnrctl reload                    # listener.ora を再読み込みする(停止なし)

# リスナーの状態確認
lsnrctl status                    # リスナーの状態・登録済みサービスを表示
lsnrctl services                  # サービスの詳細情報を表示

# lsnrctl status の出力例:
# Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db-server)(PORT=1521)))
# STATUS of the LISTENER
# Alias                     LISTENER
# Version                   TNSLSNR for Linux: Version 19.0.0.0.0
# Start Date                01-APR-2026 10:00:00
# Uptime                    0 days 2 hr. 30 min. 0 sec
# Trace Level               off
# Services Summary...
# Service "orcl" has 1 instance(s).
#   Instance "orcl", status READY, has 1 handler(s) for this service...

# 接続テスト(tnsnames.ora エントリの確認)
tnsping ORCL                       # TNS 名の名前解決テスト
tnsping ORCL 3                     # 3回試す

# tnsping の成功例:
# OK (20 msec)       ← 接続先に到達できた
# TNS-12541: TNS:no listener  ← リスナーが起動していない

Easy Connect で tnsnames.ora なしで接続する

Easy Connect(EZConnect)は tnsnames.ora を使わずに//ホスト:ポート/サービス名の形式で直接接続できる機能です。Oracle 10g 以降で使えます。簡単な接続テストや一時的な接続に便利です。

Easy Connect の接続形式
# 基本形式: //ホスト:ポート/サービス名
sqlplus hr/hr_password@//db-server.example.com:1521/orcl.example.com

# ポートを省略(デフォルト 1521)
sqlplus hr/hr_password@//db-server.example.com/orcl

# SID 形式(サービス名の代わりに SID を使う場合)
sqlplus hr/hr_password@//db-server.example.com:1521:orcl

# JDBC 接続文字列での Easy Connect(Java アプリケーション向け)
# jdbc:oracle:thin:@//db-server.example.com:1521/orcl.example.com

# sqlnet.ora の NAMES.DIRECTORY_PATH に EZCONNECT が必要
# NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)

# Easy Connect Plus(Oracle 19c 以降: より豊富なオプションが使える)
# //ホスト:ポート/サービス名?connect_timeout=10&retry_count=3
sqlplus hr/hr_password@"//db-server:1521/orcl?connect_timeout=10"

よくある接続エラーとトラブルシューティング

エラー 原因 確認と対処
ORA-12541: TNS:no listener リスナーが起動していないか、ポート番号が違う lsnrctl status でリスナーの状態を確認する。ファイアウォールの 1521 ポート開放も確認する
ORA-12154: TNS:could not resolve the connect identifier tnsnames.ora に TNS 名が存在しない・構文エラー tnsping TNS名 で名前解決を確認する。tnsnames.ora の括弧の対応を確認する
ORA-12560: TNS:protocol adapter error ローカル接続で ORACLE_SID が設定されていない・インスタンスが起動していない ORACLE_SID 環境変数を確認する。lsnrctl status でリスナーとサービスを確認する
TNS-12170: TNS:Connect timeout occurred ネットワーク遅延・ファイアウォールでパケットがドロップされている ping でホスト到達性を確認する。INBOUND_CONNECT_TIMEOUT の値を増やす
ORA-12535: TNS:operation timed out 接続処理がタイムアウトした(ネットワーク問題・過負荷) tnsnames.ora の CONNECT_TIMEOUT または sqlnet.ora の OUTBOUND_CONNECT_TIMEOUT を確認する
ORA-01017: invalid username/password ユーザー名・パスワードが間違っている(大文字小文字を含む) パスワードの大文字小文字を確認する。DBA_USERS でユーザーの存在とアカウント状態を確認する
接続問題のデバッグ手順
# ① ping でホスト到達性を確認する
ping db-server.example.com

# ② telnet / nc でポートの到達性を確認する
telnet db-server.example.com 1521
# または: nc -zv db-server.example.com 1521

# ③ tnsping で名前解決と応答を確認する
tnsping ORCL

# ④ lsnrctl status でリスナーとサービスを確認する(サーバー側で実行)
lsnrctl status

# ⑤ sqlnet.ora でトレースを有効にして詳細ログを確認する(クライアント側)
# LOG_DIRECTORY_CLIENT = /tmp
# LOG_FILE_CLIENT = sqlnet.log
# TRACE_LEVEL_CLIENT = SUPPORT

# ⑥ リスナーのログを確認する(サーバー側)
# $ORACLE_BASE/diag/tnslsnr/<hostname>/listener/trace/listener.log

# ⑦ TNSNAMES の解決パスを確認する
# 環境変数 TNS_ADMIN が指すディレクトリの tnsnames.ora を最初に参照する
echo $TNS_ADMIN
ls $TNS_ADMIN/tnsnames.ora
# TNS_ADMIN が未設定の場合: $ORACLE_HOME/network/admin/ を参照

まとめ

  • tnsnames.ora:クライアント側の接続識別子(TNS 名)の定義ファイル。HOST・PORT・SERVICE_NAME(または SID)を設定する。$TNS_ADMIN 環境変数で場所を変更できる
  • listener.ora:サーバー側のリスナー設定ファイル。待受アドレスとポートを定義する。通常は動的サービス登録(PMON が自動登録)で動作する
  • sqlnet.ora:クライアント・サーバー共通の設定ファイル。NAMES.DIRECTORY_PATH で名前解決の順序(TNSNAMES/EZCONNECT)を指定する。タイムアウト設定も重要
  • lsnrctl:リスナーの起動・停止・状態確認は lsnrctl start / stop / status / reload で行う。tnsping で TNS 名の名前解決をデバッグできる
  • Easy Connect://ホスト:ポート/サービス名 の形式で tnsnames.ora なしで接続できる。NAMES.DIRECTORY_PATH に EZCONNECT が必要。テストや一時接続に便利
  • 接続エラーのデバッグ手順:ping → telnet/nc でポート疎通 → tnsping → lsnrctl status → sqlnet.ora でトレース有効化 の順で確認する

ORA-12560 エラーの詳細な対処については Oracle ORA-12560 完全ガイドを参照してください。SQL*Plus の接続コマンドの詳細は Oracle SQL*Plus 完全ガイドも参照してください。