この章では、拡張接続データ・パラメータ、ロード・バランシング、フェイルオーバーおよび非データベース・サービスへの接続など、Oracle Net Servicesの拡張機能の構成方法を説明します。
この章の内容は、次のとおりです。
データベース・サービスは、複数のルートおよびプロトコル・アドレスからアクセスできます。プロトコル・アドレスのリストを設定して、使用するルートを構成します。また、アドレス・パラメータを指定して、アドレスの使用順序を構成します。この項で説明する項目は、次のとおりです。
データベース・サービスは、複数のネットワーク・ルートまたはプロトコル・アドレスからアクセスできます。次の例では、sales1-server
またはsales2-server
のいずれかのリスナーを使用して、sales.us.example.com
に接続します。
sales.us.example.com= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521))) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com)))
既存のネット・サービス名やデータベース・サービスにネットワーク・プロトコル・アドレスを追加するには、Oracle Enterprise ManagerまたはOracle Net Managerのいずれかを使用します。
Oracle Enterprise Managerを使用したネットワーク・プロトコルの追加
次の手順では、Oracle Enterprise Managerを使用して既存のネット・サービス名またはデータベース・サービスにネットワーク・プロトコルを追加する方法について説明します。
Oracle Enterprise Managerの「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページにアクセスします。
Oracle Enterprise Managerの「Net Services管理」ページにアクセスします。
「管理」リストから「ローカル・ネーミング」または「ディレクトリ・ネーミング」を選択し、次にディレクトリ・サーバーまたはローカル構成ファイルの場所を選択します。
「実行」をクリックします。
「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページが表示されます。
ディレクトリ・サービス名またはネット・サービス名を選択します。
「ディレクトリ・ネーミング」の場合、簡易検索セクションでネット・サービス名を検索し、「結果」リストからネット・サービスまたはデータベース・サービスを選択し、次に「編集」をクリックします。「ローカル・ネーミング」の場合、リストからネット・サービスを選択し、「編集」をクリックします。
アドレス・セクションで、「追加」をクリックします。
「アドレスの追加」ページが表示されます。
「プロトコル」リストからリスナーがリスニングするように構成されているプロトコルを選択します。このプロトコルも、クライアント上にインストールする必要があります。
提供されたフィールドで選択したプロトコルに対して適切なパラメータ情報を入力します。
関連項目: プロトコル・パラメータの設定については、『Oracle Database Net Servicesリファレンス』を参照してください。 |
オプションで、拡張パラメータ・セクションを使用して、このセッションにおける送受信操作に必要なI/Oバッファ・スペース制限を「合計送信バッファ・サイズ」および「合計受信バッファ・サイズ」フィールドに指定します。
「OK」をクリックします。
プロトコル・アドレスは、アドレス・セクションに追加されます。
アドレス情報を更新するには、「OK」をクリックします。
Oracle Net Managerを使用したネットワーク・プロトコルの追加
次の手順では、Oracle Net Managerを使用して既存のネット・サービス名またはデータベース・サービスにネットワーク・プロトコルを追加する方法について説明します。
Oracle Net Managerを起動します。
ナビゲータ・ペインで、「ディレクトリ」または「ローカル」メニューから「サービス・ネーミング」を選択します。
ネット・サービス名またはデータベース・サービスのいずれかを選択します。
右ペインには、現行の宛先サービスおよびアドレス・リストが表示されます。
「アドレスの構成」ボックスで、プラス(+)をクリックして、新規アドレスを追加します。
新規の「アドレス」タブが表示されます。
プロトコルを選択し、必要なアドレス情報を入力します。
関連項目: プロトコル・アドレス・パラメータの詳細は、『Oracle Database Net Servicesリファレンス』を参照してください。 |
オプションで、「アドレス」タブ内の「詳細」をクリックし、このセッションにおける送受信操作に必要なI/Oバッファ・スペース制限を「合計送信バッファ・サイズ」および「合計受信バッファ・サイズ」フィールドに指定します。
左矢印ボタンと右矢印ボタンを使用して、プロトコル・アドレスをプロトコル・アドレス・リスト内の適切な場所に配置します。複数のアドレス・オプションが構成されていない場合、リスト先頭のアドレスに対して通信が行われます。
「ファイル」メニューから「ネットワーク構成の保存」を選択します。
データベース・サービスに複数のリスナー・プロトコル・アドレスからアクセスできる場合は、ランダムに選択したり、順番に試行するなど、アドレスの使用順序を指定します。表13-1は、複数のプロトコル・アドレスで使用されるパラメータを示しています。
表13-1 アドレス・リスト・パラメータ
パラメータ | 説明 |
---|---|
複数のアドレス・リスト( 接続記述子を |
|
複数の接続記述子( |
|
|
注意: 接続時フェイルオーバーやをクライアント・ロード・バランシングをソース・ルーティングと併用することはできません。ソース・ルーティングではリスト内の各アドレスに順に接続しますが、接続時フェイルオーバーとクライアント・ロード・バランシングではリストから1つのアドレスを選択します。 |
次の手順では、アドレス・リスト・パラメータを構成する方法について説明します。
「リスナー・プロトコル・アドレスのリスト作成」の手順を実行してください。
Oracle Enterprise ManagerまたはOracle Net Managerを使用して、アドレス・リスト・オプションを構成します。
Oracle Enterprise Managerでは、接続時フェイルオーバーとクライアント・ロード・バランシング・セクションの適切なオプションを選択します。
Oracle Net Managerで、「アドレスの構成」ボックスの「詳細」をクリックします。「アドレス・リスト・オプション」ダイアログ・ボックスが表示されます。適切なオプションを選択します。
表13-2では、アドレス・リスト・オプションについて説明しています。
次の例は、クライアント・ロード・バランシング用に構成されたtnsnames.ora
ファイルです。
sales.us.example.com=
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.example.com)))
次の例は、接続時フェイルオーバー用に構成されたtnsnames.ora
ファイルです。
sales.us.example.com= (DESCRIPTION= (ADDRESS_LIST= (LOAD_BALANCE=off) (FAILOVER=ON) (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))
接続記述子のCONNECT_DATA
セクションは、接続先データベース・サービスを定義します。次の例では、SERVICE_NAME
にsales.us.example.com
というサービスを定義します。
sales.us.example.com= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com)))
サービス名の他にも、オプションで、表13-3に示されるパラメータを使用して、接続データ情報を構成できます。
表13-3 拡張接続データ設定
Oracle Enterprise Manager/Oracle Net Managerオプション | tnsnames.oraファイルのパラメータ | 説明 |
---|---|---|
インスタンス名 |
アクセスするデータベース・インスタンス。インスタンス名は、初期化パラメータ・ファイルの |
|
セッション・データ・ユニット・サイズ(バイト) |
ネットワークを介して送信されるデータ・パケットの転送レート。セッション・データ・ユニット(SDU)サイズを指定して、ネットワークで送信されるパケット関連のパフォーマンス特性を変更します。 |
|
異機種間サービスに使用 |
Oracle Databaseサーバーで異機種間サービスを使用してサード・パーティ・システムにアクセスする場合は、このオプションを |
|
Oracle Rdbデータベースのファイル名。 |
||
Oracle Rdbデータベースで使用するサービスの種類。 |
||
Oracle Rdbデータベース識別子。 |
次の例では、データ・パケットの転送レートを設定しています。
sales.us.example.com=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.example.com)
(SDU=8192)
))
Oracle Enterprise ManagerまたはOracle Net Managerを使用して、ネット・サービス名またはデータベース・サービスの拡張CONNECT_DATA
パラメータを構成します。
Oracle Enterprise Managerを使用した拡張接続記述子パラメータの構成
次の手順では、Oracle Enterprise Managerを使用して拡張接続記述子パラメータを構成する方法について説明します。
次の手順に従って、Oracle Enterprise Managerの「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページにアクセスします。
Oracle Enterprise Managerの「Net Services管理」ページにアクセスします。
「管理」リストから「ローカル・ネーミング」または「ディレクトリ・ネーミング」を選択し、次にディレクトリ・サーバーまたはローカル構成ファイルの場所を選択します。
「実行」をクリックします。
「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページが表示されます。
ディレクトリ・サービス名またはネット・サービス名を選択します。
「ディレクトリ・ネーミング」の場合、簡易検索セクションでネット・サービス名を検索し、「結果」リストからネット・サービスまたはデータベース・サービスを選択し、次に「編集」をクリックします。「ローカル・ネーミング」の場合、リストからネット・サービスを選択し、「編集」をクリックします。
「詳細」タブをクリックします。
必要に応じてフィールドの入力やオプションの選択を行い、「OK」をクリックします。
接続データ情報を更新するには、「OK」をクリックします。
Oracle Net Managerを使用した拡張接続記述子パラメータの構成
次の手順では、Oracle Net Managerを使用して拡張接続記述子パラメータを構成する方法について説明します。
Oracle Net Managerを起動します。
ナビゲータ・ペインで、「ディレクトリ」または「ローカル」メニューから「サービス・ネーミング」を選択します。
ネット・サービス名またはデータベース・サービスのいずれかを選択します。
右ペインには、現行の宛先サービスおよびアドレス・リストが表示されます。
「サービスの識別」ボックスの「詳細」ボタンをクリックします。
「詳細サービス・オプション」ダイアログ・ボックスが表示されます。
必要に応じてフィールドの入力やオプションの選択を行い、「OK」をクリックします。
「ローカル」フォルダに対してこれらの変更を行う場合は、「ファイル」メニューから「ネットワーク構成の保存」を選択します。ディレクトリ・フォルダへの変更は自動的に保存されます。
接続ロード・バランシング機能を利用すると、複数のディスパッチャ間のアクティブな接続数を均衡化することによって、接続時のパフォーマンスが向上します。Oracle Real Application Clusters(Oracle RAC)環境では、接続プール・ロード・バランシングによって、複数のインスタンス間のアクティブな接続数を均衡化することも可能です。
PMONプロセスはリモート・リスナーを登録できるので、リスナーは、すべてのインスタンスおよびディスパッチャを、それらのある場所にかかわらず常に認識できます。リスナーは、着信したクライアント要求の送信先となるインスタンスを、また共有サーバーが構成されている場合は送信先となるディスパッチャを、ロード情報に応じて判別します。
共有サーバー構成では、リスナーは次の順番でディスパッチャを選択します。
ロード量が最小のノード。
ロード量が最小のインスタンス。
そのインスタンスのロード量が最小のディスパッチャ。
専用サーバー構成では、リスナーは次の順番でインスタンスを選択します。
ロード量が最小のノード。
ロード量が最小のインスタンス。
データベース・サービスが複数のノード上に複数のインスタンスを持つ場合、リスナーはロード量が最も少ないノード上にある、ロード量が最も少ないインスタンスを選択します。共有サーバーが構成されている場合、選択したインスタンスの中でロード量が最小のディスパッチャが選択されます。
Oracle Real Application Clusters環境では、各インスタンスのディスパッチャは、他のノード上にある他のリスナーにも相互登録される必要があります。これを行うには、DISPATCHERS
パラメータのLISTENER
属性を使用します。
注意: 接続プール・ロード・バランシングで最適な結果を得るには、同じデータベース・サービスに属するインスタンスを、等価なハードウェアおよびソフトウェア構成上に存在するようにしてください。 |
関連項目:
|
図13-1は、同じサービスsales.us.example.com
の2つのインスタンスsales1
およびsales2
を持つ、Oracle Real Application Clustersの共有サーバー・データベースを示しています。インスタンスsales1
およびsales2
は、コンピュータsales1-server
およびsales2-server
に常駐し、sales1
は1つのディスパッチャ、sales2
は2つのディスパッチャをそれぞれ持ちます。listener
という名前のリスナーは、それぞれノード1および2上で稼働しています。DISPATCHERS
パラメータのlistener
属性が構成され、両方のリスナーに対して情報のサービス登録が可能になっています。
この例では、次のロード情報が登録されます。
各インスタンスの1分当たりのロード量平均は、sales1
の場合600、sales2
の場合400になります。
各インスタンスへの接続数は、sales1
の場合200、sales2
の場合300になります。
各インスタンスへのディスパッチャ接続数は、dispatcher1
の場合200、dispatcher2
の場合100、dispatcher3
の場合200になります。
sales2-server
のロード量平均(400)は、sales1-server
のロード量平均(600)より少なくなります。これは、sales1-server
に必要な処理が多い場合に発生する可能性があります。sales1
への接続数(200)は、その唯一のディスパッチャであるdispatcher1
への接続数と同じです。
sales2
の接続数(300)は、その2つのディスパッチャであるdispatcher2
の接続数(100)とdispatcher3
の接続数(200)の合計になります。したがって、sales2
にはsales1
より多くの接続が存在します。この例では、sales2-server
がロード量が最小のノード、sales2
がロード量が最小のインスタンス、dispatcher2
がロード量が最小のディスパッチャです。
(LISTENER=listeners_sales)
のlisteners_sales
の値は、両方のサーバー上に存在するローカルのtnsnames.ora
ファイルによって、次のように決定します。
listeners_sales= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
環境に応じて、次のような処理が実行されます。次の各処理に付いている番号は、図13-2に示す矢印の番号に対応しています。
PMON プロセスは、インスタンスsales1
およびsales2
を、両方のリスナーに登録します。リスナーは、インスタンスおよびディスパッチャのロード時に動的に更新されます。
クライアントが接続要求を送信します。接続記述子が構成されプロトコル・アドレスが1つ成功するまで、各プロトコル・アドレスがランダムに試行されます。
sales.us.example.com= (DESCRIPTION= (LOAD_BALANCE=on
) (FAILOVER=on
) (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))
sales1-server
上のリスナーがランダムに選択されて、クライアント接続要求を受信します。
sales1-server
上のリスナーは、インスタンスsales1
およびsales2
のロード量を比較します。この比較では、ノードsales1-server
およびsales2-server
上のロード量がそれぞれ考慮されます。sales2-server
のロード量はsales1-server
のロード量より少ないため、リスナーは、sales1-server
よりsales2-server
を選択します。
リスナーは、ディスパッチャdispatcher2
のロード量とdispatcher3
のロード量を比較します。dispatcher2
のロード量はdispatcher3
のロード量より少ないため、リスナーはクライアント接続要求をdispatcher2
にリダイレクトします。
クライアントは、dispatcher2
に直接接続します。
図13-3は、同じサービスsales.us.example.com
の2つのインスタンスsales1
およびsales2
を持つ、Oracle Real Application Clustersの専用サーバー・データベースを示しています。インスタンスsales1
およびsales2
は、それぞれコンピュータsales1-server
およびsales2-server
に常駐します。listener
という名前のリスナーは、それぞれノード1および2上で稼働しています。REMOTE_LISTENER
初期化パラメータが構成され、両方のリスナーに対して情報のサービス登録が可能になっています。
この例では、次のロード情報が登録されます。
sales1-server
の1分当たりのノードのロード量平均は450です。
sales2-server
の1分当たりのノードのロード量平均は200です。
sales1
の接続数は200です。
sales2
の接続数は150です。
(REMOTE_LISTENER=listener_sales1)
のlistener_sales1
の値は、sales2-server
上に存在するローカルのtnsnames.ora
ファイルによって、次のように決定します。
listener_sales1= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)))
(REMOTE_LISTENER=listener_sales2)
のlistener_sales2
の値は、sales1-server
上に存在するローカルのtnsnames.ora
ファイルによって、次のように決定します。
listener_sales2= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
環境に応じて、次のような処理が実行されます。次の各処理に付いている番号は、図13-4に示す矢印の番号に対応しています。
PMON プロセスは、インスタンスsales1
およびsales2
を、両方のリスナーに登録します。リスナーは、インスタンスのロード時に動的に更新されます。
前述の情報では、sales2-server
がロード量が最小のノード、sales2
がロード量が最小のインスタンスです。
クライアントが接続要求を送信します。
接続記述子が構成されプロトコル・アドレスが1つ成功するまで、各プロトコル・アドレスがランダムに試行されます。
sales.us.example.com= (DESCRIPTION= (LOAD_BALANCE=on) (FAILOVER=on) (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))
sales1-server
上のリスナーがランダムに選択されて、クライアント接続要求を受信します。
sales1-server
上のリスナーは、インスタンスsales1
およびsales2
のロード量を比較します。この比較では、ノードsales1-server
およびsales2-server
上のロード量がそれぞれ考慮されます。sales2-server
のロード量はsales1-server
のロード量より少ないため、リスナーは、sales1-server
よりsales2-server
を選択します。
sales1-server
上のリスナーが、クライアント接続要求をsales2-server
のリスナーにリダイレクトします。
クライアントがsale2-server
上のリスナーに接続します。リスナーが専用サーバー・プロセスを開始し、専用サーバー・プロセスがリスナーから接続要求を継承します。
透過的アプリケーション・フェイルオーバー(TAF)は、Oracle Netが失敗した接続を、別のリスナーにフェイルオーバーするように指示します。これによりユーザーは、最初の接続に障害が発生したことを意識せずに、新しい接続で作業を続行できます。
TAFを使用する場合は、ネット・サービス名の構成において接続記述子のCONNECT_DATAセクションにFAILOVER_MODE
パラメータを手動で設定する必要があります。
この項で説明する項目は、次のとおりです。
TAFは、データベース・インスタンスに障害が発生した場合、クライアントが存続しているデータベースに再接続できるようにするクライアント側の機能です。サーバーは通知を使用して、クライアント側でTAFコールバックをトリガーします。
TAFは、クライアント側で指定されたTransparent Network Substrate(TNS)接続文字列、またはサーバー側のサービス属性を使用して構成されます。両方の方法を使用してTAFが構成される場合、サーバー側のサービス属性がクライアント側の設定に優先されます。サーバー側のサービス属性は、TAFの設定で優先されます。
TAFは、セッション・フェイルオーバーと選択フェイルオーバーの2つのモードのいずれかで動作します。セッション・フェイルオーバーは、失われた接続およびセッションを再作成します。選択フェイルオーバーは、処理中だった問合せを再実行します。
障害が発生すると、Oracle Call Interface(OCI)コールバックを使用してクライアント側でコールバック機能が開始されます。これは、標準のOCI接続、および接続プール接続とセッション・プール接続を使用します。
TAFはOracle Data Guardで動作して、自動フェイルオーバーを提供します。TAFは次のデータベース構成を使用して、データベース障害を効果的に隠ぺいします。
Oracle Real Application Clusters
レプリケート・システム
スタンバイ・データベース
シングル・インスタンスのOracle Database
関連項目:
|
TAFは、アクティブなデータベース接続に関連する次の要素の、いくつかまたはすべてを自動的にリストアします。TAFによって接続をリカバリするには、他の要素をアプリケーション・コードに埋め込む必要があることもあります。
クライアント/サーバー・データベース接続: TAFは、同じ接続文字列、またはフェイルオーバーを構成するときに指定する代替接続文字列を使用して、自動的に接続を再確立します。
ユーザーのデータベース・セッション: TAFは、障害発生前と同じユーザーIDで自動的にユーザーをログインします。複数のユーザーが接続を使用していて、これらのユーザーがデータベース・コマンドを処理しようとすると、TAFはこれらのユーザーを自動的にログインします。残念ながら、TAFは他のセッション・プロパティを自動的にリストアできません。これらのプロパティは、コールバック関数をコールすることによりリストアできます。
完了したコマンド: 接続失敗の時点でコマンドが完全に実行され、データベースの状態が変更された場合は、TAFはこのコマンドを再送しません。データベースを変更した可能性があるコマンドに応答してTAFが再接続した場合は、TAFはアプリケーションにエラー・メッセージを発行します。
フェッチに使用されるオープン・カーソル: TAFでは、フェイルオーバー前にカーソルから行のフェッチを開始していたアプリケーションが、フェイルオーバー後も行のフェッチを続行できます。これは選択フェイルオーバーと呼ばれています。これは、同じスナップショットを使用してSELECT
文を再実行し、すでにフェッチした行を廃棄し、最初にフェッチしなかった行を取得することによって実現されます。TAFでは、廃棄した行が最初に戻された行であることを確認するか、またはエラー・メッセージを返します。
アクティブ・トランザクション: TAFはフェイルオーバー後にアクティブ・トランザクションを保つことができないため、障害発生時にはアクティブ・トランザクションはすべてロールバックされます。このため、アプリケーションは、ROLLBACK
が発行されるまでエラー・メッセージを受け取ることになります。
サーバー側プログラム変数: PL/SQLパッケージの状態などのサーバー側プログラム変数は、障害発生時に消失します。TAFはこれらをリカバリできません。これらは、フェイルオーバー・コールバックからコールすることにより初期化できます。
関連項目: 『Oracle Call Interfaceプログラマーズ・ガイド』 |
FAILOVER_MODE
パラメータは、接続記述子のCONNECT_DATA
セクションに含まれている必要があります。FAILOVER_MODE
には、表13-4で説明するパラメータを含めることができます。
表13-4 FAILOVER_MODEパラメータの追加パラメータ
FAILOVER_MODEパラメータ | 説明 |
---|---|
バックアップ接続として使用する別のネット・サービス名。バックアップは、 |
|
DELAY |
次に接続を試みるまでの待機時間(秒数)。 コールバック関数が登録されていると、このパラメータは無視されます。 |
プライマリ・ノードからバックアップ・ノードにフェイルオーバーされる速さの設定。
|
|
RETRIES |
フェイルオーバー後に接続を行う回数。 コールバック関数が登録されていると、このパラメータは無視されます。 |
フェイルオーバーの種類。デフォルトでは、Oracle Call Interface(OCI)アプリケーションに対して、3種類のOracle Netフェイルオーバー機能を利用できます。
|
注意: Oracle Net Managerでは、TAFパラメータはサポートされません。これらのパラメータは、手動で設定する必要があります。 |
TAFは、FAILOVER_MODE
パラメータの設定次第で複数の方法で実装できます。オラクル社では、次の方法をお薦めします。
複数のアドレスについて接続時フェイルオーバーおよびクライアント・ロード・バランシングを行うようにTAFを実装します。次の例では、Oracle Netはsales1-server
またはsales2-server
のいずれかのプロトコル・アドレスにランダムに接続します。接続後にインスタンスに障害が発生した場合は、TAFアプリケーションが他のノードのリスナーにフェイルオーバーし、実行中のSELECT
文があればその文を保持します。
sales.us.example.com= (DESCRIPTION= (LOAD_BALANCE=on) (FAILOVER=on) (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (ADDRESS= (PROTOCOL=tcp) (HOST=sales2-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (FAILOVER_MODE= (TYPE=select) (METHOD=basic))))
TAFでは、RETRIES
およびDELAY
パラメータを使用して、最初の接続試行が失敗した場合に自動的に接続を再試行できます。次の例では、Oracle Netはsales1-server
のリスナーへの再接続を試行します。このフェイルオーバー接続に失敗した場合は、15秒待機してから再び再接続を試行します。Oracle Netは最大20回まで再接続を試行します。
sales.us.example.com= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (FAILOVER_MODE= (TYPE=select) (METHOD=basic) (RETRIES=20) (DELAY=15))))
バックアップ接続は事前に確立できます。初期接続およびバックアップ接続は明示的に指定する必要があります。次の例では、ネット・サービス名sales1.us.example.com
を使用してsales1-server
のリスナーに接続するクライアントが、sales2-server
にも事前接続されます。接続後にsales1-server
に障害が発生した場合は、sales2-server
にフェイルオーバーし、実行中のSELECT
文があればその文を保持します。同様に、sales2-server
のリスナーに、sales2.us.example.com
を使用して接続するクライアントのために、Oracle Netはsales1-server
に事前に接続します。
sales1.us.example.com= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_NAME=sales1) (FAILOVER_MODE= (BACKUP=sales2.us.example.com) (TYPE=select) (METHOD=preconnect)))) sales2.us.example.com= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales2-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_NAME=sales2) (FAILOVER_MODE= (BACKUP=sales1.us.example.com) (TYPE=select) (METHOD=preconnect))))
V$SESSION
ビューでFAILOVER_TYPE
、FAILOVER_METHOD
およびFAILED_OVER
列を問い合せて、TAFが正しく構成されているかを確認できます。問合せを使用して列を表示する例を次に示します。
SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER, COUNT(*) FROM V$SESSION GROUP BY MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER;
フェイルオーバー前の出力は次のようになります。
MACHINE FAILOVER_TYPE FAILOVER_M FAI COUNT(*) -------------------- ------------- ---------- --- ---------- sales1 NONE NONE NO 11 sales2 SELECT PRECONNECT NO 1
フェイルオーバー後の出力は次のようになります。
MACHINE FAILOVER_TYPE FAILOVER_M FAI COUNT(*) -------------------- ------------- ---------- --- ---------- sales2 NONE NONE NO 10 sales2 SELECT PRECONNECT YES 1
注意: TAFの各ステップは、適切に構成されたOCI TAF CALLBACK ファンクションを使用して監視できます。 |
INSTANCE_ROLE
パラメータは、接続記述子のCONNECT_DATA
セクションのオプションのパラメータです。これを使用すると、Oracle Real Application Clusters構成のプライマリまたはセカンダリ・インスタンスへの接続を指定できます。
このパラメータは次の場合に役立ちます。
プライマリまたはセカンダリ・インスタンスに明示的に接続する場合。デフォルトはプライマリ・インスタンスです。
TAFを使用してセカンダリ・インスタンスに事前に接続する場合。
INSTANCE_ROLE
パラメータは次の値をサポートします。
primary
: プライマリ・インスタンスへの接続を指定します。
secondary
: セカンダリ・インスタンスへの接続を指定します。
any
: プライマリ・インスタンス・ロールかセカンダリ・インスタンス・ロールかにかかわらず、ロード量が最小のインスタンスへの接続を指定します。
次のtnsnames.ora
ファイルの例では、ネット・サービス名sales_primary
がプライマリ・インスタンスへの接続を使用可能にします。また、ネット・サービス名sales_secondary
がセカンダリ・インスタンスへの接続を使用可能にします。
sales_primary= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (ADDRESS= (PROTOCOL=tcp) (HOST=sales2-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_ROLE=primary))) sales_secondary= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (ADDRESS= (PROTOCOL=tcp) (HOST=sales2-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_ROLE=secondary)))
Oracle Enterprise Managerおよびその他のシステム管理製品が、管理タスクを実行するロールにかかわらず、特定のインスタンスに接続する必要がある場合があります。このような接続の場合は、(INSTANCE_NAME=
instance_name
)および(
INSTANCE_ROLE=any
)を構成して、ロールにかかわらずインスタンスに接続します。
次の例では、ネット・サービス名sales1
によってsales1-server
のインスタンスへの接続が可能になります。また、sales2
によってsales2-server
のインスタンスへの接続が可能になります。(SERVER=dedicated)
は、専用サーバー接続を強制するために指定します。
sales1= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_ROLE=any) (INSTANCE_NAME=sales1) (SERVER=dedicated))) sales2= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales2-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_ROLE=any) (INSTANCE_NAME=sales2) (SERVER=dedicated)))
注意: フェイルオーバーは前の設定と互換性がありません。 |
TAFが構成された場合、セカンダリ・インスタンスにバックアップ接続を事前に確立できます。初期接続およびバックアップ接続は明示的に指定する必要があります。次の例では、Oracle Netがsales1-server
のリスナーに接続し、セカンダリ・インスタンスのsales2-server
に事前に接続します。接続後にsales1-server
に障害が発生した場合は、TAFアプリケーションがセカンダリ・インスタンスのsales2-server
にフェイルオーバーし、実行中のSELECT
文があればその文を保持します。
sales1.example.com= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales1-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_ROLE=primary)(FAILOVER_MODE=
(BACKUP=sales2.example.com)
(TYPE=select)
(METHOD=preconnect))
)) sales2.example.com= (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp) (HOST=sales2-server) (PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com) (INSTANCE_ROLE=secondary)))
次の項目では、サード・パーティ・データベース・サービスへの接続の構成方法を説明します。
外部プロシージャは、別のプログラムからコールされる、異なる言語で記述されたプロシージャです。特定目的の処理実行に必要な1つ以上のCルーチンをコールするPL/SQLプログラムは、その一例です。
アプリケーションが外部プロシージャをコールすると、Oracle Databaseはextproc
という名前の外部プロシージャ・エージェントを開始します。Oracle Databaseによって確立されたネットワーク接続を使用して、アプリケーションがエージェントに次の情報を渡します。
DLLまたは共有ライブラリの名前
外部プロシージャ名
任意のパラメータ
次に、エージェントはDLLや共有ライブラリをロードして外部プロシージャを実行し、外部プロシージャから戻された値をアプリケーションに戻します。エージェントは、外部プロシージャをコールするアプリケーションと同じコンピュータに常駐している必要があります。
外部プロシージャのデフォルト構成を使用する場合、extproc
エージェントはOracle Databaseによって直接生成されます。listener.ora
またはtnsnames.ora
に必要な構成の変更はありません。ただし、ORACLE_HOME/hs/admin
ディレクトリにあるextproc.ora
ファイルの外部プロシージャで使用される環境変数を定義する必要があります。外部プロシージャのデフォルトの構成を使用しない場合は、表13-5に示すパラメータを設定する必要があります。
表13-5 listener.oraファイルの外部プロシージャ設定
注意: 外部プロシージャのデフォルト構成では、ネットワーク・リスナーがOracle Databaseおよびextproc エージェントを使用する必要はありません。extproc エージェントはOracle Databaseによって直接生成されるため、Oracleリスナーによって予期せずextproc が生成される恐れはありません。最大限のセキュリティを確保するため、このデフォルト構成が推奨されています。
外部プロシージャのデフォルト構成を変更し、Oracleリスナーによって 次のものを使用する場合、Oracleリスナーによって
|
外部プロシージャのデフォルト構成を変更し、旧リリースのOracle Databaseに類似したリスナーによってextproc
エージェントを生成できます。
例13-1では、listener.ora
ファイルの構成例を示します。
例13-1 外部プロシージャを設定したlistener.oraファイル
LISTENER= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcp)(HOST=sale-server)(PORT=1521)) (ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (GLOBAL_DBNAME=sales.us.example.com) (ORACLE_HOME=/oracle) (SID_NAME=sales)) (SID_DESC= (SID_NAME=plsextproc) (ORACLE_HOME=/oracle) (PROGRAM=extproc)))
例13-2では、tnsnames.ora
ファイルの構成例を示します。
例13-2 外部プロシージャを設定したtnsnames.oraファイル
EXTPROC_CONNECTION_DATA= (DESCRIPTION= (ADDRESS=(PROTOCOL=ipc)(KEY=extproc)
) (CONNECT_DATA=(SID=plsextproc)
))
外部プロシージャのデフォルト構成を変更するには、外部プロシージャを処理するための別のリスナーまたは既存のリスナーを構成および実行します。次の手順では、デフォルトの構成を変更する方法について説明します。
Oracle Net Configuration Assistantを使用して、外部プロシージャを処理するための既存のリスナーを構成します。ほとんどのインストールの場合、次に示すようにこのリスナーの名前はLISTENER
です。
Oracle Enterprise ManagerのOracle Netの管理ページにアクセスします。
「管理」リストから「リスナー」を選択し、構成ファイルの場所を含むOracleホームを選択します。
「実行」をクリックします。
「リスナー」ページが表示されます。
Oracle Net Configuration Assistantによって生成された既存のリスナーを選択し、「編集」をクリックします。
リスナーの編集ページが表示されます。
アドレス・セクションで外部プロシージャのプロトコル・アドレスを選択し、「追加」をクリックします。
「その他のサービス」タブをクリックします。
外部プロシージャのサービス情報を表す行を選択し、「追加」をクリックします。
表13-5
に示されるパラメータを含めたextproc
に関するサービス情報を、listener.oraファイルに追加します。
外部プロシージャを処理するための別のリスナーを構成および実行するには、Oracle Net Configuration Assistantを使用して別のリスナーの外部プロシージャ・エントリを削除します。次の手順では、新しいリスナーを作成する方法について説明します。
次のように、外部プロシージャを排他的に処理するリスナーを作成します。
「リスナー」ページにナビゲートします。
「作成」をクリックします。
「リスナーを作成」ページが表示されます。
一意のリスナー名を「リスナー名」フィールドに入力します(「リスナー名」フィールドにLISTENEREXTPROC
など)。
アドレス・セクションに、次のようにIPCプロトコル・アドレスを構成します。
「追加」をクリックします。
「アドレスの追加」ページが表示されます。
「プロトコル」リストからIPCを選択します。
「キー」フィールドに、extproc
のキー値を入力します。
「OK」をクリックします。
次のように、表13-5
に示されるパラメータを含めたextproc
に関するサービス情報を、listener.oraファイルに追加します。
「その他のサービス」タブをクリックします。
「追加」をクリックします。
「その他のサービスの作成」ページが表示されます。
次の値をフィールドに入力します。
extproc
を「プログラム名」フィールドに。
extproc
実行ファイルが存在するOracleホームを「Oracleホーム・ディレクトリ」フィールドに。
extproc
などのシステム識別子を「SID」フィールドに。
環境変数セクションで、「行の追加」をクリックします。
EXTPROC_DLLS
環境変数を「名前」フィールドに、DLLのディレクトリ・パスとファイル名を「値」フィールドに入力します。
「OK」をクリックします。
「リスナーを作成」ページが表示されます。
「OK」をクリックしてリスナーを追加します。
リスナーが「リスナー」ページに追加されます。
listener.ora
ファイルの外部プロシージャに関する情報は、次の出力のように更新されます。
LISTENEREXTPROC= (DESCRIPTION= (ADDRESS= (PROTOCOL=ipc)(KEY=extproc))) SID_LIST_LISTENEREXTPROC= (SID_LIST= (SID_DESC= (PROGRAM=extproc) (ENVS="EXTPROC_DLLS=ONLY:/home/xyz/mylib.so:/home/abc/urlib.so, LD_LIBRARY_PATH=/private/xpm/lib:/private/mylibs, MYPATH=/usr/ucb:/usr/local/packages,APL_ENV_FILE=/apl/conf/env.txt") (SID_NAME=extproc) (ORACLE_HOME=/oracle)))
oracle
ユーザーより低い権限のユーザー・アカウントから、外部プロシージャのリスナーを起動します。
このユーザー・アカウントに、oracle
ユーザーが所有するファイルへのアクセス権がないことを確認します。具体的には、このユーザーは、データベース・ファイルまたはOracleサーバーのアドレス空間に対する読取り権限または書込み権限を持つことはできません。さらに、このユーザーには、listener.ora
ファイルに対する読取り権限が必要ですが、書込み権限を持つことはできません。
低い権限でリスナーを実行することによって、リスナー制御のSET
コマンドを使用せずに、listener.ora
ファイルにあるこのリスナーの構成を変更できます。このため、オラクル社では、リスナーの実行前にlistener.ora
ファイルの構成を完了することをお薦めします。
関連項目:
|
異機種間サービスは、Oracle Databaseサーバー内に統合されたコンポーネントで、Oracle Databaseサーバーからサードパーティ・システムにアクセスする汎用的なテクノロジを提供するものです。異機種間サービスを使用すると、次のことが可能になります。
Oracle SQLを使用して、Oracle Databaseサーバーに存在するデータと同じように、サード・パーティ・システムに格納されているデータに透過的にアクセスすること
Oracleプロシージャ・コールを使用して、Oracle分散環境からサード・パーティのシステム、サービスまたはApplication Program Interface(API)に透過的にアクセスすること
異機種間サービスはOracle Databaseサーバーで汎用的なテクノロジを提供しますが、特定のサード・パーティ・システムにアクセスするには異機種間サービス・エージェントが必要です。
サード・パーティ・システムへの接続を開始する際、Oracle Databaseサーバーはゲートウェイ上のリスナーを介してエージェント・プロセスを起動します。次の手順では、Oracle Databaseサーバーがエージェントに接続できるように設定する方法について説明します。
ゲートウェイ上のリスナーが、Oracle Databaseサーバーから受信した要求をリスニングし、異機種間サービス・エージェントを起動するように構成します。このために、次のパラメータをlistener.ora
ファイルに構成します。
Oracle Enterprise Managerで、PROGRAM
、ORACLE_HOME
およびSID
パラメータを構成します。
Oracle Enterprise ManagerのOracle Netの管理ページにアクセスします。
「管理」リストから「リスナー」を選択し、構成ファイルの場所を含むOracleホームを選択します。
「実行」をクリックします。
「リスナー」ページが表示されます。
Oracle Net Configuration Assistantによって生成されたリスナーを選択し、「編集」をクリックします。
リスナーの編集ページが表示されます。
アドレス・セクションで外部プロシージャのプロトコル・アドレスを選択し、「削除」をクリックします。
「その他のサービス」タブをクリックします。
「追加」をクリックします。
「その他のサービスの作成」ページが表示されます。
ゲートウェイの作成で実行するプログラム名を「プログラム名」フィールドに、実行可能エージェントが存在するOracleホームを「Oracleホーム・ディレクトリ」フィールドに、サードパーティ・システムのSIDまたはサービス名を「SID」フィールドに入力します。
「OK」をクリックします。
リスナーの編集ページが表示されます。
「OK」をクリックしてリスナーを変更します。
「リスナー」ページが表示されます。
listener.ora
ファイルの異機種間サービスに関する情報は次のように更新されます。
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=sybasegw) (ORACLE_HOME=/oracle11g) (PROGRAM=tg4sybs)))
Oracle Databaseが存在するコンピュータで、ゲートウェイ上のリスナーに接続するネット・サービス名を設定します。接続で異機種間サービスを利用できるように、次のように接続記述子にHS=ok
句を設定する必要があります。
Oracle Databaseサーバーからサードパーティ・システムへの接続に使用するネット・サービス名を作成します。
関連項目: ローカル・ネーミングの方法については、タスク1「ネット・サービス名の構成」、ディレクトリ・ネーミングの方法については、タスク2「ネット・サービス名のディレクトリへの作成」を参照してください。 |
Oracle Enterprise ManagerまたはOracle Net Managerのいずれかを使用して、HS=ok
を構成します。
「OK」をクリックして変更を確認します。
tnsnames.ora
ファイルでは、異機種間サービス用に構成された新規ネット・サービス名が次のように更新されます。
sybase_gtw=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=gate-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sybasegw)
)
(HS=ok)))
)
関連項目: 『Oracle Database Heterogeneous Connectivity管理者ガイド』 |
Oracle Rdbは、Digitalの64ビット・オペレーティング・システムで使用されるデータベースです。Oracle Rdbには独自のリスナーがあるため、クライアントはOracle Databaseと通信する場合と同じようにOracle Rdbと通信できます。
Oracle Rdbとの接続を開始するために、表13-6に示されるパラメータを使用して、Oracle Rdbデータベースに接続するネット・サービス名を設定します。
表13-6 接続記述子でのOracle Rdbデータベース設定
Oracle Enterprise Managerのフィールド | tnsnames.oraファイルのパラメータ | 説明 |
---|---|---|
Oracle Rdbデータベースのファイル名。 |
||
Oracle RDBデータベースで使用するサービスのタイプ。これは、Rdbインタフェース・ツールで使用されます。アプリケーションがOracle RdbサービスとOracle Databaseサービスの両方をサポートし、アプリケーションがこの両方のサービス間でロード・バランシングを実行する場合にのみ、この機能を使用する必要があります。 |
||
Oracle Rdbデータベース。オプション。 |
次の手順では、Oracle Rdbデータベースのクライアントを構成する方法について説明します。
Oracleサーバーからサードパーティ・システムへの接続に使用するネット・サービス名を作成します。
関連項目: ローカル・ネーミングの方法については、タスク1「ネット・サービス名の構成」、ディレクトリ・ネーミングの方法については、タスク2「ネット・サービス名のディレクトリへの作成」を参照してください。 |
Oracle Enterprise ManagerまたはOracle Net Managerを使用して、Oracle Rdbパラメータを設定します。
Oracle Enterprise Managerの場合は、「Net Services管理」ページから「ローカル・ネーミング」を選択し、「CREATE LIKE」を選択し、次に「ネット・サービス名の作成」ページの「詳細」タブをクリックしてください。
Oracle Net Managerでは、「サービスの識別」セクションの「詳細」をクリックします。「詳細サービス・オプション」ダイアログ・ボックスが表示されます。
「Rdbデータベース」フィールドにOracle Rdbデータベースのファイル名を入力します。
オプションの「グローバル・データベース名」フィールドにグローバル・データベース名を入力し、必要な場合は「サービスのタイプ」フィールドにサービスの種類を指定して、「OK」をクリックします。
tnsnames.ora
ファイルでは、Oracle Rdbデータベースのために構成された新規ネット・サービス名が次のように更新されます。
alpha5= (DESCRIPTION= (ADDRESS=...) (CONNECT_DATA= (SERVICE_NAME=generic) (RDB_DATABASE=[.mf]mf_personnel.rdb) (GLOBAL_NAME=alpha5)))
次の例では、TYPE_OF_SERVICE
が、Oracle Rdbデータベース・サービスとOracle Databaseサービスのロード・バランシング用に使用されています。
alpha5= (DESCRIPTION_LIST= (DESCRIPTION= (ADDRESS=...) (CONNECT_DATA= (SERVICE_NAME=generic) (RDB_DATABASE=[.mf]mf_personnel.rdb) (GLOBAL_NAME=alpha5))) (DESCRIPTION= (ADDRESS=...) (CONNECT_DATA= (SERVICE_NAME=sales.us.example.com)) (TYPE_OF_SERVICE=oracle_database))