32 単一クライアント・アクセス名
単一クライアント・アクセス名(SCAN)は、クラスタで実行中のOracle Databaseにアクセスするために、クライアントに単一の名前を提供するOracle Real Application Clusters (Oracle RAC)の機能です。この章では、SCANに関連する次の概念について説明します。
32.1 単一クライアント・アクセス名の概要
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は、クラスタ内のデータベースのクラスタ別名として機能します。
32.2 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
の一般的な設定を示します。
名前 | 型 | 値 |
---|---|---|
|
string |
|
|
string |
|
ノート:
簡易接続ネーミング方法を使用している場合は、クライアント名の解決の参照に使用されるネーミング方法の順序を指定するときに、SQLNET.ORA
ファイルを変更してEZCONNECT
が必ずリストに含まれるようにする必要があります。
32.3 SCANを使用した接続ロード・バランシングの動作
Oracle SQL*Netを使用したクライアント接続の場合、DNSによってSCAN名を解決することで、クライアントは3つのIPアドレスを受け取ります。次に、クライアントは、DNSから受け取ったリストを調べ、リスト内のIPアドレスの1つを使用して接続しようとします。エラーを受け取ると、クライアントはユーザーまたはアプリケーションにエラーを戻す前に別のアドレスに接続しようとします。これは、クライアント接続文字列にアドレス・リストが指定されているときの、以前のリリースのデータベースにおけるクライアント接続フェイルオーバーの動作に似ています。
SCANリスナーが接続要求を受け取ると、SCANリスナーは最もロードされていない、要求されたサービスを提供しているインスタンスをチェックします。次に、最もロードされていないインスタンスが実行中のノードのローカル・リスナーに接続要求をリダイレクトします。続いて、クライアントにローカル・リスナーのアドレスが付与されます。最後に、このローカル・リスナーがデータベース・インスタンスへの接続を作成します。
図32-1 SCANを使用した接続ロード・バランシング
例
この例では、デフォルトのTNSNAMES.ora
ファイルを使用するOracleクライアントを想定しています。
ORCLservice =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = sales1-scan.example.com)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = MyORCLservice)))
32.4 バージョンと下位互換性
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
パラメータ設定、あるいはその両方を適宜変更する必要があります。このような場合、次のケースを考慮する必要があります。
表32-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をホストとして |
Oracle Database 11g リリース2より前のOracle Databaseのバージョン |
Oracle Database 11 gリリース2 |
クライアントの |
Oracle Database 11g リリース2より前のOracle Databaseのバージョン |
Oracle Database 11g リリース2より前のOracle Databaseのバージョン |
SCANを使用する場合(推奨)は、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)))
32.5 最大可用性アーキテクチャ環境での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)))
32.6 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リファレンス』を参照してください。