プライマリ・コンテンツに移動
Oracle® Database Net Services管理者ガイド
11gリリース2 (11.2)
B56288-05
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 Oracle Net Servicesの拡張機能の使用

この章では、拡張接続データ・パラメータ、ロード・バランシングフェイルオーバーおよび非データベース・サービスへの接続など、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を使用して既存のネット・サービス名またはデータベース・サービスにネットワーク・プロトコルを追加する方法について説明します。

  1. Oracle Enterprise Managerの「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページにアクセスします。

    1. Oracle Enterprise Managerの「Net Services管理」ページにアクセスします。

    2. 「管理」リストから「ローカル・ネーミング」または「ディレクトリ・ネーミング」を選択し、次にディレクトリ・サーバーまたはローカル構成ファイルの場所を選択します。

    3. 「実行」をクリックします。

      「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページが表示されます。

  2. ディレクトリ・サービス名またはネット・サービス名を選択します。

    「ディレクトリ・ネーミング」の場合、簡易検索セクションでネット・サービス名を検索し、「結果」リストからネット・サービスまたはデータベース・サービスを選択し、次に「編集」をクリックします。「ローカル・ネーミング」の場合、リストからネット・サービスを選択し、「編集」をクリックします。

  3. アドレス・セクションで、「追加」をクリックします。

    「アドレスの追加」ページが表示されます。

  4. 「プロトコル」リストからリスナーがリスニングするように構成されているプロトコルを選択します。このプロトコルも、クライアント上にインストールする必要があります。

  5. 提供されたフィールドで選択したプロトコルに対して適切なパラメータ情報を入力します。


    関連項目:

    プロトコル・パラメータの設定については、『Oracle Database Net Servicesリファレンス』を参照してください。

  6. オプションで、拡張パラメータ・セクションを使用して、このセッションにおける送受信操作に必要なI/Oバッファ・スペース制限を「合計送信バッファ・サイズ」および「合計受信バッファ・サイズ」フィールドに指定します。


    関連項目:

    バッファ・スペースの詳細は、「I/Oバッファ・スペースの構成」を参照してください。

  7. 「OK」をクリックします。

    プロトコル・アドレスは、アドレス・セクションに追加されます。

  8. アドレス情報を更新するには、「OK」をクリックします。

Oracle Net Managerを使用したネットワーク・プロトコルの追加

次の手順では、Oracle Net Managerを使用して既存のネット・サービス名またはデータベース・サービスにネットワーク・プロトコルを追加する方法について説明します。

  1. Oracle Net Managerを起動します。

  2. ナビゲータ・ペインで、「ディレクトリ」または「ローカル」メニューから「サービス・ネーミング」を選択します。

  3. ネット・サービス名またはデータベース・サービスのいずれかを選択します。

    右ペインには、現行の宛先サービスおよびアドレス・リストが表示されます。

  4. 「アドレスの構成」ボックスで、プラス(+)をクリックして、新規アドレスを追加します。

    新規の「アドレス」タブが表示されます。

    1. プロトコルを選択し、必要なアドレス情報を入力します。


      関連項目:

      プロトコル・アドレス・パラメータの詳細は、『Oracle Database Net Servicesリファレンス』を参照してください。

    2. オプションで、「アドレス」タブ内の「詳細」をクリックし、このセッションにおける送受信操作に必要なI/Oバッファ・スペース制限を「合計送信バッファ・サイズ」および「合計受信バッファ・サイズ」フィールドに指定します。


      関連項目:

      バッファ・スペースの詳細は、「I/Oバッファ・スペースの構成」を参照してください。

    3. 左矢印ボタンと右矢印ボタンを使用して、プロトコル・アドレスをプロトコル・アドレス・リスト内の適切な場所に配置します。複数のアドレス・オプションが構成されていない場合、リスト先頭のアドレスに対して通信が行われます。

  5. 「ファイル」メニューから「ネットワーク構成の保存」を選択します。

アドレス・リスト・パラメータの構成

データベース・サービスに複数のリスナー・プロトコル・アドレスからアクセスできる場合は、ランダムに選択したり、順番に試行するなど、アドレスの使用順序を指定します。表13-1は、複数のプロトコル・アドレスで使用されるパラメータを示しています。

表13-1 アドレス・リスト・パラメータ

パラメータ 説明

FAILOVER

