接続情報を設定するファイル

tnsnames.ora は、ローカルネーミングパラメータで、
以下のようなネットサービスの接続が定義されているファイル。

接続定義サンプル

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = DBSERVER)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ORCL)
    )
  )
  • ネットサービス名(接続文字列)
  • 1行目の ORCL。
    「 SQL> sqlplus hoge/hoge@ORCL 」 のようにアットマークの後に指定する。
    SERVICE_NAME と分けて定義することもあるが、同じ値で統一していることが多い。

  • DESCRIPTION
  • 2行目の DESCRIPTION はネットサービス毎のパラメータをくくった枠と考えればよい。
    使用する ADDRESS や CONNECT_DATA などを記載する。上記以外にも LOAD_BALANCE、FAILOVER、ADDRESS_LIST などの様々なパラメータがある。

  • ADDRESS
  • 3行目の ADDRESS は TCP/IP などのプロトコルや DB サーバのホスト名、ポート番号。

  • CONNECT_DATA
  • 4行目の CONNECT_DATA は接続モードやサービスを識別するパラメータをくくった枠と考えればよい。

  • SERVER
  • 5行目の SERVER は接続モードを記載する。DEDICATED なら専用サーバーモード、
    SHARED なら、ディスパッチャを使用する共有サーバーモード。

  • SERVICE_NAME
  • 6行目の SERVICE_NAME は接続識別子。

    格納先ディレクトリ

    tnsnames.ora は、Windows なら %ORACLE_HOME%\network\admin 。
    または、環境変数 TNS_ADMIN やレジストリで指定したフォルダも可能。
    Unix/Linux なら $ORACLE_HOME/network/admin 。

    tnsping コマンドで定義を確認

    tnsnames.ora に定義が有効であるかを確認する場合、tnsping コマンドを使用するとよい。

    % tnsping ORCL
    
    パラメータ・ファイルを使用しました:
    
    エイリアスを解決するためにTNSNAMESアダプタを使用しました。
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)
    (HOST = DBSERVER)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) 
    (SERVICE_NAME = ORCL)))
    OK (10ミリ秒)
    

    接続できない場合はTNSエラー

    失敗したら、”TNS-“から始まるエラー番号が返されるが、原因は tnsnames.ora の
    定義不備や、リスナー側の問題など様々。切り分けを行い、原因を特定しよう。

    【関連するエラー例】
    TNS-03505: 名前の決定に失敗しました。
    TNS-12154: 指定された接続識別子を解決できませんでした。
    TNS-12170: 接続タイムアウトが発生しました。
    TNS-12514: リスナーは接続記述子で要求されたサービスを現在認識していません。
    TNS-12535: 操作はタイム・アウトしました。
    TNS-12541: リスナーがありません。

    関連記事