2.3 データベース・サービスへの接続
データベース・サービスに接続するために、クライアントは、データベースの場所とデータベース・サービスの名前を示す接続記述子を使用します。
次の例は、sales.us.example.com
というデータベース・サービス、およびホストsales-server
に接続する簡易接続記述子を示しています(デフォルトではポートは1521です)。
sales-server/sales.us.example.com
次の例は、前述の簡易接続記述子およびデータベース・サービスに対するtnsnames.ora
ファイル内のエントリを示しています。
(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server
)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com
)))
2.3.1 接続記述子について
接続記述子は、tnsnames.ora
ファイルに記述されている、リスナーの1つまたは複数のプロトコル・アドレスおよび宛先サービスの接続情報により構成されます。例2-1は、sales
データベースにマップされた接続記述子を示しています。
例2-1 接続記述子
sales= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)) (CONNECT_DATA= (SID=sales) (SERVICE_NAME=sales.us.example.com) (INSTANCE_NAME=sales)))
例2-1に示すように、接続記述子には次のパラメータが含まれています。
-
ADDRESSセクションには次のパラメータがあります。
-
PROTOCOLパラメータは、リスナー・プロトコル・アドレスを識別します。プロトコルは、TCP/IPの場合
tcp
です。 -
HOSTパラメータは、ホスト名を識別します。ホストは
sales-server
です。 -
PORTパラメータは、ポートを識別します。ポートは、デフォルトのポート番号
1521
です。 -
オプションのHTTPS_PROXYパラメータとHTTPS_PROXY_PORTパラメータにより、データベース・クライアントの接続は組織の転送Webプロキシを通過できるようになります。これらのパラメータは、PROTOCOL=TCPSの接続記述子にのみ適用されます。
-
-
CONNECT_DATAセクションには次のパラメータがあります。
-
SERVICE_NAMEパラメータはサービスを識別します。宛先サービス名は、
sales.us.example.com
という名前のデータベース・サービスです。この接続記述子パラメータの値は、初期化パラメータ・ファイルのSERVICE_NAMES初期化パラメータ(SERVICE_NAMESでは末尾にSが使用されます)から取得されます。一般的にSERVICE_NAMES初期化パラメータは、データベース名とドメイン名が含まれるグローバル・データベース名です。例では、
sales.us.example.com
には、sales
のデータベース名とus.example.com
のドメインがあります。ノート:
Oracle Database 19c以降、SERVICE_NAMES
パラメータをお客様が使用することは非推奨になりました。サービスを管理するには、SRVCTL
またはGDSCTL
コマンドライン・ユーティリティ、またはDBMS_SERVICE
パッケージを使用することをお薦めします。 -
INSTANCE_NAMEパラメータはデータベース・インスタンスを識別します。インスタンス名はオプションです。
初期化パラメータ・ファイルのINSTANCE_NAMEパラメータは、インストール中またはデータベース作成中に入力されたSIDが、デフォルトで設定されます。
- 接続記述子のIPv6アドレスについて
ホストは、IP version 4 (IPv4)およびIP version 6 (IPv6)インタフェースを使用できます。IPv6アドレス、およびIPv6アドレスに解決されるホスト名は、TNS接続アドレスのHOST
パラメータで使用すると便利です。このTNS接続アドレスは、サポートされているネット・ネーミング・メソッドのいずれかで取得できます。
関連項目:
親トピック: データベース・サービスへの接続
2.3.1.1 接続記述子のIPv6アドレスについて
ホストは、IP version 4 (IPv4)およびIP version 6 (IPv6)インタフェースを使用できます。IPv6アドレス、およびIPv6アドレスに解決されるホスト名は、TNS接続アドレスのHOST
パラメータで使用すると便利です。このTNS接続アドレスは、サポートされているネット・ネーミング・メソッドのいずれかで取得できます。
IPv6を使用したエンドツーエンド接続には、次の構成が必要です。
-
クライアントTNS接続アドレスは、IPv6エンドポイント上のOracle Net Listenerに接続する必要があります。
-
Oracle Net Listenerに対して構成されているデータベース・インスタンスは、IPv6エンドポイント上の接続要求をリスニングする必要があります。
ホスト名が指定されている場合、正常な接続が確立されるか、すべてのアドレスが試行されるまで、Oracle Netはドメイン・ネーム・システム(DNS)の名前解決によって戻されるすべてのIPアドレスへの接続を試行します。接続記述子において、sales-server
ホストが、クライアント接続を受け入れるIPv4専用ホストであるとします。DNSはsales-server
を次のIPアドレスにマップします。
-
IPv6アドレス
2001:0db8:0:0::200C:417A
-
IPV4アドレス
192.0.2.213
この場合、IPv6アドレスがDNSリストの先頭にあるため、Oracle Netはまずこのアドレスで接続を試行します。この例では、sales-server
はIPv6接続をサポートしていないため、この試行は失敗します。Oracle NetはIPv4アドレスへの接続に進み、この試行は成功します。
2.3.2 プロトコル・アドレスについて
接続記述子のアドレスの一部はリスナーのプロトコル・アドレスです。データベース・サービスに接続するには、クライアントは、まず、データベース・サーバーに常駐しているリスナー・プロセスに接続します。リスナーはクライアントからの着信接続要求を受信し、これらの要求をデータベース・サーバーに送信します。接続が確立された後、クライアントとデータベース・サーバーは直接通信します。
リスナーはクライアントからの要求を受け入れるようにプロトコル・アドレスで設定できます。このアドレスはリスナーがリスニングを実行するプロトコルと、プロトコル固有のその他の情報を定義します。たとえば、リスナーを次のプロトコル・アドレスでリスニングを実行するように設定できます。
(DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)))
前の例では、リスナーのホストとポート番号を指定するTCP/IPプロトコル・アドレスを示しています。これと同じプロトコル・アドレスで構成されたクライアント接続記述子は、このリスナーに接続要求を送信できます。
親トピック: データベース・サービスへの接続
2.3.3 サービス登録について
接続記述子ではデータベース・サービス名を指定し、これを使用してクライアントは接続の確立を試みます。リスナーは接続要求を処理できるサービスを認識しますが、これは、Oracle Databaseがこの情報をリスナーに動的に登録しているためです。この登録プロセスは、サービス登録と呼ばれます。登録によって、データベース・インスタンス、および各インスタンスで利用可能なサービス・ハンドラに関する情報がリスナーに提供されます。ディスパッチャまたは専用サーバーがあります。
2.3.3.1 インスタンス名の指定
データベースの特定のインスタンスへの接続が必要な場合、クライアントは特定インスタンスのINSTANCE_NAMEを接続記述子で指定できます。この機能は、Oracle RAC構成を使用する場合に役立ちます。たとえば、次の接続記述子は、sales.us.example.com
に対応付けられているsales1
のインスタンス名を指定しています。
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.example.com)
(INSTANCE_NAME=sales1)))
親トピック: サービス登録について
2.3.3.2 サービス・ハンドラの指定
特定のタイプのサービス・ハンドラを常に使用するクライアントは、そのサービス・ハンドラのタイプを指定する接続記述子を使用できます。次の例では、接続記述子は(SERVER=shared)
を使用して、データベース接続時にディスパッチャを要求します。デフォルトで専用サーバーを使用するようにデータベースを構成できます。
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.example.com)
(SERVER=shared)))
リスナーはクライアントの要求を受け取ると、登録されているサービス・ハンドラの1つを選択します。選択したハンドラのタイプ、使用する通信プロトコル、データベース・サーバーのオペレーティング・システムに基づいて、リスナーは次の処理のいずれかを実行します。
-
接続要求を直接ディスパッチャに渡します。
-
ディスパッチャまたは専用サーバー・プロセスの位置情報が記録されたリダイレクト・メッセージをクライアントに戻します。続いてクライアントが、ディスパッチャまたは専用サーバー・プロセスに直接接続します。
-
専用サーバー・プロセスを生成して、クライアント接続を専用サーバー・プロセスに渡します。
リスナーがクライアントとの接続処理を完了すると、クライアントはリスナーを介さずにOracle Databaseと直接通信します。リスナーは、着信ネットワーク・セッションのリスニングを再開します。
サービス・ハンドラを指定する場合は、次の点を考慮する必要があります。
関連項目:
-
リスナーでサービス・ハンドラを使用する方法は、「リスナーおよび接続要求について」を参照
-
『Oracle Call Interfaceプログラマーズ・ガイド』および『Oracle Database管理者ガイド』を参照してください。
-
グローバル・サービス管理の詳細は、Oracle Database Global Data Services概要および管理ガイドを参照してください。
親トピック: サービス登録について