onに設定した場合、最初のリスナーへの接続に失敗するとOracle Netは別のリスナーにフェイルオーバーします。接続を試行する回数は、リスト内のアドレス数で決まります。offに設定した場合は、接続を試行するアドレスは1つのみです。

複数のアドレス・リスト(ADDRESS_LIST)、接続記述子(DESCRIPTION)および複数の接続記述子(DESCRIPTION_LIST)がある場合、接続時フェイルオーバーはデフォルトでonになっています。

接続記述子をSERVICE_NAMEとともに使用する場合、値がSID_DESCエントリのGLOBAL_DBNAMEではなく、またGLOBAL_DBNAMEセットのないSID_DESCエントリのSID_NAMEでもないことを確認してください。

LOAD_BALANCE

onに設定すると、プロトコル・アドレスのリストを順不同に選択して、複数のリスナーに対する負荷を均衡化します。offに設定した場合、Oracle Netは接続が成功するまでアドレスを順番に試行します。

複数の接続記述子(DESCRIPTION_LIST)がある場合、クライアント・ロード・バランシングはデフォルトでonになっています。

SOURCE_ROUTE

onに設定すると、Oracle Netでは、各アドレスを提供された順序で、接続先に到達するまで使用します。特定のルート、すなわち特定のコンピュータを使用して接続先に到達するには、このパラメータが必要です。このパラメータは、Oracle Connection Managerへの接続を使用可能にするために使用されます。



注意:

接続時フェイルオーバーやをクライアント・ロード・バランシングをソース・ルーティングと併用することはできません。ソース・ルーティングではリスト内の各アドレスに順に接続しますが、接続時フェイルオーバーとクライアント・ロード・バランシングではリストから1つのアドレスを選択します。


関連項目:

ソース・ルーティングに関するクライアントの構成については、「Oracle Connection Managerを使用する場合のクライアントの構成」を参照してください。

次の手順では、アドレス・リスト・パラメータを構成する方法について説明します。

  1. 「リスナー・プロトコル・アドレスのリスト作成」の手順を実行してください。

  2. Oracle Enterprise ManagerまたはOracle Net Managerを使用して、アドレス・リスト・オプションを構成します。

    • Oracle Enterprise Managerでは、接続時フェイルオーバーとクライアント・ロード・バランシング・セクションの適切なオプションを選択します。

    • Oracle Net Managerで、「アドレスの構成」ボックスの「詳細」をクリックします。「アドレス・リスト・オプション」ダイアログ・ボックスが表示されます。適切なオプションを選択します。

    表13-2では、アドレス・リスト・オプションについて説明しています。

    表13-2 「アドレス・リスト・オプション」ダイアログ・ボックス

    オプション パラメータ設定

    接続に成功するまで各アドレスを順番に試行

    FAILOVER=on

    接続に成功するまで各アドレスをランダムに試行

    LOAD_BALANCE=on

    FAILOVER=on

    ランダムに選択した1つのアドレスを試行

    LOAD_BALANCE=on

    各アドレスを、接続先に達するまで順番に使用します。

    SOURCE_ROUTE=ON

    最初のアドレスのみを使用します

    LOAD_BALANCE=off

    FAILOVER=off

    SOURCE_ROUTE=off


次の例は、クライアント・ロード・バランシング用に構成された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_NAMEsales.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ファイルのパラメータ 説明

インスタンス名

INSTANCE_NAME

アクセスするデータベース・インスタンス。インスタンス名は、初期化パラメータ・ファイルのINSTANCE_NAMEパラメータから取得できます。

セッション・データ・ユニット・サイズ(バイト)

SDU

ネットワークを介して送信されるデータ・パケットの転送レート。セッション・データ・ユニット(SDU)サイズを指定して、ネットワークで送信されるパケット関連のパフォーマンス特性を変更します。

異機種間サービスに使用

HS

Oracle Databaseサーバーで異機種間サービスを使用してサード・パーティ・システムにアクセスする場合は、このオプションをオンにします。

Oracle RDBデータベース

RDB_DATABASE

Oracle Rdbデータベースのファイル名。

サービスのタイプ

TYPE_OF_SERVICE

Oracle Rdbデータベースで使用するサービスの種類。

グローバル・データベース名

GLOBAL_NAME

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を使用して拡張接続記述子パラメータを構成する方法について説明します。

  1. 次の手順に従って、Oracle Enterprise Managerの「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページにアクセスします。

    1. Oracle Enterprise Managerの「Net Services管理」ページにアクセスします。

    2. 「管理」リストから「ローカル・ネーミング」または「ディレクトリ・ネーミング」を選択し、次にディレクトリ・サーバーまたはローカル構成ファイルの場所を選択します。

    3. 「実行」をクリックします。

      「ディレクトリ・ネーミング」または「ローカル・ネーミング」ページが表示されます。

  2. ディレクトリ・サービス名またはネット・サービス名を選択します。

    「ディレクトリ・ネーミング」の場合、簡易検索セクションでネット・サービス名を検索し、「結果」リストからネット・サービスまたはデータベース・サービスを選択し、次に「編集」をクリックします。「ローカル・ネーミング」の場合、リストからネット・サービスを選択し、「編集」をクリックします。

  3. 「詳細」タブをクリックします。

  4. 必要に応じてフィールドの入力やオプションの選択を行い、「OK」をクリックします。

  5. 接続データ情報を更新するには、「OK」をクリックします。

Oracle Net Managerを使用した拡張接続記述子パラメータの構成

次の手順では、Oracle Net Managerを使用して拡張接続記述子パラメータを構成する方法について説明します。

  1. Oracle Net Managerを起動します。

  2. ナビゲータ・ペインで、「ディレクトリ」または「ローカル」メニューから「サービス・ネーミング」を選択します。

  3. ネット・サービス名またはデータベース・サービスのいずれかを選択します。

    右ペインには、現行の宛先サービスおよびアドレス・リストが表示されます。

  4. 「サービスの識別」ボックスの「詳細」ボタンをクリックします。

    「詳細サービス・オプション」ダイアログ・ボックスが表示されます。

  5. 必要に応じてフィールドの入力やオプションの選択を行い、「OK」をクリックします。

  6. 「ローカル」フォルダに対してこれらの変更を行う場合は、「ファイル」メニューから「ネットワーク構成の保存」を選択します。ディレクトリ・フォルダへの変更は自動的に保存されます。

接続ロード・バランシングの構成

接続ロード・バランシング機能を利用すると、複数のディスパッチャ間のアクティブな接続数を均衡化することによって、接続時のパフォーマンスが向上します。Oracle Real Application Clusters(Oracle RAC)環境では、接続プール・ロード・バランシングによって、複数のインスタンス間のアクティブな接続数を均衡化することも可能です。

PMONプロセスはリモート・リスナーを登録できるので、リスナーは、すべてのインスタンスおよびディスパッチャを、それらのある場所にかかわらず常に認識できます。リスナーは、着信したクライアント要求の送信先となるインスタンスを、また共有サーバーが構成されている場合は送信先となるディスパッチャを、ロード情報に応じて判別します。

共有サーバー構成では、リスナーは次の順番でディスパッチャを選択します。

  1. ロード量が最小のノード。

  2. ロード量が最小のインスタンス。

  3. そのインスタンスのロード量が最小のディスパッチャ。

専用サーバー構成では、リスナーは次の順番でインスタンスを選択します。

  1. ロード量が最小のノード。

  2. ロード量が最小のインスタンス。

データベース・サービスが複数のノード上に複数のインスタンスを持つ場合、リスナーはロード量が最も少ないノード上にある、ロード量が最も少ないインスタンスを選択します。共有サーバーが構成されている場合、選択したインスタンスの中でロード量が最小のディスパッチャが選択されます。

Oracle Real Application Clusters環境では、各インスタンスのディスパッチャは、他のノード上にある他のリスナーにも相互登録される必要があります。これを行うには、DISPATCHERSパラメータのLISTENER属性を使用します。


注意:

接続プール・ロード・バランシングで最適な結果を得るには、同じデータベース・サービスに属するインスタンスを、等価なハードウェアおよびソフトウェア構成上に存在するようにしてください。


関連項目:

  • 相互登録の詳細は、「リモート・リスナーへの情報の登録」を参照してください。

  • SERVICE_NAMESパラメータおよびINSTANCE_NAMEパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

  • LISTENER属性の詳細は、第11章「ディスパッチャの構成」を参照してください。


共有サーバーの構成のための接続ロード・バランシングの例

図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がロード量が最小のディスパッチャです。

図13-1 共有サーバーの構成のためのロード・バランシング環境

図13-1の説明が続きます。
「図13-1 共有サーバーの構成のためのロード・バランシング環境」の説明

(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に示す矢印の番号に対応しています。

  1. PMON プロセスは、インスタンスsales1およびsales2を、両方のリスナーに登録します。リスナーは、インスタンスおよびディスパッチャのロード時に動的に更新されます。

  2. クライアントが接続要求を送信します。接続記述子が構成されプロトコル・アドレスが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を選択します。

  3. リスナーは、ディスパッチャdispatcher2のロード量とdispatcher3のロード量を比較します。dispatcher2のロード量はdispatcher3のロード量より少ないため、リスナーはクライアント接続要求をdispatcher2にリダイレクトします。

  4. クライアントは、dispatcher2に直接接続します。

図13-2 共有サーバーの構成のためのロード・バランシングの例

図13-2の説明が続きます。
「図13-2 共有サーバーの構成のためのロード・バランシングの例」の説明

専用サーバーの構成のための接続ロード・バランシングの例

図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です。

図13-3 専用サーバーの構成のためのロード・バランシング環境

図13-3の説明が続きます。
「図13-3 専用サーバーの構成のためのロード・バランシング環境」の説明

(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に示す矢印の番号に対応しています。

  1. PMON プロセスは、インスタンスsales1およびsales2を、両方のリスナーに登録します。リスナーは、インスタンスのロード時に動的に更新されます。

    前述の情報では、sales2-serverがロード量が最小のノード、sales2がロード量が最小のインスタンスです。

  2. クライアントが接続要求を送信します。

    接続記述子が構成されプロトコル・アドレスが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を選択します。

  3. sales1-server上のリスナーが、クライアント接続要求をsales2-serverのリスナーにリダイレクトします。

  4. クライアントがsale2-server上のリスナーに接続します。リスナーが専用サーバー・プロセスを開始し、専用サーバー・プロセスがリスナーから接続要求を継承します。

図13-4 専用サーバーの構成のためのロード・バランシングの例

図13-4の説明が続きます。
「図13-4 専用サーバーの構成のためのロード・バランシングの例」の説明

透過的アプリケーション・フェイルオーバーの構成

透過的アプリケーション・フェイルオーバー(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


関連項目:

  • 『Oracle Real Application Clustersインストレーションおよび構成』

  • 『Oracle Real Application Clusters管理およびデプロイメント・ガイド』

  • コールバック、接続プールおよびセッション・プールの詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。


透過的アプリケーション・フェイルオーバーのリストア対象

TAFは、アクティブなデータベース接続に関連する次の要素の、いくつかまたはすべてを自動的にリストアします。TAFによって接続をリカバリするには、他の要素をアプリケーション・コードに埋め込む必要があることもあります。

  • クライアント/サーバー・データベース接続: TAFは、同じ接続文字列、またはフェイルオーバーを構成するときに指定する代替接続文字列を使用して、自動的に接続を再確立します。

  • ユーザーのデータベース・セッション: TAFは、障害発生前と同じユーザーIDで自動的にユーザーをログインします。複数のユーザーが接続を使用していて、これらのユーザーがデータベース・コマンドを処理しようとすると、TAFはこれらのユーザーを自動的にログインします。残念ながら、TAFは他のセッション・プロパティを自動的にリストアできません。これらのプロパティは、コールバック関数をコールすることによりリストアできます。

  • 完了したコマンド: 接続失敗の時点でコマンドが完全に実行され、データベースの状態が変更された場合は、TAFはこのコマンドを再送しません。データベースを変更した可能性があるコマンドに応答してTAFが再接続した場合は、TAFはアプリケーションにエラー・メッセージを発行します。

  • フェッチに使用されるオープン・カーソル: TAFでは、フェイルオーバー前にカーソルから行のフェッチを開始していたアプリケーションが、フェイルオーバー後も行のフェッチを続行できます。これは選択フェイルオーバーと呼ばれています。これは、同じスナップショットを使用してSELECT文を再実行し、すでにフェッチした行を廃棄し、最初にフェッチしなかった行を取得することによって実現されます。TAFでは、廃棄した行が最初に戻された行であることを確認するか、またはエラー・メッセージを返します。

  • アクティブ・トランザクション: TAFはフェイルオーバー後にアクティブ・トランザクションを保つことができないため、障害発生時にはアクティブ・トランザクションはすべてロールバックされます。このため、アプリケーションは、ROLLBACKが発行されるまでエラー・メッセージを受け取ることになります。

  • サーバー側プログラム変数: PL/SQLパッケージの状態などのサーバー側プログラム変数は、障害発生時に消失します。TAFはこれらをリカバリできません。これらは、フェイルオーバー・コールバックからコールすることにより初期化できます。


関連項目:

『Oracle Call Interfaceプログラマーズ・ガイド』

FAILOVER_MODEパラメータの理解

FAILOVER_MODEパラメータは、接続記述子のCONNECT_DATAセクションに含まれている必要があります。FAILOVER_MODEには、表13-4で説明するパラメータを含めることができます。

表13-4 FAILOVER_MODEパラメータの追加パラメータ

FAILOVER_MODEパラメータ 説明

BACKUP

バックアップ接続として使用する別のネット・サービス名。バックアップは、preconnectを使用して事前に接続を確立する場合に指定します。

DELAY

次に接続を試みるまでの待機時間(秒数)。RETRIESが指定されると、DELAYはデフォルトで1秒に設定されます。

コールバック関数が登録されていると、このパラメータは無視されます。

METHOD

プライマリ・ノードからバックアップ・ノードにフェイルオーバーされる速さの設定。

  • basic: フェイルオーバー時に接続を確立します。フェイルオーバー時まで、バックアップ・サーバーはほとんど何もする必要はありません。

  • preconnect: 接続を事前に確立します。フェイルオーバーは高速に行われますが、バックアップ・インスタンスはサポートされた各インスタンスからの接続すべてをサポートできる必要があります。

RETRIES

フェイルオーバー後に接続を行う回数。DELAYが指定されている場合、RETRIESのデフォルトは、5回再試行するように設定されています。

コールバック関数が登録されていると、このパラメータは無視されます。

TYPE

フェイルオーバーの種類。デフォルトでは、Oracle Call Interface(OCI)アプリケーションに対して、3種類のOracle Netフェイルオーバー機能を利用できます。

  • session: セッションをフェイルオーバーに設定します。ユーザーの接続が失われた場合に、新しいセッションを自動的に作成して、ユーザーをバックアップします。このフェイルオーバーでは、検索操作はリカバリされません。

  • select: 障害発生後もユーザーはカーソルを継続してオープンし、フェッチできるようにします。ただしこのモードでは、通常の検索操作を行うクライアント側にオーバーヘッドが生じます。

  • none: これがデフォルトです。フェイルオーバー機能は使用されません。フェイルオーバーが実行されないように、明示的に指定することもできます。



注意:

Oracle Net Managerでは、TAFパラメータはサポートされません。これらのパラメータは、手動で設定する必要があります。

透過的アプリケーション・フェイルオーバーの実装


重要:

listener.oraファイルのSID_LIST_listener_nameセクションのGLOBAL_DBNAMEパラメータは設定しないでください。静的に構成されたグローバル・データベース名は、TAFを使用禁止にします。

TAFは、FAILOVER_MODEパラメータの設定次第で複数の方法で実装できます。オラクル社では、次の方法をお薦めします。

接続時フェイルオーバーおよびクライアント・ロード・バランシングのTAF

複数のアドレスについて接続時フェイルオーバーおよびクライアント・ロード・バランシングを行うように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

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))))

