Oracle Databaseへの接続で必須となる tnsnames.ora ファイルの書き方や設定で困っていませんか?この記事では、Oracle の接続識別子を定義する tnsnames.ora の基本的な仕組みから、具体的な設定手順、よくある接続エラー(ORA-12154)の解決策まで、Linux環境の19cを例に初心者にも分かりやすく解説します。
この記事を読めば、クライアントPCや別サーバーからOracleデータベースへスムーズに接続できるようになります。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
結論:tnsnames.ora 設定の最短手順
時間がない方向けに、tnsnames.ora を設定してOracleに接続するまでの流れをまとめます。
- ファイルの場所を確認: 接続元(クライアント側)の
$ORACLE_HOME/network/admin/配下にあるtnsnames.oraを探します。 - ファイルを開く: テキストエディタで
tnsnames.oraを開きます。(なければ新規作成) - 接続情報を記述: 以下の書式に合わせて、接続したいデータベースの情報を追記します。
- ファイルを保存: 編集内容を保存してファイルを閉じます。
- 疎通確認:
tnsping <ネット・サービス名>コマンドで設定が正しいか確認します。 - 接続実行:
sqlplus <ユーザー>/<パスワード>@<ネット・サービス名>でデータベースに接続します。
背景と基礎知識:「tnsnames.ora」とは?
tnsnames.ora とは、Oracleデータベースへ接続する際の「宛先リスト」のような設定ファイルです。IPアドレス、ポート番号、サービス名といった接続情報を「ネット・サービス名」という分かりやすい別名にマッピングする役割を持ちます。
例えば、DB_DEV_01 というネット・サービス名を見ただけで「開発環境の1号機DBだな」と人間が識別できるようになります。このファイルのおかげで、アプリケーションやツールは複雑な接続文字列を覚える必要がなく、この「ネット・サービス名」を指定するだけでターゲットのDBに接続できるのです。
| 用語 | 説明 | 例 |
| ネット・サービス名 | 接続先DBの分かりやすい別名。tnsnames.ora内で定義する。 | ORCL_TNS |
| 接続記述子 (Descriptor) | 接続先のホスト名、ポート番号、サービス名などを記述した部分。 | (DESCRIPTION=...) |
| リスナー (Listener) | DBサーバー側で接続要求を待ち受けるプロセス。 | LISTENER |
一口メモ TNSは “Transparent Network Substrate” の略です。直訳すると「透過的なネットワーク基盤」となり、開発者が物理的なネットワーク構成を意識することなく、名前だけでデータベースにアクセスできる仕組みを提供します。
手順・実装:tnsnames.ora の場所と書き方
ここでは、tnsnames.ora ファイルの格納場所と具体的な記述方法を解説します。
1. tnsnames.ora ファイルの場所
このファイルは、データベースに接続する側(クライアント) のマシンに配置します。通常、以下のパスに格納されています。
- Linux/UNIX系:
$ORACLE_HOME/network/admin/ - Windows:
%ORACLE_HOME%\network\admin\
$ORACLE_HOME の場所が分からない場合は、oracle ユーザーで以下のコマンドを実行すると確認できます。
echo $ORACLE_HOME
環境変数 TNS_ADMIN が設定されている場合、そちらのパスが優先されるため注意が必要です。
2. tnsnames.ora の基本的な書き方
tnsnames.ora は、以下のシンプルな構文で記述します。
<ネット・サービス名> =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <ホスト名 or IPアドレス>)(PORT = <ポート番号>))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <サービス名>)
)
)
- ネット・サービス名: 任意の分かりやすい名前を付けます。SQL*Plusなどで
@の後に指定する名前です。 - HOST: データベースサーバーのホスト名またはIPアドレスを指定します。
- PORT: サーバー側のリスナーが待ち受けているポート番号です。デフォルトは
1521です。 - SERVICE_NAME: 接続先のサービス名を指定します。これはサーバー側のリスナーで確認できます。
実行例:実際に設定して接続してみる
提供された lsnrctl status の情報をもとに、tnsnames.ora を作成し、SQL*Plusで接続するまでの具体的な手順を見ていきましょう。
前提条件
- スキーマ:
scottユーザーが存在し、接続可能であること。 - 接続元: Oracle ClientがインストールされたLinuxマシン。
- 接続先情報 (lsnrctl statusより):
- ホスト名:
orcl19c - ポート:
1521 - サービス名:
orcl
- ホスト名:
1. tnsnames.ora の編集
まず、$ORACLE_HOME/network/admin/tnsnames.ora を vi などのエディタで開きます。
vi $ORACLE_HOME/network/admin/tnsnames.ora
次に、以下の内容を追記または新規作成します。ここではネット・サービス名を ORCL_TNS とします。
# 開発用DB (orcl) への接続設定
ORCL_TNS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = orcl19c)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
SQL解説 この設定は、「
ORCL_TNSという名前で呼ばれたら、TCPプロトコルを使ってorcl19cというホストの1521番ポートに接続し、orclというデータベースサービスを呼び出してください」という指示を意味します。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
2. tnsping による疎通確認
設定が正しく読み込めるかを確認するため、tnsping コマンドを実行します。
# tnsping <ネット・サービス名> を実行
tnsping ORCL_TNS
以下のように OK と表示されれば、tnsnames.ora の記述は正しく、リスナーとの通信準備ができています。
TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 13-OCT-2025 14:00:00
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/19.0.0/dbhome_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl19c)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl)))
OK (10 msec)
3. SQL*Plus での接続
最後に、sqlplus コマンドで実際にデータベースへ接続します。
# sqlplus <ユーザー名>/<パスワード>@<ネット・サービス名> で接続
sqlplus scott/tiger@ORCL_TNS
接続に成功すると、SQLプロンプトが表示されます。
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Oct 13 14:01:00 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
これで、tnsnames.ora を使ったデータベース接続は完了です。
トラブルシューティング
tnsnames.ora の設定でよく遭遇するエラーとその対処法をまとめました。
| ORAエラーコード | 主な原因 | 確認ポイント | 対処法(例) |
| ORA-12154 | ネット・サービス名が見つからない | ・tnsnames.oraのパスは正しいか? ・ファイル内の名前のスペルミス ・構文エラー(括弧の閉じ忘れなど) | TNS_ADMIN環境変数の確認、tnspingでの疎通確認、構文の見直し。 |
| ORA-12541 | リスナーが起動していない、ホスト名やポート番号が違う | ・サーバー側で lsnrctl status を実行 ・tnsnames.ora の HOST/PORT | サーバー側でリスナーを起動 (lsnrctl start)、tnsnames.ora の HOST/PORT を修正。 |
| ORA-12514 | リスナーは稼働中だが、指定されたサービス名を知らない | ・lsnrctl status の Services Summary ・tnsnames.ora の SERVICE_NAME | tnsnames.ora の SERVICE_NAME を lsnrctl status で表示される正しい値に修正。 |
Google スプレッドシートにエクスポート
一口メモ 接続エラーの切り分けは、まずクライアント側の
tnspingで名前解決ができるかを確認し、次にサーバー側のlsnrctl statusでリスナーの状態を確認するのが定石です。
運用・セキュリティ上の注意点
- バックアップ:
tnsnames.oraを編集する前には、必ずファイルのバックアップを取得してください。構文を間違えると全ての接続定義が使えなくなる可能性があります。 - 簡易接続ネーミング・メソッドとの比較:
tnsnames.oraを使わずにユーザー/パスワード@ホスト:ポート/サービス名の形式で直接接続する方法(Easy Connect)もあります。手軽ですが、接続文字列が長くなり、RAC構成でのロードバランスなど高度な機能は利用できません。用途に応じて使い分けましょう。 - TNS_ADMIN 環境変数: 開発、検証、本番など複数の環境で
tnsnames.oraを使い分けたい場合、TNS_ADMIN環境変数でファイルの置き場所を切り替えるのが便利です。 - 戻し方: 問題が発生した場合は、バックアップしておいたファイルで上書きすれば、すぐに元の状態に戻すことができます。
FAQ
Q1: tnsnames.ora ファイルのデフォルトの場所はどこですか?
A1: Linux/UNIX環境では $ORACLE_HOME/network/admin/、Windows環境では %ORACLE_HOME%\network\admin\ がデフォルトの格納場所です。ただし、環境変数 TNS_ADMIN が設定されている場合は、そのディレクトリが優先されます。
Q2: sqlnet.ora ファイルとの違いは何ですか?
A2: tnsnames.oraが「どこに接続するか」という宛先リスト(住所録)の役割を果たすのに対し、sqlnet.oraは「どのように接続するか」という接続ルール(通信方法やセキュリティ)を定義するファイルです。
Q3: Linux版とWindows版で tnsnames.ora の書き方に違いはありますか?
A3: ファイルの構文や書き方に違いはありません。どちらのOSでも同じ内容で利用できます。異なるのはファイルのパス(ディレクトリの区切り文字が / か \ か)だけです。
Q4: このファイルがなくてもOracleに接続できますか?
A4: はい、可能です。「簡易接続ネーミング・メソッド(Easy Connect)」を使えば、sqlplus scott/tiger@orcl19c:1521/orcl のように接続文字列で直接ホストやポートを指定して接続できます。
Q5: 1つの tnsnames.ora ファイルに複数の接続先を記述できますか?
A5: はい、できます。ファイル内に複数のネット・サービス名定義を続けて記述することで、1つのファイルで開発用、本番用など様々なデータベースへの接続情報を管理できます。
まとめ
本記事では、Oracleの tnsnames.ora ファイルについて解説しました。
tnsnames.oraはDB接続情報を管理する「宛先リスト」- ファイルの場所は
$ORACLE_HOME/network/adminが基本 - 「ネット・サービス名」「HOST」「PORT」「SERVICE_NAME」が基本要素
- 設定後は
tnspingで疎通確認をするのが鉄則 - ORA-12154 エラーは、まず名前解決の失敗を疑う
このファイルのを正しく理解・設定することで、日々のOracle運用をよりスムーズに進めることができます。
本記事は Oracle Database 19c を対象に解説します(他バージョンは画面や既定値が異なる場合があります)。
[参考]
Database Net Servicesリファレンス
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント