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

拡張接続データ・パラメータ、ロード・バランシング、フェイルオーバーおよび非データベース・サービスへの接続など、Oracle Net Servicesの拡張機能を構成する方法について説明します。

13.1 拡張ネットワーク・アドレスおよび接続データ情報の構成

データベース・サービスは、複数のルートおよびプロトコル・アドレスからアクセスできます。プロトコル・アドレスのリストを設定して、使用するルートを構成します。オーダー・アドレスは、アドレス・パラメータを指定して構成します。

13.1.1 リスナー・プロトコル・アドレスのリスト作成

データベース・サービスは、複数のネットワーク・ルートまたはプロトコル・アドレスからアクセスできます。次の例では、sales.us.example.comで、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 Cloud Controlを使用したネットワーク・プロトコルの追加

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

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

    1. Oracle Enterprise Manager Cloud Controlの「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.2 アドレス・リスト・パラメータについて

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

表13-1 tnsnames.oraファイルのアドレス・リスト・パラメータ

パラメータ 説明

FAILOVER

onに設定した場合、このパラメータは、接続時に最初のリスナーに障害が発生したら、別のリスナーにフェイルオーバーするようOracle Netに指示します。接続を試行する回数は、リスト内のアドレス数で決まります。offに設定した場合は、接続を試行するアドレスは1つのみです。

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

LOAD_BALANCE

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

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

SOURCE_ROUTE

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

ノート:

ソース・ルーティング(SOURCE_ROUTE)を接続時フェイルオーバー(FAILOVER)またはクライアント・ロード・バランシング(LOAD_BALANCE)と同じレベルで設定することはできません。ソース・ルーティングではリスト内の各アドレスに順に接続しますが、接続時フェイルオーバーとクライアント・ロード・バランシングではリストから1つのアドレスを選択します。

tnsnames.oraファイル内の接続記述子にOracle Connection Managerホップのプロトコル・アドレスが少なくとも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)))

次の例は、Oracle Connection Managerおよびロード・バランシング用に構成されたtnsnames.oraファイルです。

sales.us.example.com=
(DESCRIPTION=
   (SOURCE_ROUTE=ON)
   (ADDRESS=(PROTOCOL=tcp)(HOST=cman-pc1)(PORT=1630))
   (ADDRESS=
     (LOAD_BALANCE=ON)
     (ADDRESS=(PROTOCOL=tcp)(HOST=cman-pc2)(PORT=1521))
     (ADDRESS=(PROTOCOL=tcp)(HOST=cman-pc3)(PORT=1521)))
   (CONNECT_DATA=
     (SERVICE_NAME=sales.us.example.com)))

関連項目:

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

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

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

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

  2. Oracle Enterprise Manager Cloud ControlまたはOracle Net Managerを使用したアドレス・リスト・オプションの構成

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

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

13.1.3 拡張接続データ・パラメータについて

Oracle Database 12c リリース2 (12.2)からは、sqlnet.oraファイルでデータ圧縮を設定できます。圧縮を設定するパラメータは、SQLNET.COMPRESSIONおよびSQLNET.COMPRESSION_LEVELSです。これらのパラメータをsqlnet.oraファイルに設定すると、sqlnet.oraファイルを使用するすべての接続に影響します(REDOおよびSecureFiles LOB (ラージ・オブジェクト)をストリーミングするOracle Data Guardを除く)。次の例に、圧縮を設定する方法を示します。

SQLNET.COMPRESSION = on
SQLNET.COMPRESSION_LEVELS =(low,high)

tnsnames.oraファイルの接続記述子の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 tnsnames.oraファイルの拡張接続データ設定

Oracle Enterprise Manager Cloud Control/Oracle Net Managerのオプション tnsnames.oraファイルのパラメータ 説明

インスタンス名

INSTANCE_NAME

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

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

SDU

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

異機種間サービスに使用

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 Cloud ControlまたはOracle Net Managerを使用して、ネットワーク・サービス名またはデータベース・サービスの拡張CONNECT_DATAパラメータを構成します。

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

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

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

    1. Oracle Enterprise Manager Cloud Controlの「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. 「ローカル」フォルダに対してこれらの変更を行う場合は、「ファイル」メニューから「ネットワーク構成の保存」を選択します。ディレクトリ・フォルダへの変更は自動的に保存されます。

13.2 接続ロード・バランシングの理解

接続ロード・バランシング機能を利用すると、複数のディスパッチャ間のアクティブな接続数を均衡化することによって、接続時のパフォーマンスが向上します。

Oracle Real Application Clusters (Oracle RAC)環境では、接続ロード・バランシングによって、複数のインスタンス間のアクティブな接続数を均衡化することも可能です。

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

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

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

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

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

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

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

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

このリリースで、HTTPプレゼンテーション用の複数ノードへのロード・バランシングが導入されました。リモート・リスナーが、HTTPリダイレクトを使用して、HTTPプレゼンテーション用の異なる複数のノード上にある複数のインスタンスに対してロード・バランシングを行えます。

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

ノート:

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

関連項目:

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

図13-1は、同じサービスsales.us.example.comの2つのインスタンスsales1およびsales2を持つ、Oracle RACの共有サーバー・データベースを示しています。インスタンスsales1およびsales2は、それぞれコンピュータsales1-serverおよびsales2-serverに常駐します。インスタンスsales1は1つのディスパッチャ、インスタンスsales2は2つのディスパッチャを持ちます。listenerという名前のリスナーは、それぞれノード1および2上で稼働しています。DISPATCHERSパラメータのlistener属性が構成され、両方のリスナーに対して情報のサービス登録が可能になっています。

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

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

この例では、sales2-serverがロード量が最小のノード、sales2がロード量が最小のインスタンス、dispatcher2がロード量が最小のディスパッチャです。次のロード情報が登録されます。

  • 各インスタンスの1分当たりのロード量平均は、sales1の場合600、sales2の場合400になります。これは、sales1-serverに必要な処理が多い場合に発生する可能性があります。

  • 各インスタンスへの接続数は、sales1の場合200、sales2の場合300になります。

  • 各インスタンスへのディスパッチャ接続数は、dispatcher1の場合200、dispatcher2の場合100、dispatcher3の場合200になります。

  • sales1への接続数(200)は、その唯一のディスパッチャであるdispatcher1への接続数と同じです。

  • sales2の接続数(300)は、その2つのディスパッチャであるdispatcher2の接続数(100)とdispatcher3の接続数(200)の合計になります。

(LISTENER=listeners_sales)listeners_salesの値は、両方のサーバー上に存在するローカルのtnsnames.oraファイルによって、次のように決定します。

listeners_sales= 
 (DESCRIPTION= 
   (ADDRESS_LIST=
     (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521))
     (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521))))

環境に応じて、次のような処理が実行されます。次の各処理に付いている番号は、図13-2に示す矢印の番号に対応しています。

  1. LREGプロセスは、インスタンス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.2.2 専用サーバーの構成のための接続ロード・バランシングの例

図13-3は、同じサービスsales.us.example.comの2つのインスタンスsales1およびsales2を持つ、Oracle RACの専用サーバー・データベースを示しています。インスタンスsales1およびsales2は、それぞれコンピュータsales1-serverおよびsales2-serverに常駐します。listenerという名前のリスナーは、それぞれノード1および2上で稼働しています。REMOTE_LISTENER初期化パラメータが構成され、両方のリスナーに対して情報のサービス登録が可能になっています。

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

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

この例では、次のロード情報が登録されます。

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

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

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

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

    接続記述子が構成されプロトコル・アドレスが1つ成功するまで、各プロトコル・アドレスがランダムに試行されます。

    sales.us.example.com= 
     (DESCRIPTION= 
      (ADDRESS_LIST=
        (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 専用サーバーの構成のためのロード・バランシングの例」の説明

13.2.3 クライアント接続のCOLOCATION_TAG

COLOCATION_TAGパラメータは、TNS接続文字列のCONNECT_DATAパラメータで使用できる英数字の文字列です。

CONNECT_DATAパラメータでcolocation_tagを設定すると、ロード・バランシングが無視されます。リスナーは、同じcolocation_tagを持つすべての接続を同じデータベース・インスタンスに送信するように試行します。インスタンス選択アルゴリズムは、colocation_tagと、指定したサービスで使用可能なインスタンスのリストに基づきます。

たとえば、リスナーは、接続記述子でCOLOCATION_TAGinteractiveに設定されている同じデータベース・インスタンスに、すべてのクライアントをルーティングしようとします。


sales.us.example.com=
  (DESCRIPTION=
     (ADDRESS=(PROTOCOL=tcp)(HOST=sales-scan)(PORT=1521))
     (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)(COLOCATION_TAG=interactive)))
    

ノート:

インスタンスの最大ロードに達した、またはサービスに対して新しいインスタンスが追加または削除されたなど特定の場合、同じcolocation_tagを持つクライアント接続の同じデータベース・インスタンスに対するコロケーションが一貫していない可能性があります。

関連トピック

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

透過的アプリケーション・フェイルオーバー(TAF)は、データベース・インスタンスの障害発生時に、障害が発生した接続を別のリスナーに透過的に再接続するようOracle Netに指示します。これにより、元の接続に障害が発生したことを意識せずに、新しい接続を使用して作業を続行できます。

TAFを使用する場合は、ネットワーク・サービス名の構成において接続記述子のCONNECT_DATAセクションにFAILOVER_MODEパラメータを手動で設定する必要があります。

ノート:

TAFおよびアプリケーション・コンティニュイティのために、接続されたサービスでフェイルオーバーを構成することをお薦めします。これがクライアント側の設定を上書きします。

TAF機能と、接続文字列で構成する方法について学習します。

13.3.1 透過的アプリケーション・フェイルオーバーについて

透過的アプリケーション・フェイルオーバーを使用すると、クライアントは、接続先の現在のインスタンスの障害発生時に、データベース・インスタンスに自動的に再接続できます。サーバーは通知を使用して、クライアント側でTAFコールバックをトリガーします。

サーバー側のサービス属性を使用してTAFを構成できます。この方法を使用することをお薦めします。または、アプリケーション接続文字列でTAFを構成できます。サーバー側のサービス属性は、接続文字列で指定された値より優先されます。

TAFは、次のいずれかのモードで動作します。
  • セッション・フェイルオーバー: 失われた接続およびセッションを再作成します。

  • 選択フェイルオーバー: 進行中の問合せを再実行します。

障害が発生すると、Oracle Call Interface(OCI)コールバックを使用してクライアント側でコールバック機能が開始されます。これは、標準のOCI接続、および接続プール接続とセッション・プール接続を使用します。

TAFはOracle Data Guardで動作して、自動フェイルオーバーを提供します。TAFは次のデータベース構成を使用して、データベース障害を効果的に隠ぺいします。

  • Oracle Real Application Clusters

  • レプリケート・システム

  • スタンバイ・データベース

  • シングル・インスタンスのOracle Database

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

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

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

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

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

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

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

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

13.3.3 FAILOVER_MODEパラメータについて

FAILOVER_MODEパラメータは、これらの追加パラメータをサポートします。これらは、接続記述子のCONNECT_DATAセクションで指定できます。

表13-4 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パラメータはサポートされません。これらのパラメータは、手動で設定する必要があります。

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

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

重要:

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

13.3.4.1 接続時フェイルオーバーおよびクライアント・ロード・バランシングの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))))

前述の例には複数のアドレスが含まれていますが、オプションのADDRESS_LISTパラメータは使用されていません。

13.3.4.2 接続再試行の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))))
13.3.4.3 接続事前確立のTAF

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

13.3.5 透過的アプリケーション・フェイルオーバーの確認

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_METHOD FAILED_OVER   COUNT(*)
-------------------- ------------- ----------      ---           ----------
sales1               NONE          NONE            NO            11
sales2               SELECT        PRECONNECT      NO             1

フェイルオーバー後の出力は次のようになります。

MACHINE              FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER   COUNT(*)
-------------------- ------------- ----------      ---           ----------
sales2               NONE          NONE            NO            10
sales2               SELECT        PRECONNECT      YES            1

ノート:

TAFの各ステップは、適切に構成されたOCI TAF CALLBACKファンクションを使用して監視できます。

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

INSTANCE_ROLEパラメータは、接続記述子のCONNECT_DATAセクションのオプションのパラメータです。これを使用すると、Oracle RAC構成のプライマリまたはセカンダリ・インスタンスへの接続を指定できます。

このパラメータは、次の場合に役立ちます。

  • プライマリまたはセカンダリ・インスタンスに明示的に接続する場合。デフォルトはプライマリ・インスタンスです。

  • TAFを使用してセカンダリ・インスタンスに事前に接続する場合。

表13-5に、INSTANCE_ROLEパラメータを説明します。

表13-5 INSTANCE_ROLEパラメータ

INSTANCE_ROLEパラメータ 説明

PRIMARY

プライマリ・インスタンスへの接続を指定します。

SECONDARY

セカンダリ・インスタンスへの接続を指定します。

ANY

プライマリ・インスタンス・ロールかセカンダリ・インスタンス・ロールかにかかわらず、ロード量が最小のインスタンスへの接続を指定します。

インスタンス・ロール・タイプへの接続

次のtnsnames.oraファイルの例では、ネットワーク・サービス名sales_primaryがプライマリ・インスタンスへの接続を使用可能にし、ネットワーク・サービス名sales_secondaryがセカンダリ・インスタンスへの接続を使用可能にします。

sales_primary=
 (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) 
     (INSTANCE_ROLE=primary)))
sales_secondary=
 (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) 
     (INSTANCE_ROLE=secondary)))

特定のインスタンスへの接続

Oracle Enterprise Manager Cloud Controlおよびその他のシステム管理製品が、管理タスクを実行するロールにかかわらず、特定のインスタンスに接続する必要がある場合があります。このような接続の場合は、(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)))

13.5 静的サービス登録の構成

リスナーはlistener.oraファイルの静的な構成情報を使用する前に、データベースやインスタンスの動的なサービス情報を使用します。

静的なサービス情報の構成は次の場合に必要です。

  • 外部プロシージャ・コールを使用する場合

  • Oracle異機種間サービスを使用する場合

  • Oracle Data Guardを使用する場合

  • Oracle Enterprise Manager Cloud Control以外のツールからデータベースをリモートで起動する場合

  • Oracle8iリリース2 (8.1)より前のOracleデータベースに接続する場合

13.5.1 静的サービス登録のパラメータ

静的サービス登録用のlistener.oraファイルの静的サービス設定について説明します。

listener.oraファイルの例

この例は、静的なサービス登録に構成されたlistener.oraファイルを示します。LISTENERエントリでは、Listenerという名前のリスナーのリスニング用プロトコル・アドレスが定義され、SID_LIST_LISTENERエントリでは、Listenerリスナーが静的にサポートする外部サービス情報が提供されます。

LISTENER=
  (DESCRIPTION=
    (ADDRESS_LIST=
      (ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
      (ADDRESS=(PROTOCOL=ipc)(KEY=extproc) (queuesize=50))))
SID_LIST_listener=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME=plsextproc)
      (ORACLE_HOME=/oracle8)
      (PROGRAM=extproc)))