接続事前確立のTAF

バックアップ接続は事前に確立できます。初期接続およびバックアップ接続は明示的に指定する必要があります。次の例では、ネット・サービス名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_TYPEFAILOVER_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ファンクションを使用して監視できます。


関連項目:

  • 『Oracle Call Interfaceプログラマーズ・ガイド』

  • V$SESSIONビューの詳細は、『Oracle Databaseリファレンス』を参照してください。


プライマリおよびセカンダリ・インスタンス構成のインスタンス・ロールの指定

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

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 Enterprise Managerのフィールド listener.oraのパラメータ 説明

プログラム名

PROGRAM

実行可能な外部プロシージャ・エージェントの名前。

注意: Microsoft Windowsの場合、実行可能ファイルが、ORACLE_HOME\binディレクトリに存在している必要があります。

環境変数

ENVS

ORACLE_HOME/hs/adminディレクトリにあるextproc.oraファイルの外部プロシージャで使用される環境変数。

注意: extproc.oraが使用されている場合、listener.oraの同じ環境変数ENVSより優先されます。

構文: SET name=value

例: SET EXTPROC_DLLS=ANY

環境変数EXTPROC_DLLSを指定して、extprocがロードできるDLLを制限します。環境変数EXTPROC_DLLSの指定がない場合、extprocは、UNIXオペレーティング・システムの場合はORACLE_HOME/libから、Microsoft Windowsの場合はORACLE_HOME\binからDLLをロードします。

