ヘッダーをスキップ
Oracle® Database JDBC開発者ガイド
12cリリース1 (12.1)
B71308-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

29 単一クライアント・アクセス名

単一クライアント・アクセス名(SCAN)は、クラスタで実行中のOracle Databaseにアクセスするために、クライアントに単一の名前を提供するOracle Real Application Clusters (Oracle RAC)の機能です。この章では、SCANに関連する次の概念について説明します。

単一クライアント・アクセス名の概要

SCANは、ドメイン・ネーム・サービス(DNS)またはグリッド・ネーミング・サービス(GNS)のいずれかにある、1つ以上3つ以下のIPアドレスに登録されたドメイン名です。GNSおよびDynamic Host Configuration Protocol (DHCP)を使用している場合、Oracle Clusterwareでは、クラスタの構成時に指定されるSCAN名の仮想IP (VIP)アドレスが構成されます。ノードVIPおよび3つのSCAN VIPは、GNSを使用している場合、DHCPサーバーから取得されます。


関連項目:

GNSの詳細は、『Oracle Clusterware管理およびデプロイメント・ガイド』を参照してください。

新しいサーバーがクラスタに追加されると、Oracle Clusterwareでは、必要なVIPアドレスはDHCPサーバーから動的に取得されてクラスタ・リソースが更新され、GNSを介してサーバーにアクセスできるようになります。SCANを使用する利点は、クラスタ内でノードを追加または削除しても、クライアントの接続情報を変更する必要がないことです。クラスタにアクセスするための単一名を保持することで、クライアントではEZConnectクライアントとシンプルなJDBC thin URLを使用して、クラスタ内のアクティブ・サーバーに関係なく、クラスタで実行中のあらゆるデータベースにアクセスできます。SCANにより、データベースへのクライアント接続のロード・バランシングおよびフェイルオーバーが実現します。SCANは、クラスタ内のデータベースのクラスタ別名として機能します。

SCANを使用したデータベースの構成

SCANは、データベース構成に不可欠です。そのため、標準のOracleツールを使用してデータベースを作成すると、REMOTE_LISTENERパラメータはデフォルトでSCANに設定されます。これにより、インスタンスがリモート・リスナーとしてSCANリスナーに登録され、そのインスタンスによって提供されているサービスおよび現在のロードに関する情報や、そのインスタンスに送られる着信接続数に関する推奨が提供されます。

こうした場合、LOCAL_LISTENERパラメータをノードVIPに設定する必要があります。完全修飾ドメイン名が必要な場合は、LOCAL_LISTENERパラメータに完全修飾ドメイン名を必ず設定します。デフォルトでは、クラスタの構成時に、クラスタ内の各ノードでノード・リスナーが作成されます。Oracle Grid Infrastructureでは、ノード・リスナーはOracle Grid Infrastructureホームから実行され、指定されたポートを使用してノードVIPをリスニングします。デフォルトのポートは1521です。

以前のバージョンのデータベースとは異なり、REMOTE_LISTENERパラメータを、HOST=sales1-scanなど、アドレス・リスト・エントリでホストをSCANに解決するサーバー側のTNSNAMES別名に設定することはお薦めしません。かわりに、次の表に示すように、簡略化されたSCAN:port構文を使用することをお薦めします。この表では、LOCAL_LISTENERおよびREMOTE_LISTENERの一般的な設定を示します。

名前
LOCAL_LISTENER string (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=5221))))
REMOTE_LISTENER string example.us.oracle.com:5221


注意:

簡易接続ネーミング方法を使用している場合は、クライアント名の解決の参照に使用されるネーミング方法の順序を指定するときに、SQLNET.ORAファイルを変更してEZCONNECTが必ずリストに含まれるようにする必要があります。

この項では、次の概念について説明します。

SCANを使用した接続ロード・バランシングの動作

