tnsnames.ora ファイル

tnsnames.ora はデータベースに接続する側(クライアント)に配備しておくファイルである。tnsname.ora ファイルと良く間違える。
その役割は「ネットサービス名」を「接続記述子」に変換して Oracle クライアントからデータベースサーバに接続することができるようにする。
データベースサーバ側に tnsnames.ora ファイルを配備することがある。 これは DBサーバにおいてプログラムやターミナルからOracle Net 経由で(自分自身または他のデータベースに)接続する=クライアントになる。 ということである。 データベースリンクなどでも参照されることがある。

UNIX で言うとホスト名からIPアドレスにローカルで変換する /etc/hosts ファイルと同じようなイメージである。
hosts ファイル ⇔ DNS (Domain Name System)
補足:DNS 関連の host.conf や nsswitch.conf に相当するものもあり sqlnet.ora ファイル内の NAMES.DIRECTORY_PATH が該当する。

mydb =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = dbserver.rivus.jp)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydb)
    )
  )

ローカル・ネーミング・パラメータ

ローカル・ネーミング・パラメータとは、tnsnames.ora に書かれているパラメータをあらわす。ローカル・ネーミング・パラメータ・ファイル ≒ tnsnames.ora ファイル

tnsnames.ora 書き方の基本 (TCP)

net_service_name=
 ( DESCRIPTION=
    ( ADDRESS=(protocol_address_port))
    ( CONNECT_DATA= (SERVICE_NAME=service_name))
 )

設定ポイント: ネットコンフィグアシスタント(netca) や ネットマネージャ(netmgr) などのツールを使わずにエディタでエントリーを作成する場合、見やすさを考慮して括弧の前後や=の前後にスペースを置くことは控えておくことをおススメする。(全角スペースの混入やパーサー自体もがあまり賢くないので、わかりにくいトラブルで悩まされる可能性がある)

ネットサービス名

net_service_name

SQL*Plus などでネット経由でデータベースに接続する場合にデータベースを特定する名前

C:\>sqlplus rivus/rivus_pass@NET_SERVICE_NAME
                            ^^^^^^^^^^^^^^^^^

接続記述子

DESCRIPTION

プロトコル・アドレス・セクション

protocol_address_port

接続する方法によって記述する書式が異なる。 TCP による接続の場合には

ADDRESS=( (PROTOCOL=TCP)(HOST=ホスト名または IPアドレス)(PORT=リスナのポート番号) ) の書式を用いる。

プロトコル・アドレス・セクションの設定例

ADDRESS=((PROTOCOL=TCP)(HOST=dbserver.rivus.jp)(PORT=1521))

サービス名

service_name

1つインスタンス、または、同じ機能を提供(=サービス)する複数インスタンスの集合体を特定する名称

参考 データベースを特定する名前 (SERVICE_NAMES)

tnsnames.ora ファイルの場所

tnsnames.ora ファイルは TNS_ADMIN 環境変数 で指定されたディレクトリに存在するものを参照する。
TNS_ADMIN 環境変数が設定されていない場合には $ORACLE_HOME/network/admin ディレクトリにあるものを参照する。

Windows で Oracle 11g の代表例としては

C:\oracle\product\11.1.0\db_1\NETWORK\ADMIN

となる。

関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)