EXTPROC_DLLSを次のいずれかの値に設定します。

  • DLLのコロン区切りリスト

    構文: "DLL:DLL"

    この値に設定すると、extprocは指定されたDLLをロードしたり、またはUNIXオペレーティング・システムの場合はORACLE_HOME/libから、Microsoft Windowsの場合はORACLE_HOME\binからDLLをロードできます。DLLの完全なディレクトリ・パスとファイル名を入力する必要があります。

  • ONLY(セキュリティを最大にする場合に推奨)

    構文: "ONLY:DLL:DLL"

    この値に設定すると、extprocは指定されたDLLのみロードできます。DLLの完全なディレクトリ・パスとファイル名を入力する必要があります。

  • ANY

    構文: "ANY"

    説明: この値に設定すると、extprocは任意のDLLをロードできます。ANYに設定すると、DLLチェックは無効になります。

例:

"EXTPROC_DLLS=/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"

"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"

"EXTPROC_DLLS=ANY,LD_LIBRARY_PATH=/private/xpm/lib:/private/mylibs, 
MYPATH=/usr/ucb:/usr/local/packages,APL_ENV_FILE=/apl/conf/env.txt"

Oracleホーム・ディレクトリ

ORACLE_HOME

エージェントのOracleホームの場所。

SID

SID_NAME

外部プロシージャ・エージェントのシステム識別子(任意の名前)。



注意:

外部プロシージャのデフォルト構成では、ネットワーク・リスナーがOracle Databaseおよびextprocエージェントを使用する必要はありません。extprocエージェントはOracle Databaseによって直接生成されるため、Oracleリスナーによって予期せずextprocが生成される恐れはありません。最大限のセキュリティを確保するため、このデフォルト構成が推奨されています。

外部プロシージャのデフォルト構成を変更し、Oracleリスナーによってextprocエージェントを生成できます。このためには、追加のネットワーク構成手順を実行する必要があります。

次のものを使用する場合、Oracleリスナーによってextprocエージェントを生成する必要があります。

  • マルチスレッド・エージェント

  • MTSモードのOracle Database(Microsoft Windows)

  • 外部プロシージャを別のextprocエージェントにリダイレクトできるような、LIBRARY指定のAGENT句またはPROCEDURE指定のAGENT IN句。


外部プロシージャを使用する場合のOracle Net Servicesの構成

外部プロシージャのデフォルト構成を変更し、旧リリースの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)))
外部プロシージャのデフォルト構成の変更:

外部プロシージャのデフォルト構成を変更するには、外部プロシージャを処理するための別のリスナーまたは既存のリスナーを構成および実行します。次の手順では、デフォルトの構成を変更する方法について説明します。

  1. Oracle Net Configuration Assistantを使用して、外部プロシージャを処理するための既存のリスナーを構成します。ほとんどのインストールの場合、次に示すようにこのリスナーの名前はLISTENERです。

    1. Oracle Enterprise ManagerのOracle Netの管理ページにアクセスします。

    2. 「管理」リストから「リスナー」を選択し、構成ファイルの場所を含むOracleホームを選択します。

    3. 「実行」をクリックします。

      「リスナー」ページが表示されます。

    4. Oracle Net Configuration Assistantによって生成された既存のリスナーを選択し、「編集」をクリックします。

      リスナーの編集ページが表示されます。

    5. アドレス・セクションで外部プロシージャのプロトコル・アドレスを選択し、「追加」をクリックします。

    6. 「その他のサービス」タブをクリックします。

    7. 外部プロシージャのサービス情報を表す行を選択し、「追加」をクリックします。

  2. 表13-5に示されるパラメータを含めたextprocに関するサービス情報を、listener.oraファイルに追加します。

外部プロシージャを実行するための新規リスナーの作成:

