tnsnames.oraの配置場所は?設定と優先順位を解説

OracleNet

Oracle Databaseへの接続に不可欠な tnsnames.oraの配置場所 は、標準では $ORACLE_HOME/network/admin です。しかし、環境変数 TNS_ADMIN の設定により参照先が変わるため、接続できないトラブル時は優先順位の確認が重要です。本記事では Oracle Client やサーバー側での正しい置き場所と、設定の反映手順を解説します。

Oracle tnsnames.ora の書き方と設定【初心者向け解説】
Oracle Databaseへの接続で必須となる tnsnames.ora ファイルの書き方や設定で困っていませんか?この記事では、Oracle の接続識別子を定義する tnsnames.ora の基本的な仕組みから、具体的な設定手順、よ…

結論:tnsnames.ora の最短確認リスト

接続エラー(ORA-12154など)が発生した際は、以下の順序でファイルを探してください。

  1. 環境変数 TNS_ADMIN を確認: 設定されていれば、そのディレクトリが最優先されます。
  2. デフォルトパスを確認: $ORACLE_HOME/network/admin 直下を確認します。
  3. OSユーザーごとの設定を確認: ~/.tnsnames.ora (Linuxの場合)が存在しないか確認します。
  4. 読み取り権限: ファイルのパーミッションが実行ユーザーから読み取れるか確認します。

tnsnames.ora の役割と配置の仕組み

tnsnames.ora は、Oracle Net Servicesが提供する「ローカル・ネーミング・メソッド」で使用される定義ファイルです。複雑な接続記述子(ホスト名、ポート番号、サービス名)に「ネット・サービス名」という別名を付けて管理します。

初心者向け:なぜ場所が複数あるのか?

Oracleは「共通設定」と「ユーザー固有設定」を分けることができる設計になっています。基本は1箇所で管理すべきですが、複数のOracle Homeをインストールしている場合や、特定のアプリだけ別の接続先を見せたい場合に TNS_ADMIN を使って場所を切り替えます。


手順:tnsnames.ora の配置と設定

Linux環境(Oracle Database 19c)を例に、正しい配置手順を説明します。

1. 現在の場所を確認する

まずは、OS上で環境変数が定義されているか確認します。

# TNS_ADMINが設定されているか確認
echo $TNS_ADMIN

# ORACLE_HOMEが設定されているか確認
echo $ORACLE_HOME

2. ファイルを配置する

環境変数が未設定の場合、以下の標準ディレクトリにファイルを配置(または編集)します。

  • 配置パス: /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/tnsnames.ora

3. 設定例の作成(シングル環境・CDB/PDB環境)

接続環境に合わせて以下の記述を追加します。

A. シングル構成(非CDB)の記述例

インスタンスに直接接続する際の標準的な設定です。

# ネット・サービス名 = (DESCRIPTION = ... )
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl.example.com)
    )
  )

B. CDB/PDB構成の記述例

19c以降の標準であるマルチテナント構成で、特定のPDB(プラガブル・データベース)に接続する設定です。

# PDBへの接続設定例
ORCLPDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbsvr01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orclpdb.example.com)
    )
  )

補足: SERVICE_NAMElsnrctl status コマンドで確認できるサービス名と一致させる必要があります。パスワードや識別子に @ 記号を含めると接続文字列として誤認されるリスクがあるため、避けるのが無難です。

4. listener.ora や sqlnet.ora の配置について

補足として、サーバー側のリスナー設定ファイルである listener.ora や、共通設定ファイルである sqlnet.ora も、tnsnames.ora と全く同じ配置ルール(優先順位)に従います。

  • TNS_ADMIN が設定されていれば、そのディレクトリ内の各ファイルを読み込みます。
  • 未設定なら $ORACLE_HOME/network/admin を参照します。

接続場所の優先順位(検索順序)

Oracle Netが tnsnames.ora を探す順番は厳密に決まっています。

優先順位配置場所・条件備考
1環境変数 TNS_ADMIN指定されたディレクトリを直に見に行く
2~/.tnsnames.oraLinux/Unixのユーザーホーム直下の隠しファイル
3$ORACLE_HOME/network/admin標準の配置場所
4/etc または /var/opt/oracleOS全体で共有する場合の設定(Linux/Solaris)

トラブルシューティング:接続できない時の対処法

tnsnames.ora に関連する代表的なエラーと確認項目です。

エラーコード主な原因確認アクション
ORA-12154指定したサービス名が見つからないTNS_ADMIN が意図しない場所を指していないか確認。
ORA-12541リスナーが起動していないサーバー側で lsnrctl status を実行。
ORA-12514サービス名が間違っているtnsnames.ora 内の SERVICE_NAME がリスナー登録名と一致するか確認。

運用上の注意点

  • 影響範囲: tnsnames.ora を変更すると、そのファイルを参照している全てのアプリケーション・接続ツールに即座に影響します。
  • リスク: 編集時にカッコ () の閉じ忘れがあると、ファイル全体の解析に失敗し、他の正常な接続設定まで無効になる恐れがあります。
  • 戻し方: 変更前に必ず cp tnsnames.ora tnsnames.ora.bak でバックアップを取得してください。
  • セキュリティ: 不特定多数が書き込める権限(777など)は避け、Oracleユーザーのみが編集できるよう制限してください。

FAQ:よくある質問

Q1: Windows版の Oracle Client ではどこにありますか?

A1: 基本は %ORACLE_HOME%\network\admin です。GUIツール(SQL Developerなど)を使用している場合は、ツール内の設定で TNS_ADMIN のパスを直接指定することもあります。

Q2: 変更後、リスナーの再起動は必要ですか?

A2: 不要です。 tnsnames.ora はクライアント側が接続を開始する際に読み込むファイルであるため、サーバー側のリスナー再起動は必要ありません。

Q3: 複数のディレクトリにある tnsnames.ora をマージできますか?

A3: 自動マージはされません。優先順位の高いディレクトリにあるファイルのみが読み込まれます。

Q4: CDB/PDB構成で注意点はありますか?

A4: PDBに接続する場合、SERVICE_NAME には PDBのサービス名を指定してください。インスタンス名(SID)での接続は非推奨です。


まとめ

  • tnsnames.ora のデフォルト配置場所は $ORACLE_HOME/network/admin である。
  • 環境変数 TNS_ADMIN が設定されている場合、そこが最優先の場所となる。
  • listener.ora も同様の場所・優先順位で参照される。
  • 接続エラー時は、自分が編集しているファイルが本当にシステムに読み込まれているか、優先順位を確認する。

本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。

[参考]
tnsnames.oraファイル内のローカル・ネーミング・パラメータ

Oracle ORA-12514解決ガイド:リスナー接続エラーの原因と対策
Oracle Database接続時に発生する「ORA-12514: TNS: リスナーは接続記述子で要求されたサービスを現在認識していません」は、クライアントが指定したサービス名(SERVICE_NAME)をリスナーが把握していない場合に…
Oracle TNS_ADMINの正しい使い方と設定手順【Linux/19c】
導入(要約)Oracle の接続設定を一元管理したい時に使うのが環境変数 TNS_ADMIN です。この記事では oracle クライアント/サーバーで TNS_ADMIN を設定して tnsnames.ora や sqlnet.ora、必…

コメント

タイトルとURLをコピーしました