この章では、拡張接続データ・パラメータ、ロード・バランシング、フェイルオーバーおよび非データベース・サービスへの接続など、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の「Net Services管理」ページにアクセスします。
「管理」リストから「ローカル・ネーミング」または「ディレクトリ・ネーミング」を選択し、次にディレクトリ・サーバーまたはローカル構成ファイルの場所を選択します。
「実行」をクリックします。
「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページが表示されます。
ディレクトリ・サービス名またはネット・サービス名を選択します。
「ディレクトリ・ネーミング」の場合、簡易検索セクションでネット・サービス名を検索し、「結果」リストからネット・サービスまたはデータベース・サービスを選択し、次に「編集」をクリックします。「ローカル・ネーミング」の場合、リストからネット・サービスを選択し、「編集」をクリックします。
アドレス・セクションで、「追加」をクリックします。
「アドレスの追加」ページが表示されます。
「プロトコル」リストからリスナーがリスニングするように構成されているプロトコルを選択します。このプロトコルも、クライアント上にインストールする必要があります。
提供されたフィールドで選択したプロトコルに対して適切なパラメータ情報を入力します。
オプションで、拡張パラメータ・セクションを使用して、このセッションにおける送受信操作に必要なI/Oバッファ・スペース制限を「合計送信バッファ・サイズ」および「合計受信バッファ・サイズ」フィールドに指定します。
「OK」をクリックします。
プロトコル・アドレスは、アドレス・セクションに追加されます。
アドレス情報を更新するには、「OK」をクリックします。
Oracle Net Manager
Oracle Net Managerを起動します。
ナビゲータ・ペインで、「ディレクトリ」または「ローカル」→「サービス・ネーミング」を展開します。
ネット・サービス名またはデータベース・サービスのいずれかを選択します。
右ペインには、現行の宛先サービスおよびアドレス・リストが表示されます。
「アドレスの構成」ボックスで、プラス(+)をクリックして、新規アドレスを追加します。
新規の「アドレス」タブが表示されます。
プロトコルを選択し、必要なアドレス情報を入力します。
オプションで、「アドレス」タブ内の「詳細」をクリックし、このセッションにおける送受信操作に必要なI/Oバッファ・スペース制限を「合計送信バッファ・サイズ」および「合計受信バッファ・サイズ」フィールドに指定します。
左矢印ボタンと右矢印ボタンを使用して、プロトコル・アドレスをプロトコル・アドレス・リスト内の適切な場所に配置します。複数のアドレス・オプションが構成されていない場合、リスト先頭のアドレスに対して通信が行われます。
「ローカル」フォルダに対してこれらの変更を行う場合は、「ファイル」→「ネットワーク構成の保存」を選択します。
データベース・サービスに複数のリスナー・プロトコル・アドレスからアクセスできる場合は、アドレスの使用順序を指定します。アドレスはランダムに選択することも、連続的に接続を試行することもできます。
1つのネット・サービス名またはデータベース・サービスに複数のプロトコル・アドレスが構成されている場合は、表13-1に示されるパラメータを構成できます。
表13-1 アドレス・リスト・パラメータ
パラメータ | 説明 |
---|---|
|
|
複数のアドレス・リスト( 重要: 接続記述子を |
|
複数の接続記述子( |
注意: クライアント・ロード・バランシングや接続時フェイルオーバーをソース・ルーティングと併用することはできません。接続時フェイルオーバーとクライアント・ロード・バランシングではリストから1つのアドレスを選択しますが、ソース・ルーティングではリスト内の各アドレスに順に接続します。 |
ソース・ルーティングには別の構成が必要となりますが、この項では取り上げません。
接続時フェイルオーバーまたはクライアント・ロード・バランシングを構成するには、次の手順に従います。
「リスナー・プロトコル・アドレスのリスト作成」の手順を実行してください。
Oracle Enterprise ManagerまたはOracle Net Managerのいずれかを使用して、アドレス・リスト・オプションを構成します。
Oracle Enterprise Managerでは、接続時フェイルオーバーとクライアント・ロード・バランシング・セクションの適切なオプションを選択します。
Oracle Net Managerで、「アドレスの構成」ボックスの「詳細」をクリックします。「アドレス・リスト・オプション」ダイアログ・ボックスが表示されます。適切なオプションを選択します。
表13-2では、アドレス・リスト・オプションについて説明しています。
表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ファイルのパラメータ | 説明 |
---|---|---|
「インスタンス名」 |
アクセスするデータベース・インスタンスを識別するために使用します。 インスタンス名は、初期化パラメータ・ファイルの 注意: 「Oracle8リリース8.0互換識別子を使用」が選択されている場合は、このパラメータを使用できません。 関連項目: 「接続記述子の理解」 |
|
「セッション・データ・ユニット・サイズ(バイト)」 |
ネットワークを介して送信されるデータ・パケットの転送レートを最適化するには、セッション・データ・ユニット(SDU)・サイズを指定して、ネットワークで送信されるパケット関連のパフォーマンス特性を変更します。 関連項目: 「セッション・データ・ユニットの構成」 |
|
「異機種間サービスに使用」 |
Oracleデータベース・サーバーで異機種間サービスを使用して非Oracleシステムにアクセスする場合は、このオプションをオンにします。 |
|
「Oracle Rdb設定」 |
|
|
Oracle Rdbデータベースのファイル名を指定します。 |
||
Oracle Rdbデータベースで使用するサービスの種類を指定します。 |
||
Oracle Rdbデータベースを識別するために使用します。 |
ネット・サービス名またはデータベース・サービスの拡張CONNECT_DATA
パラメータを構成するには、次の手順に従います。
既存のネット・サービス名やデータベース・サービスにネットワーク・プロトコル・アドレスを追加するには、Oracle Enterprise ManagerまたはOracle Net Managerのいずれかを使用します。
Oracle Enterprise Manager
Oracle Enterprise Managerの「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページにアクセスします。
Oracle Enterprise Managerの「Net Services管理」ページにアクセスします。
「管理」リストから「ローカル・ネーミング」または「ディレクトリ・ネーミング」を選択し、次にディレクトリ・サーバーまたはローカル構成ファイルの場所を選択します。
「実行」をクリックします。
「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページが表示されます。
ディレクトリ・サービス名またはネット・サービス名を選択します。
「ディレクトリ・ネーミング」の場合、簡易検索セクションでネット・サービス名を検索し、「結果」リストからネット・サービスまたはデータベース・サービスを選択し、次に「編集」をクリックします。「ローカル・ネーミング」の場合、リストからネット・サービスを選択し、「編集」をクリックします。
「詳細」タブをクリックします。
必要に応じてフィールドの入力やオプションの選択を行い、「OK」をクリックします。
接続データ情報を更新するには、「OK」をクリックします。
Oracle Net Manager
Oracle Net Managerを起動します。
ナビゲータ・ペインで、「ディレクトリ」または「ローカル」→「サービス・ネーミング」を展開します。
ネット・サービス名またはデータベース・サービスのいずれかを選択します。
右ペインには、現行の宛先サービスおよびアドレス・リストが表示されます。
「サービスの識別」ボックスの「詳細」ボタンをクリックします。
「詳細サービス・オプション」ダイアログ・ボックスが表示されます。
必要に応じてフィールドの入力やオプションの選択を行い、「OK」をクリックします。
「ローカル」フォルダに対してこれらの変更を行う場合は、「ファイル」→「ネットワーク構成の保存」を選択します。
接続ロード・バランシング機能を利用すると、複数のディスパッチャ間のアクティブな接続数を均衡化することによって、接続時のパフォーマンスが向上します。Oracle Real Application Clusters環境では、接続プール・ロード・バランシングによって、複数のインスタンス間のアクティブな接続数を均衡化することも可能です。
PMONプロセスはリモート・リスナーを登録できるので、リスナーは、すべてのインスタンスおよびディスパッチャを、それらのある場所にかかわらず常に認識できます。リスナーは、着信したクライアント要求の送信先となるインスタンスを、また共有サーバーが構成されている場合は送信先となるディスパッチャを、ロード情報に応じて判別します。
共有サーバー構成では、リスナーは次の順序でディスパッチャを選択します。1)最小負荷のノード、2)最小負荷のインスタンス、3)そのインスタンスに対する最小負荷のディスパッチャ。専用サーバー構成では、リスナーは次の順序でインスタンスを選択します。1)最小負荷ノード、2)最小負荷インスタンス。
データベース・サービスが複数のノード上に複数のインスタンスを持つ場合、リスナーはロード量が最も少ないノード上にある、ロード量が最も少ないインスタンスを選択します。共有サーバーが構成されている場合、選択したインスタンスの中でロード量が最小のディスパッチャが選択されます。
Oracle9i Real Application Clusters環境では、各インスタンスのディスパッチャは、他のノード上にある他のリスナーにも相互登録される必要があります。これを行うには、DISPATCHERS
パラメータのLISTENER
属性を使用します。
関連項目:
|
注意: 接続プール・ロード・バランシングで最適な結果を得るには、同じデータベース・サービスに属するインスタンスを、等価なハードウェアおよびソフトウェア構成上に存在するようにしてください。 |
この項では、次の2つの例を示しています。
図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
属性が構成され、両方のリスナーに対して情報のサービス登録が可能になっています。
(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分当たりのロード量平均は、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
がロード量が最小のディスパッチャです。
クライアントが接続要求を送信します。
接続記述子が構成されプロトコル・アドレスが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
パラメータが構成され、両方のリスナーに対して情報のサービス登録が可能になっています。
(REMOTE_LISTENER=listener_sales2)
のlistener_sales2
の値は、sales1-server
上に存在するローカルのtnsnames.ora
ファイルによって、次のように決定します。
listener_sales2= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
(REMOTE_LISTENER=listener_sales1)
のlistener_sales1
の値は、sales2-server
上に存在するローカルのtnsnames.ora
ファイルによって、次のように決定します。
listener_sales1= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)))
環境に応じて、次のような処理が実行されます。次の各処理に付いている番号は、図13-4に示す矢印の番号に対応しています。
PMON プロセスは、インスタンスsales1
およびsales2
を、両方のリスナーに登録します。リスナーは、インスタンスのロード時に動的に更新されます。表13-4のロード情報が登録されます。
表13-4 リスナーが更新される際のインスタンスのロード情報
サーバーまたはインスタンス | 1分当たりのノードのロード量平均 | インスタンスへの接続数 |
---|---|---|
sales1-server |
450 |
|
sales2-server |
200 |
|
sales1 |
|
200 |
sales2 |
|
150 |
表13-4では、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は、クライアント側で指定されたTNS接続文字列、またはサーバー側のサービス属性を使用して構成されます。ただし、両方の方法を使用してTAFが構成される場合、サーバー側のサービス属性がクライアント側の設定に優先されます。サーバー側のサービス属性は、TAFの設定で優先されます。
TAFは、セッション・フェイルオーバーと選択フェイルオーバーの2つのモードのいずれかで動作します。 セッション・フェイルオーバーは、失われた接続およびセッションを再作成します。選択フェイルオーバーは、処理中だった問合せを再実行します。
障害が発生すると、OCIコールバックを使用してクライアント側でコールバック機能が開始されます。これは、標準のOCI接続、および接続プール接続とセッション・プール接続を使用します。コールバック、接続プールおよびセッション・プールの詳細は、OCIのマニュアルを参照してください。
TAFはRACを使用します。詳細および推奨構成は、『Oracle Real Application Clusters管理者ガイド』を参照してください。
TAFはPhysical Data Guardで動作して、自動フェイルオーバーを提供します。
TAFは、アクティブなデータベース接続に関連する次の要素の、いくつかまたはすべてを自動的にリストアします。ただし、TAFによって接続をリカバリするには、他の要素をアプリケーション・コードに埋め込む必要があることもあります。
TAFは、障害発生前と同じユーザーIDで自動的にユーザーをログインします。複数のユーザーが接続を使用していて、これらのユーザーがデータベース・コマンドを処理しようとすると、TAFはこれらのユーザーを自動的にログインします。残念ながら、TAFは他のセッション・プロパティを自動的にリストアできません。ただし、これらのプロパティは、コールバック関数をコールすることによりリストアできます。
接続失敗の時点でコマンドが完全に実行され、データベースの状態が変更された場合は、TAFはこのコマンドを再送しません。データベースを変更した可能性があるコマンドに応答してTAFが再接続した場合は、TAFはアプリケーションにエラー・メッセージを発行します。
TAFは、フェイルオーバー前にカーソルからの行のフェッチを開始したアプリケーションが、フェイルオーバー後に行のフェッチを継続することを可能にします。これは検索フェイルオーバーと呼ばれます。これは、同じスナップショットを使用してSELECT
文を再度実行し、すでにフェッチされた行を廃棄し、最初フェッチされなかった行を取得することにより行われます。TAFは、廃棄された行が最初に戻された行であることを確認し、そうでない場合はエラー・メッセージを返します。
TAFはフェイルオーバー後にアクティブ・トランザクションを保つことができないため、障害発生時にはアクティブ・トランザクションはすべてロールバックされます。このため、アプリケーションは、ROLLBACK
が発行されるまでエラー・メッセージを受け取ることになります。
TAFは次のデータベース構成を使用して、データベース障害を効果的に隠ぺいします。
Oracle Real Application Clusters
レプリケート・システム
スタンバイ・データベース
シングル・インスタンスのOracleデータベース
FAILOVER_MODE
パラメータは、接続記述子のCONNECT_DATA
セクションに含まれている必要があります。FAILOVER_MODE
には、表13-5で説明するサブパラメータを含めることができます。
表13-5 FAILOVER_MODEパラメータのサブパラメータ
FAILOVER_MODEサブパラメータ | 説明 |
---|---|
バックアップ接続として別のネット・サービス名を指定します。バックアップは、 |
|
フェイルオーバーの種類を指定します。デフォルトでは、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が正しく構成されているかを確認できます。
V$SESSION
ビューを使用して、接続されたクライアントおよびクライアントのTAFステータスに関する情報を取得します。たとえば次のSQL文のように、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
: プライマリ・インスタンス・ロールかセカンダリ・インスタンス・ロールかにかかわらず、ロード量が最小のインスタンスへの接続を指定します。
次の例では、ネット・サービス名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=sales2) (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)))
次の項目では、非Oracleデータベース・サービスへの接続の構成方法を説明します。
外部プロシージャは、別のプログラムからコールされる、異なる言語で記述されたプロシージャです。特定目的の処理実行に必要な1つ以上のCルーチンをコールするPL/SQLプログラムは、その一例です。
アプリケーションが外部プロシージャをコールすると、Oracle Databaseはextproc
という名前の外部プロシージャ・エージェントを開始します。Oracle Databaseによって確立されたネットワーク接続を使用して、アプリケーションがエージェントに次の情報を渡します。
DLLまたは共有ライブラリの名前
外部プロシージャ名
任意のパラメータ
次に、エージェントはDLLや共有ライブラリをロードして外部プロシージャを実行し、外部プロシージャから戻された値をアプリケーションに戻します。
エージェントは、外部プロシージャをコールするアプリケーションと同じコンピュータに常駐している必要があります。
注意: 外部プロシージャのデフォルト構成では、ネットワーク・リスナーがOracle Databaseおよび extproc エージェントを使用する必要はありません。extproc エージェントはOracle Databaseによって直接生成されるため、Oracleリスナーによって予期せずextprocが生成される恐れはありません。最大限のセキュリティを確保するため、このデフォルト構成が推奨されています。
外部プロシージャのデフォルト構成を変更し、Oracleリスナーによって 次のものを使用する場合、Oracleリスナーによって
|
外部プロシージャのデフォルト構成を使用する場合、extproc
エージェントはOracle Databaseによって直接生成されます。listener.ora
またはtnsnames.ora
に必要な構成の変更はありません。
外部プロシージャのデフォルト構成を使用する場合、外部プロシージャで使用される環境変数を、$ORACLE_HOME/hs/admin
ディレクトリ(UNIXオペレーティング・システムの場合)または%ORACLE_HOME%\hs\admin
ディレクトリ(Windowsの場合)にあるextproc.ora
ファイルで定義します。
外部プロシージャのデフォルト構成を変更し、旧リリースのOracle Databaseに類似したリスナーによってextproc
エージェントを生成できます。
このためには、デフォルト構成を次のように変更します。
外部プロシージャを処理するための別のリスナーまたは既存のリスナーを構成および実行します。
Oracle Net Configuration Assistantは、データベース・サーバーのインストール時に、データベースと外部プロシージャの両方の接続を受け入れるようにリスナーを構成します。さらに、Oracle Net Configuration Assistantは、データベース・サーバーのtnsnames.ora
ファイルに外部プロシージャのネット・サービス名を構成します。外部プロシージャ・エージェントでロードできるのは、ORACLE_HOME
のbin
ディレクトリまたはlib
ディレクトリからのDLLのみです。
例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)))
リスナーによって生成されたextproc
エージェントは、リスナーのオペレーティング・システム権限を継承します。そのため、別のリスナーを構成する場合、データベースのリスナーのオペレーティング・システム権限よりも低い権限で実行します。
extproc
エージェントがロードできるDLLは、listener.ora
ファイルに明示的にリストして制限します。
作業の詳細は次のとおりです。
外部プロシージャのデフォルト構成を変更するには、外部プロシージャを処理するための別のリスナーまたは既存のリスナーを構成および実行します。
外部プロシージャを処理するための既存のリスナーを構成するには、既存のリスナーを選択し、Oracle Net Configuration Assistantを使用してこれを構成します。
ほとんどのインストールの場合、このリスナーの名前はLISTENER
です。
Oracle Enterprise ManagerのOracle Netの管理ページにアクセスします。
「管理」リストから「リスナー」を選択し、構成ファイルの場所を含むOracleホームを選択します。
「実行」をクリックします。
「リスナー」ページが表示されます。
Oracle Net Configuration Assistantによって生成された既存のリスナーを選択し、「編集」をクリックします。
リスナーの編集ページが表示されます。
アドレス・セクションで外部プロシージャのプロトコル・アドレスを選択し、「追加」をクリックします。
「その他のサービス」タブをクリックします。
外部プロシージャのサービス情報を表す行を選択し、「追加」をクリックします。
表13-6に示されるパラメータを含めたextprocに関するサービス情報を、listener.oraファイルに追加します。
外部プロシージャを処理するための別のリスナーを構成および実行するには、Oracle Net Configuration Assistantを使用して別のリスナーの外部プロシージャ・エントリを削除します。
外部プロシージャを排他的に処理する別のリスナーを作成します。
「リスナー」ページにナビゲートします。
「作成」をクリックします。
「リスナーを作成」ページが表示されます。
一意のリスナー名を「リスナー名」フィールドに入力します(「リスナー名」フィールドにLISTENEREXTPROC
など)。
アドレス・セクションに、IPCプロトコル・アドレスを構成します。
「追加」をクリックします。
「アドレスの追加」ページが表示されます。
「プロトコル」リストからIPCを選択します。
「キー」フィールドに、extproc
のキー値を入力します。
「OK」をクリックします。
表13-6に示されるパラメータを含めたextproc
に関するサービス情報を、listener.ora
ファイルに追加します。
表13-6 listener.oraファイルの外部プロシージャ設定
extproc
に関するサービス情報を構成する手順は次のとおりです。
「その他のサービス」タブをクリックします。
「追加」をクリックします。
「その他のサービスの作成」ページが表示されます。
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データベース・サーバー内に統合されたコンポーネントで、Oracleデータベース・サーバーから非Oracleシステムにアクセスする汎用的なテクノロジを提供するものです。異機種間サービスを使用すると、次のことが可能になります。
Oracle SQLを使用して、Oracleデータベース・サーバーに存在するデータと同じように、非Oracleシステムに格納されているデータに透過的にアクセスすること
Oracleプロシージャ・コールを使用して、Oracle分散環境からOracle以外のシステム、サービスまたはApplication Program Interface(API)に透過的にアクセスすること
異機種間サービスはOracleデータベース・サーバーで汎用的なテクノロジを提供しますが、特定の非Oracleシステムにアクセスするには異機種間サービス・エージェントが必要です。
非Oracleシステムへの接続を開始する際、Oracleデータベース・サーバーはゲートウェイ上のリスナーを介してエージェント・プロセスを起動します。Oracleデータベース・サーバーがエージェントに接続できるようにするには、次の手順を実行します。
ゲートウェイ上のリスナーが、Oracleデータベース・サーバーから受信した要求をリスニングし、異機種間サービス・エージェントを起動するように構成します。このために、次のパラメータをlistener.ora
ファイルに構成します。
Oracle Enterprise Managerで、PROGRAM
、ORACLE_HOME
およびSID
パラメータを構成します。
Oracle Enterprise ManagerのOracle Netの管理ページにアクセスします。
「管理」リストから「リスナー」を選択し、構成ファイルの場所を含むOracleホームを選択します。
「実行」をクリックします。
「リスナー」ページが表示されます。
Oracle Net Configuration Assistantによって生成されたリスナーを選択し、「編集」をクリックします。
リスナーの編集ページが表示されます。
アドレス・セクションで外部プロシージャのプロトコル・アドレスを選択し、「削除」をクリックします。
「その他のサービス」タブをクリックします。
「追加」をクリックします。
「その他のサービスの作成」ページが表示されます。
ゲートウェイの作成で実行するプログラム名を「プログラム名」フィールドに、実行可能エージェントが存在するOracleホームを「Oracleホーム・ディレクトリ」フィールドに、非OracleシステムのSIDまたはサービス名を「SID」フィールドに入力します。
「OK」をクリックします。
リスナーの編集ページが表示されます。
「OK」をクリックしてリスナーを変更します。
「リスナー」ページが表示されます。
listener.ora
ファイルの異機種間サービスに関する情報は次のように更新されます。
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=sybasegw) (ORACLE_HOME=/oracle10g) (PROGRAM=tg4sybs)))
Oracleデータベースが存在するコンピュータで、ゲートウェイ上のリスナーに接続するネット・サービス名を設定します。接続で異機種間サービスを利用できるように、接続記述子にもHS=ok
句を設定する必要があります。
Oracleデータベース・サーバーから非Oracleシステムへの接続に使用するネット・サービス名を作成します。
関連項目: ローカル・ネーミングの方法については、「タスク1: ネット・サービス名の構成」、ディレクトリ・ネーミングの方法については、「タスク2: ネット・エントリの作成または変更」を参照してください。 |
Oracle Enterprise ManagerまたはOracle Net Managerのいずれかを使用して、HS=ok
を構成します。
Oracle Enterprise Managerの場合は、「ネット・サービス名の作成」ページの「詳細」タブをクリックし、次に「異機種間サービスを使用」をクリックしてください。
Oracle Net Managerでは、「サービスの識別」ボックスの「詳細」をクリックします。「詳細サービス・オプション」ダイアログ・ボックスが表示されます。「異機種間サービスを使用」をクリックします。
「OK」をクリックして変更を確認します。
tnsnames.ora
ファイルでは、異機種間サービス用に構成された新規ネット・サービス名が次のように更新されます。
sybase_gtw=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=gate-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sybasegw)
)
(HS=ok)))
)
Oracle Rdbは、Digitalの64ビット・オペレーティング・システムで使用されるデータベースです。Oracle Rdbには独自のリスナーがあるため、クライアントはOracleデータベースと通信する場合と同じようにOracle Rdbと通信できます。
Oracle Rdbとの接続を開始するために、表13-7に示されるパラメータを使用して、Oracle Rdbデータベースに接続するネット・サービス名を設定します。
表13-7 接続記述子でのOracle Rdbデータベース設定
Oracle Enterprise Managerのフィールド | tnsnames.oraファイルのパラメータ | 説明 |
---|---|---|
Oracle Rdbデータベースのファイル名を指定します。 |
||
Oracle Rdbデータベースで使用するサービスの種類を指定します。このサービスはRDBインタフェース・ツールで使用します。この機能は、アプリケーションがOracle RdbサービスとOracleデータベース・サービスの両方をサポートし、そのアプリケーションでこの2つのサービス間のロード・バランス用にのみ使用します。 |
||
(オプション)Oracle Rdbデータベースを指定します。 |
関連項目: Oracle Rdbのマニュアルを参照してください。 |
Oracle Rdbデータベースを使用するようにクライアントを構成するには、Oracle Net Managerを使用します。
Oracleサーバーから非Oracleシステムへの接続に使用するネット・サービス名を作成します。
関連項目: ローカル・ネーミングの方法については、「タスク1: ネット・サービス名の構成」、ディレクトリ・ネーミングの方法については、「タスク2: ネット・エントリの作成または変更」を参照してください。 |
Oracle Enterprise ManagerまたはOracle Net Managerのいずれかを、Oracle Rdbパラメータに対して使用します。
Oracle Enterprise Managerの場合は、「ネット・サービス名の作成」ページの「詳細」タブをクリックします。
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データベース・サービスのロード・バランス用に使用されています。
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=oracle9_database))
関連項目: Oracle Rdbのマニュアルを参照してください。 |