外部プロシージャを処理するための別のリスナーを構成および実行するには、Oracle Net Configuration Assistantを使用して別のリスナーの外部プロシージャ・エントリを削除します。次の手順では、新しいリスナーを作成する方法について説明します。

  1. 次のように、外部プロシージャを排他的に処理するリスナーを作成します。

    1. 「リスナー」ページにナビゲートします。

    2. 「作成」をクリックします。

      「リスナーを作成」ページが表示されます。

    3. 一意のリスナー名を「リスナー名」フィールドに入力します(「リスナー名」フィールドにLISTENEREXTPROCなど)。

  2. アドレス・セクションに、次のようにIPCプロトコル・アドレスを構成します。

    1. 「追加」をクリックします。

      「アドレスの追加」ページが表示されます。

    2. 「プロトコル」リストからIPCを選択します。

    3. 「キー」フィールドに、extprocのキー値を入力します。

    4. 「OK」をクリックします。


      関連項目:

      リスナー・プロトコル・アドレスの構成の詳細は、「リスニング用プロトコル・アドレスの構成」を参照してください。

  3. 次のように、表13-5に示されるパラメータを含めたextprocに関するサービス情報を、listener.oraファイルに追加します。

    1. 「その他のサービス」タブをクリックします。

    2. 「追加」をクリックします。

      「その他のサービスの作成」ページが表示されます。

    3. 次の値をフィールドに入力します。

      • extprocを「プログラム名」フィールドに。

      • extproc実行ファイルが存在するOracleホームを「Oracleホーム・ディレクトリ」フィールドに。

      • extprocなどのシステム識別子を「SID」フィールドに。

    4. 環境変数セクションで、「行の追加」をクリックします。

    5. EXTPROC_DLLS環境変数を「名前」フィールドに、DLLのディレクトリ・パスとファイル名を「値」フィールドに入力します。

    6. 「OK」をクリックします。

      「リスナーを作成」ページが表示されます。

    7. 「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)))
      
  4. oracleユーザーより低い権限のユーザー・アカウントから、外部プロシージャのリスナーを起動します。

    このユーザー・アカウントに、oracleユーザーが所有するファイルへのアクセス権がないことを確認します。具体的には、このユーザーは、データベース・ファイルまたはOracleサーバーのアドレス空間に対する読取り権限または書込み権限を持つことはできません。さらに、このユーザーには、listener.oraファイルに対する読取り権限が必要ですが、書込み権限を持つことはできません。

    低い権限でリスナーを実行することによって、リスナー制御のSETコマンドを使用せずに、listener.oraファイルにあるこのリスナーの構成を変更できます。このため、オラクル社では、リスナーの実行前にlistener.oraファイルの構成を完了することをお薦めします。


関連項目:

  • リスナー制御ユーティリティのSTARTコマンドを使用してリスナーを起動する方法については、「Oracle Net ListenerとOracle Databaseサーバーの起動」を参照してください。

  • 外部プロシージャ・コールを使用可能にする方法については、『Oracle Databaseアプリケーション開発者ガイド-基礎編』を参照してください。


Oracle異機種間サービスを使用する場合のOracle Net Servicesの構成

異機種間サービスは、Oracle Databaseサーバー内に統合されたコンポーネントで、Oracle Databaseサーバーからサードパーティ・システムにアクセスする汎用的なテクノロジを提供するものです。異機種間サービスを使用すると、次のことが可能になります。

  • Oracle SQLを使用して、Oracle Databaseサーバーに存在するデータと同じように、サード・パーティ・システムに格納されているデータに透過的にアクセスすること

  • Oracleプロシージャ・コールを使用して、Oracle分散環境からサード・パーティのシステム、サービスまたはApplication Program Interface(API)に透過的にアクセスすること

異機種間サービスはOracle Databaseサーバーで汎用的なテクノロジを提供しますが、特定のサード・パーティ・システムにアクセスするには異機種間サービス・エージェントが必要です。