listener.oraファイルのSID_LIST_listener_nameパラメータ設定では、リスナーが提供するデータベース情報を指定します。サービスが静的に構成されている場合、リスナーはクライアントの要求を受信したときに、専用サーバー・プロセスを起動します。インスタンスが起動していない場合、サーバーは「Oracleは使用できません。」というエラー・メッセージを返します。

データベースがリスナーを検出できない場合は、次の例に示すように、GLOBAL_DBNAMEパラメータを使用してlistener.oraファイルを構成します。

SID_LIST_listener=
(SID_LIST=
 (SID_DESC=
  (GLOBAL_DBNAME=sales.example.com)
  (SID_NAME=sales)
  (ORACLE_HOME=/u01/app/oracle))

ノート:

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

listener.oraの静的なサービス設定

Oracle Net Managerのフィールド listener.oraファイルのパラメータ 説明

SID

SID_NAME

インスタンスのOracleシステム識別子(SID)。SID値は、初期化パラメータ・ファイルのINSTANCE_NAMEパラメータから取得できます。

サービス名

GLOBAL_DBNAME

データベース・サービス。

クライアントの接続要求を処理中に、リスナーはこのパラメータの値と、クライアント接続記述子のSERVICE_NAMEパラメータの値が一致するか試行します。クライアント接続記述子がSIDパラメータを使用する場合、リスナーは値のマップを試行しません。このパラメータは、主にOracle8データベース(動的なサービス登録が専用サーバーでサポートされていない場合)での構成に適しています。構成によっては、このパラメータは、Oracle8i以上のデータベース・サービスを使用する際に必要となる場合があります。

このパラメータの値は、通常、初期化パラメータ・ファイルのDB_NAMEパラメータおよびDB_DOMAINパラメータ(DB_NAME.DB_DOMAIN)の値の組合せから取得されますが、値にはクライアントがサービスを識別するのに使用する有効な名前を含めることができます。

接続記述子をSERVICE_NAMEパラメータとともに使用する場合、SID_DESCエントリの値がGLOBAL_DBNAMEでないことを確認してください。

Oracleホーム・ディレクトリ

ORACLE_HOME

インスタンスのOracleホームの場所。このパラメータを設定しないと、リスナーに指定されているインスタンスのOracleホームが使用されます。

LinuxおよびUNIXでは、この設定はオプションです。

Microsoft Windowsでは、この設定は無視されます。Microsoft WindowsレジストリのHKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEIDにあるORACLE_HOMEパラメータで指定されているOracleホームが使用されます。

該当なし

SID_LIST_listener_name

リスナーが提供するデータベースを定義するlistener.oraファイルのセクション。

13.5.2 リスナーの静的サービス情報の構成

Oracle Enterprise Manager Cloud Controlを使用してリスナーのデータベース・サービス情報を静的に構成する方法について学習します。

ノート:

Oracle Real Application Clusters環境内など、接続時フェイルオーバーまたはTAFを使用している場合は、GLOBAL_DBNAMEパラメータを設定しないでください。

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

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

  3. 「実行」をクリックします。データベース・サーバーへのログインを求められる場合があります。

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

  4. リスナーを選択し、「編集」をクリックします。

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

  5. 「静的データベース登録」タブをクリックし、続いて「追加」をクリックします。

    「データベース・サービスを追加」ページが表示されます。必要な情報をフィールドに入力します。

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

    ノート:

    Oracle Net Managerを使用すると、静的なサービス情報の設定も行うことができます。詳細は、オンライン・ヘルプの「Statically Configure Database Service Information」を参照してください。

13.6 サード・パーティのデータベース・サービスへの接続の構成

listener.oraファイルの外部プロシージャ設定、外部プロシージャのデフォルト構成の変更、異機種間サービス・エージェントに接続するためのOracleデータベース・サーバーの構成、およびOracle Rdbデータベースに接続するためのクライアントの構成について学習します。

13.6.1 外部プロシージャのデフォルト構成

外部プロシージャは、別のプログラムからコールされる、異なる言語で記述されたプロシージャです。例としては、特別な目的の処理を実行するために必要な1つ以上のCルーチンを呼び出すPL/SQLプログラムがあります。

アプリケーションが外部プロシージャをコールすると、Oracle Databaseはextprocという名前の外部プロシージャ・エージェントを開始します。Oracle Databaseによって確立されたネットワーク接続を使用して、アプリケーションがエージェントに次の情報を渡します。

  • DLLまたは共有ライブラリの名前
  • 外部プロシージャ名
  • 任意のパラメータ

次に、エージェントはDLLや共有ライブラリをロードして外部プロシージャを実行し、外部プロシージャから戻された値をアプリケーションに戻します。エージェントは、外部プロシージャをコールするアプリケーションと同じコンピュータに常駐している必要があります。

外部プロシージャのデフォルト構成を使用する場合、extprocエージェントはOracle Databaseによって直接生成されます。listener.oraファイル、tnsnames.oraファイルのいずれも構成の変更は必要ありません。ただし、それらの環境変数を、ORACLE_BASE_HOME/hs/adminディレクトリにあるextproc.oraファイル内の外部プロシージャによって使用されるように定義する必要があります。外部プロシージャのデフォルトの構成を使用しない場合は、表13-6に示すパラメータを設定する必要があります。

表13-6 listener.oraファイルの外部プロシージャ設定

Oracle Enterprise Manager Cloud Controlのフィールド listener.oraのパラメータ 説明

プログラム名

PROGRAM

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

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

環境変数

ENVS

ORACLE_BASE_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のコロン区切りリスト脚注1

    構文: "DLL:DLL"

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

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

    構文: "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"

ノート:

有効なユーザーと実際のユーザー、または有効なグループと実際のグループが異なる場合、LD_LIBRARY_PATH環境設定は無視されます。

Oracleホーム・ディレクトリ

ORACLE_HOME

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

Oracleシステム識別子(SID)

SID_NAME

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

Oracleリスナーによって生成された外部プロシージャ・エージェントの使用方法の詳細は、外部プロシージャを使用する場合のOracle Net Servicesの構成の例を参照してください。

脚注1

DLLは、Microsoft Windowsではセミコロン(;)で区切ります。

ノート:

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

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

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

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

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

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

関連項目:

外部プロシージャの保護の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
13.6.1.1 外部プロシージャを使用する場合のOracle Net Servicesの構成

外部プロシージャのデフォルト構成を変更し、旧リリースのOracle Databaseに類似したリスナーによってextprocエージェントを生成できます。プロセスは次のとおりです。

1. 既存のリスナーを構成するか、新規リスナーを作成して、外部プロシージャを処理します。

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

2. tnsnames.oraに新しいエントリを追加します。

例13-2では、tnsnames.oraファイルの構成例を示します。

例13-2 外部プロシージャを設定したtnsnames.oraファイル

EXTPROC_CONNECTION_DATA_1=            
 (DESCRIPTION=                     
   (ADDRESS=(PROTOCOL=ipc)(KEY=extproc))                      
   (CONNECT_DATA=
    (SID=plsextproc)))

3. 外部プロシージャを別のextprocエージェント(Oracleリスナーによって生成されたextprocなど)にリダイレクトできるような、LIBRARY指定のAGENT句またはPROCEDURE指定のAGENT IN句を使用します。

$ cat test.c

#include <stdlib.h>
int negative(char* db, int n)
{
        return -1*n;
}

char* mygetenv(const char* env)
{
        return getenv(env);
}

$ gcc -shared -fPIC -o test.so test.c

$ cp test.so $ORACLE_HOME/lib

SQL*PLUSで、次を実行します。


DROP DATABASE LINK extproclink;
CREATE DATABASE LINK extproclink USING 'extproc_connection_data_1';

CREATE OR REPLACE LIBRARY test1 AS '$ORACLE_HOME/lib/test.so';
/

-- 
-- Use 'AGENT' clause in LIBRARY SPEC
-- 
CREATE OR REPLACE LIBRARY test2 AS '$ORACLE_HOME/lib/test.so' AGENT 'extproclink';
/

-- 
-- Use 'AGENT IN' clause in FUNCTION
-- 
CREATE OR REPLACE FUNCTION ftest1(x VARCHAR2, y BINARY_INTEGER)
RETURN BINARY_INTEGER
AS LANGUAGE C
LIBRARY test1
NAME "negative"
PARAMETERS(x STRING, y INT)
AGENT IN ( x );
/

CREATE OR REPLACE FUNCTION ftest2(x VARCHAR2)
RETURN VARCHAR2
AS LANGUAGE C
LIBRARY test2
NAME "mygetenv";
/

$ select ftest1('extproclink', 123) from dual;

$ select ftest2('LD_LIBRARY_PATH') from dual;

外部プロシージャのリスナーには、oracleユーザーが所有するファイルへの一般的なアクセス権のないユーザー・アカウントを含めないようにしてください。具体的には、このユーザーは、データベース・ファイルまたはOracleサーバーのアドレス空間に対する読取り権限または書込み権限を持つことはできません。また、このユーザーは、listener.oraファイルへの読取りアクセス権を持つ必要がありますが、書込みアクセス権は持つことはできません。

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

13.6.1.1.1 外部プロシージャのデフォルト構成の変更

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      関連項目:

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

  3. 表13-6に示されるパラメータを含めた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)))
      
  4. oracleユーザーより低い権限のユーザー・アカウントから、外部プロシージャのリスナーを起動します。

