ネット・サービス名およびtnsnames.oraファイル
Oracle RACデータベースのインストール・プロセスでは、各ノードにtnsnames.oraファイルが作成されます。このファイルは、ネット・サービス名のリポジトリとして機能します。
各ネット・サービス名は、接続識別子に関連付けられています。接続識別子は、ユーザー定義の名前を接続記述子にマップする識別子です。接続記述子には、次の情報が含まれます。
-
プロトコル・アドレスを介するリスナーの位置を含む、サービスへのネットワーク・ルート
-
データベース・サービスの名前に設定される値を持つ、
SERVICE_NAMEパラメータノート:
指定できるサービス名は1つのみであるため、tnsnames.oraファイルで使用するSERVICE_NAMEパラメータは1つです。
通常、Oracle Database Configuration Assistant (DBCA)やOracle Net Configuration Assistant (NETCA)などのツールでは、tnsnames.oraファイルが、Oracle Databaseインストールの場合はORACLE_HOME/network/adminディレクトリ、Oracle Grid Infrastructureインストールの場合はGRID_HOME/network/adminディレクトリ、読取り専用Oracleホームの場合は対応するORACLE_BASE_HOME/network/adminディレクトリに作成されます。なお、複数のデータベースをインストールしてある場合は、このファイルは、DBCAまたはNETCAが実行されているOracleホームまたはGridホーム(または読取り専用インスタンスの場合はOracleベース・ホーム)に作成されます。
Oracle Netは、次の順序でtnsnames.oraファイルをチェックします:
-
環境変数
TNS_ADMINで指定されたディレクトリ。 -
TNS_ADMIN環境変数が設定されていないか、このファイルがTNS_ADMINディレクトリにない場合:-
Oracle Databaseインストールの場合:
ORACLE_HOME/network/adminディレクトリ(または読取り専用Oracleホームの場合はORACLE_BASE_HOME/network/adminディレクトリ)。 -
Oracle Grid Infrastructureインストールの場合:
GRID_HOME/network/adminディレクトリ(または読取り専用Oracleホームの場合はORACLE_BASE_HOME/network/adminディレクトリ)。
-
-
読取り専用Oracleホームの場合に、このファイルがOracleベース・ホームに見つからないとき:
-
Oracle Databaseインストールの場合:
ORACLE_HOME/network/adminディレクトリ。 -
Grid Infrastructureインストールの場合:
GRID_HOME/network/adminディレクトリ。
-
Oracle Clusterware 11g リリース2以上では、リスナーの対応付けにtnsnames.oraファイルのエントリは必要ありません。リスナー対応付けは、次のように構成されます。
-
DBCAでは、
LOCAL_LISTENERパラメータは設定されなくなりました。データベースを起動するOracle Clusterwareエージェントは、LOCAL_LISTENERパラメータを動的に設定し、このパラメータに別名ではなく実際の値を設定します。そのため、tnsnames.oraファイルのlistener_aliasエントリは不要になります。 -
REMOTE_LISTENERパラメータは、DBCAによって、SCANとSCANポートを参照するように構成され、tnsnames.oraのエントリは不要です。Oracle Clusterwareではscanname:scanportに簡易接続ネーミング・メソッドを使用するため、tnsnames.oraファイルにREMOTE_LISTENERパラメータに対するリスナーの関連付けは不要です。
たとえば、データベースを作成した後に、ポート2012をリスニングする2番目のリスナーを追加する場合は、次のコマンドと類似したコマンドを使用してデータベースを両方のリスナーに起動時に登録します。
SQL> alter system set local_listener='(DESCRIPTION=
(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.61)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.61)(PORT=2012))))'
scope=BOTH SID='OCRL1';