サード・パーティ・システムへの接続を開始する際、Oracle Databaseサーバーはゲートウェイ上のリスナーを介してエージェント・プロセスを起動します。次の手順では、Oracle Databaseサーバーがエージェントに接続できるように設定する方法について説明します。

  1. ゲートウェイ上のリスナーが、Oracle Databaseサーバーから受信した要求をリスニングし、異機種間サービス・エージェントを起動するように構成します。このために、次のパラメータをlistener.oraファイルに構成します。

    • PROGRAM: 実行可能エージェントの名前。

    • ORACLE_HOME: 実行可能エージェントのOracleホーム。

    • SID_NAME: Oracleシステム識別子(SID)。

  2. Oracle Enterprise Managerで、PROGRAMORACLE_HOMEおよびSIDパラメータを構成します。

    Oracle Enterprise ManagerのOracle Netの管理ページにアクセスします。

  3. 「管理」リストから「リスナー」を選択し、構成ファイルの場所を含むOracleホームを選択します。

  4. 「実行」をクリックします。

    「リスナー」ページが表示されます。

  5. Oracle Net Configuration Assistantによって生成されたリスナーを選択し、「編集」をクリックします。

    リスナーの編集ページが表示されます。

  6. アドレス・セクションで外部プロシージャのプロトコル・アドレスを選択し、「削除」をクリックします。

  7. 「その他のサービス」タブをクリックします。

  8. 「追加」をクリックします。

    「その他のサービスの作成」ページが表示されます。

  9. ゲートウェイの作成で実行するプログラム名を「プログラム名」フィールドに、実行可能エージェントが存在するOracleホームを「Oracleホーム・ディレクトリ」フィールドに、サードパーティ・システムのSIDまたはサービス名を「SID」フィールドに入力します。

  10. 「OK」をクリックします。

    リスナーの編集ページが表示されます。

  11. 「OK」をクリックしてリスナーを変更します。

    「リスナー」ページが表示されます。

    listener.oraファイルの異機種間サービスに関する情報は次のように更新されます。

    SID_LIST_LISTENER=
     (SID_LIST=
      (SID_DESC=
       (SID_NAME=sybasegw)
       (ORACLE_HOME=/oracle11g)
       (PROGRAM=tg4sybs)))
    
  12. Oracle Databaseが存在するコンピュータで、ゲートウェイ上のリスナーに接続するネット・サービス名を設定します。接続で異機種間サービスを利用できるように、次のように接続記述子にHS=ok句を設定する必要があります。

    1. Oracle Databaseサーバーからサードパーティ・システムへの接続に使用するネット・サービス名を作成します。


      関連項目:

      ローカル・ネーミングの方法については、タスク1「ネット・サービス名の構成」、ディレクトリ・ネーミングの方法については、タスク2「ネット・サービス名のディレクトリへの作成」を参照してください。

    2. Oracle Enterprise ManagerまたはOracle Net Managerのいずれかを使用して、HS=okを構成します。

      • Oracle Enterprise Managerの場合は、「ネット・サービス名の作成」ページの「詳細」タブをクリックし、次に「異機種間サービスを使用」をクリックしてください。

      • Oracle Net Managerでは、「サービスの識別」ボックスの「詳細」をクリックします。「詳細サービス・オプション」ダイアログ・ボックスが表示されます。「異機種間サービスを使用」をクリックします。

    3. 「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データベースを使用する場合のOracle Net Servicesの構成

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ファイルのパラメータ 説明

RDBデータベース

RDB_DATABASE

Oracle Rdbデータベースのファイル名。

サービスのタイプ

TYPE_OF_SERVICE

Oracle RDBデータベースで使用するサービスのタイプ。これは、Rdbインタフェース・ツールで使用されます。アプリケーションがOracle RdbサービスとOracle Databaseサービスの両方をサポートし、アプリケーションがこの両方のサービス間でロード・バランシングを実行する場合にのみ、この機能を使用する必要があります。

グローバル・データベース名

GLOBAL_NAME

Oracle Rdbデータベース。オプション。


次の手順では、Oracle Rdbデータベースのクライアントを構成する方法について説明します。

  1. Oracleサーバーからサードパーティ・システムへの接続に使用するネット・サービス名を作成します。


    関連項目:

    ローカル・ネーミングの方法については、タスク1「ネット・サービス名の構成」、ディレクトリ・ネーミングの方法については、タスク2「ネット・サービス名のディレクトリへの作成」を参照してください。

  2. Oracle Enterprise ManagerまたはOracle Net Managerを使用して、Oracle Rdbパラメータを設定します。

    • Oracle Enterprise Managerの場合は、「Net Services管理」ページから「ローカル・ネーミング」を選択し、「CREATE LIKE」を選択し、次に「ネット・サービス名の作成」ページの「詳細」タブをクリックしてください。

    • Oracle Net Managerでは、「サービスの識別」セクションの「詳細」をクリックします。「詳細サービス・オプション」ダイアログ・ボックスが表示されます。

  3. 「Rdbデータベース」フィールドにOracle Rdbデータベースのファイル名を入力します。

  4. オプションの「グローバル・データベース名」フィールドにグローバル・データベース名を入力し、必要な場合は「サービスのタイプ」フィールドにサービスの種類を指定して、「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))