Chapter 03

リスナーへの接続要求とネーミングメソッド

Me
Me
2021.11.27に更新

クライアントからリスナーへの接続要求

クライアントがデータベースに接続する際、まず最初にデータベースサーバで稼働しているリスナーに接続要求を送信する必要がある. 接続要求には以下のような接続先情報を含む必要がある.

1. アドレス : 対象のリスナーが稼働しているサーバのホスト名もしくはIPアドレス.
2. ポート番号 : リスナーが受け付けているポート番号
3. データベースサービス名 : 接続先データベースサービス名

上記を直接指定することも可能だが、利便性に欠けるため、多くの場合は接続先の指定に接続識別子と呼ばれるものを利用する.

 <ユーザ名>/<パスワード>@<接続識別子>

接続識別子から対応した接続先情報を解決する方法をネーミングメソッド (参考)と呼ぶ.

代表的なネーミングメソッドを以下に記載する.


1. 簡易接続ネーミング・メソッド

簡易接続ネーミングは、接続時に接続識別子ではなく、接続記述子そのものを直接指定する方法を指す. 特に特殊な設定は必要とせず、もっともシンプルなネーミング・メソッドとして挙げられる.

 <ユーザ名>/<パスワード>@<ホスト名>:<ポート番号>/<データベースサービス名>
 // ポート番号に関しては、省略した際1521が指定される.

2. ローカル・ネーミング・メソッド

クライアントのテキスト形式設定ファイル tnsnames.ora に接続識別子と接続記述子の対応関係を記載しておき、接続識別子を利用した接続時に参照する手法をローカルネーミングメソッドと呼ぶ.

tnsnames.ora の記載例は以下の通り.

ORACLE_HOME/network/admin/tnsnames.ora
 <接続記述子名>=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = <プロトコル>)(HOST = <ホスト名>)(PORT = <ポート番号>))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = <データべースサービス名>)
    )
  )

また、下記のように接続先情報を複数記載 (FAILOVER オプションは任意) することで、接続時フェイルオーバーを実現したり、 LOAD_BALANCE オプションでクライアント・ロード・バランシングを構成したりできる(参考).
この場合、仮に最初に<ホスト名1>:<ポート番号1>に対する接続を行い、結果的に失敗した場合は<ホスト名2>:<ポート番号2>への接続に自動で切り替える. なお、ロードバランシングを有効化している場合は、接続先はリストの中からランダムで選択される.

ORACLE_HOME/network/admin/tnsnames.ora
 <接続記述子名>=
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = <プロトコル1>)(HOST = <ホスト名1>)(PORT = <ポート番号1>))
       (ADDRESS = (PROTOCOL = <プロトコル2>)(HOST = <ホスト名2>)(PORT = <ポート番号2>))
     (LOAD_BALANCE = yes)
     (FAILOVER=on)
     )
     (CONNECT_DATA =
       (SERVICE_NAME = <データべースサービス名>)
     )
   )

3.外部ネーミング・メソッド

サード・パーティのネーミング・サービスに接続識別子と接続記述子の対応関係を tnsnamesマップ に格納し、名前解決を行う際に参照しにいく手法を外部ネーミングメソッドと呼ぶ.
格納される tnsnamesマップtnsnames.oratns2nis コマンドを用いて生成できる.


4.ディレクトリ・ネーミング・メソッド

LDAPサーバ上に接続記述子を格納し、名前解決時に参照する手法をディレクトリ・ネーミング・メソッドと呼ぶ.