Oracle SQL*Netを使用したクライアント接続の場合、DNSによってSCAN名を解決することで、クライアントは3つのIPアドレスを受け取ります。次に、クライアントは、DNSから受け取ったリストを調べ、リスト内のIPアドレスの1つを使用して接続しようとします。エラーを受け取ると、クライアントはユーザーまたはアプリケーションにエラーを戻す前に別のアドレスに接続しようとします。これは、クライアント接続文字列にアドレス・リストが指定されているときの、以前のリリースのデータベースにおけるクライアント接続フェイルオーバーの動作に似ています。

SCANリスナーが接続要求を受け取ると、SCANリスナーは最もロードされていない、要求されたサービスを提供しているインスタンスをチェックします。次に、最もロードされていないインスタンスが実行中のノードのローカル・リスナーに接続要求をリダイレクトします。続いて、クライアントにローカル・リスナーのアドレスが付与されます。最後に、このローカル・リスナーがデータベース・インスタンスへの接続を作成します。

図29-1 SCANを使用した接続ロード・バランシング

SCANを使用した接続ロード・バランシング

この例では、デフォルトのTNSNAMES.oraファイルを使用するOracleクライアントを想定しています。

ORCLservice =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = sales1-scan.example.com)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = MyORCLservice)))

バージョンと下位互換性

SCANを正しく使用してクラスタ内のOracle RACデータベースに接続できるかどうかは、次の2つの要因によって決まります。

  • SCANを認識して使用するクライアントの能力

  • データベースのREMOTE_LISTENERパラメータ設定の正しい構成

データベースに接続するOracleクライアントのバージョンと使用されるOracle DatabaseのバージョンがいずれもOracle Database 11g リリース2であり、前述の項で説明されているようにデフォルト構成を使用する場合は、通常、システムに変更を加える必要はありません。

Oracleクライアントのバージョンとクライアントが接続しているOracle DatabaseのバージョンがいずれもOracle Database 11g リリース2より前である場合は、通常、システムに変更を加える必要はありません。この場合、クライアントはクラスタのノードVIPに解決するTNS接続記述子を使用する一方で、Oracle DatabaseはノードVIPを指すREMOTE_LISTENERエントリを使用します。この構成の短所は、SCANが使用されないことです。そのため、バックエンドでクラスタが変更されるたびに、クライアントを変更する必要があります。

Oracle Database 11g リリース2を使用しているのに、クライアントが以前のバージョンのデータベース上にある場合は、OracleクライアントまたはOracle DatabaseのREMOTE_LISTENERパラメータ設定、あるいはその両方を適宜変更する必要があります。このような場合、次のケースを考慮する必要があります。

表29-1 OracleクライアントおよびOracle DatabaseのSCANに関するバージョン互換性

Oracleクライアントのバージョン Oracle Databaseのバージョン 備考

Oracle Database 11 gリリース2

Oracle Database 11 gリリース2

変更は不要です。

Oracle Database 11 gリリース2

Oracle Database 11g リリース2より前のOracle Databaseのバージョン

SCAN VIPをホストとしてREMOTE_LISTENERパラメータに追加します。

Oracle Database 11g リリース2より前のOracle Databaseのバージョン

Oracle Database 11 gリリース2

クライアントのTNSNAMES.oraファイルを更新してSCAN VIPを含めます。Database Upgrade Assistant (DBUA)を使用してデータベースを11g リリース2より前のデータベースからアップグレードする場合、DBUAによってREMOTE_LISTENERパラメータはノードVIPおよびSCANを指すように構成されます。

Oracle Database 11g リリース2より前のOracle Databaseのバージョン

Oracle Database 11g リリース2より前のOracle Databaseのバージョン

SCANを使用する場合(推奨)は、SCAN VIPをホストとしてREMOTE_LISTENERパラメータに追加し、クライアントのTNSNAMES.oraファイルを更新してSCAN VIPを含めます。それ以外の場合、変更は不要です。


