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

結論:tnsnames.ora の最短確認リスト
接続エラー(ORA-12154など)が発生した際は、以下の順序でファイルを探してください。
- 環境変数
TNS_ADMINを確認: 設定されていれば、そのディレクトリが最優先されます。 - デフォルトパスを確認:
$ORACLE_HOME/network/admin直下を確認します。 - OSユーザーごとの設定を確認:
~/.tnsnames.ora(Linuxの場合)が存在しないか確認します。 - 読み取り権限: ファイルのパーミッションが実行ユーザーから読み取れるか確認します。
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_NAMEはlsnrctl 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.ora | Linux/Unixのユーザーホーム直下の隠しファイル |
| 3 | $ORACLE_HOME/network/admin | 標準の配置場所 |
| 4 | /etc または /var/opt/oracle | OS全体で共有する場合の設定(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ファイル内のローカル・ネーミング・パラメータ



コメント