関連項目:

13.6.2 Oracle異機種間サービスのOracle Net Servicesについて

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

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

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

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

13.6.2.1 エージェントに接続するためのOracle Databaseの構成

サード・パーティ・システムへの接続を開始する際、Oracle Databaseサーバーはゲートウェイ上のリスナーを介してエージェント・プロセスを起動します。

次の手順では、Oracle Databaseサーバーがエージェントに接続できるように設定する方法について説明します。

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

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

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

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

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

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

      Oracle Enterprise Manager Cloud Controlを使用したOracle Net Servicesの構成」を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2. Oracle Enterprise Manager Cloud ControlまたはOracle Net Managerを使用して、HS=okを構成します。

      • Oracle Enterprise Manager Cloud Controlの場合は、「Net Services管理」ページにアクセスし、リスナーに対して「ローカル・ネーミング」を選択して、「ネット・サービス名の作成」ページで「詳細」タブをクリックします。次に、「異機種間サービスに使用」をクリックします。

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

13.6.3 Oracle Rdbデータベースを使用する場合のOracle Net Servicesの構成

Oracle Rdbは、Digitalの64ビット・オペレーティング・システムで使用されるデータベースです。Oracle Rdbには独自のリスナーがあるため、クライアントはOracle Databaseと通信する場合と同じようにOracle Rdbと通信できます。

Oracle Rdbとの接続を開始するには、表13-7に示されるパラメータを使用して、Oracle Rdbデータベースに接続するネットワーク・サービス名を設定します。

表13-7 接続記述子でのOracle RDBデータベース設定

Oracle Enterprise Manager Cloud Controlのフィールド 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. Oracle Enterprise Manager Cloud ControlまたはOracle Net Managerを使用して、Oracle Rdbパラメータを設定します。

    • Oracle Enterprise Manager Cloud Controlの場合は、「Net Services管理」ページにアクセスし、リスナーに対して「ローカル・ネーミング」を選択して、「ネット・サービス名の作成」ページで「詳細」タブをクリックします。

    • 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データベース・サービスの間のロード・バランシングに使用されます。

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