Oracle Database 11g リリース2より前のクライアントを使用している場合は、SCANの利点を十分に活用できません。これは、DNSから戻されるSCAN用の3つのIPアドレスのセットをOracleクライアントが処理できないためです。かわりに、リストに戻された1つ目のアドレスにのみ接続しようとし、他の2つのアドレスを無視します。この特定のIPアドレスをリスニングしているSCANリスナーが使用できない場合、またはIPアドレス自体が使用できない場合は、接続できません。Oracle Database 11g リリース2より前のクライアントでロード・バランシングおよび接続フェイルオーバーが確実に行われるようにするには、クライアントのTNSNAMES.oraファイルを更新して、3つのアドレス行がクライアントで使用され、各アドレス行がSCAN VIPのいずれかに解決されるようにする必要があります。次の例に、Oracle Database 11g リリース2より前のクライアントのサンプルTNSNAMES.oraファイルを示します。

sales.example.com =(DESCRIPTION=
(ADDRESS_LIST= (LOAD_BALANCE=on)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.192)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.193)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=133.22.67.194)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))

最大可用性アーキテクチャ環境でのSCANの使用

最大可用性アーキテクチャ(MAA)環境を実装し、その環境でOracle Data Guardを使用して同期されるプライマリ・データベースとスタンバイ・データベースの両方にOracle RACを使用している場合、SCANを使用すると、現在アクティブなデータベースがプライマリ・データベースであるかスタンバイ・データベースであるかに関係なく、クライアントがデータベースへの接続に使用できるTNSNAMES構成を簡略化できます。

この簡略化された構成を使用するために、Oracle Database 11g リリース2には、個々のクライアントの接続文字列に使用できる次の2つのSQL*Netパラメータが導入されています。

  • CONNECT_TIMEOUTパラメータ

    クライアントがOracle DatabaseへのOracle Net接続を確立するときのタイムアウト時間を秒数で指定します。このパラメータは、SQLNET.ORAファイルのSQLNET.OUTBOUT_CONNECT_TIMEOUTパラメータをオーバーライドします。

  • RETRY_COUNTパラメータ

    接続試行を終了するまでに、ADDRESS_LISTを反復する回数を指定します。

この2つのパラメータを使用すると、プライマリ・サイトとスタンバイ・サイトの両方のSCANをクライアント接続文字列で使用できます。また、ランダムに選択されたアドレスが現在アクティブではないサイトを指している場合、クライアントが不当に長時間待機する前に、タイムアウトによって接続要求をフェイルオーバーすることができます。次の例に、MAA環境用のサンプルTNSNAMES.ORAエントリを示します。

sales.example.com =(DESCRIPTION= (CONNECT_TIMEOUT=10)(RETRY_COUNT=3)
(ADDRESS_LIST= (LOAD_BALANCE=on)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=tcp)(HOST=sales1-scan)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=sales2-scan)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME= salesservice.example.com)))

Oracle Connection ManagerでのSCANの使用

Oracle RACデータベースでOracle Connection Manager (CMAN)を使用する場合は、Oracle RACインスタンスのREMOTE_LISTENERパラメータにCMANサーバーを含めて、CMANサーバーでロード・バランシング関連の情報を受け取り、使用可能なインスタンスに対して接続のロード・バランシングを実行できるようにする必要があります。これを実行する最も簡単な方法は、クライアントがCMANを経由して接続するデータベースのREMOTE_LISTENERパラメータにCMANサーバーをエントリとして追加します。また、クライアントのTNSNAMES接続記述子からSCANを削除してCMANサーバーを構成する必要があります。次の例に、CMANを使用するときのサーバー側のTNSNAMES.oraのサンプル・エントリを示します。

SQL> show parameters listener
NAME                TYPE         VALUE
-------------------------- ----------- ------------------------------
listener_networks   string
local_listener      string      (DESCRIPTION=(ADDRESS_LIST=
                                (ADDRESS=(PROTOCOL=TCP)
                                (HOST=148.87.58.109)(PORT=1521))))
remote_listener     string      stscan3.oracle.com:1521,(DESCRIPTION=
                                (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)
                                (HOST=CMANserver)(PORT=1521))))

関連項目:

CMANサーバーの構成の詳細は、『Oracle Database Net Servicesリファレンス』を参照してください。