3.4 Real Application Clustersとグローバル・データ・サービス
この項では、次の製品の最適化について説明します。
-
Oracle Real Application Clusters (Oracle RAC)とは、従来のシェアード・ナッシング・アプローチや共有ディスク・アプローチの制限を克服し、ビジネス・アプリケーションに拡張性および可用性の高いデータベース・ソリューションを提供する共有キャッシュ・アーキテクチャを使用したクラスタ・データベースです。
-
Oracle Data Guardには、Oracleデータを障害や災害、ヒューマン・エラー、そしてデータ破損から保護し、重要なアプリケーションの高可用性を確保するために、1つ以上のスタンバイ・データベースが用意されています。
-
Oracle GoldenGateは、異機種間のデータ環境でデータをレプリケートします。これにより、運用および分析用エンタープライズ・システム間での高可用性ソリューション、リアルタイム・データ統合、トランザクション変更データの取得、データ・レプリケーション、変換および検証が可能になります。
-
グローバル・データ・サービス(GDS)は、Oracle Database 12cの新機能で、Data GuardやGoldenGateなどのレプリケートされたデータベース全体でデータベース・ワークロード管理機能を実現します。
ODP.NETでは、Oracle Real Application Clusters (Oracle RAC)、Data GuardおよびGoldenGateが透過的にサポートされるため、これらのOracleコンポーネントを使用するためにODP.NETのコードを変更する必要はありません。これらのテクノロジをさらに活用するため、ODP.NETには、アプリケーションの高可用性およびパフォーマンスの向上を実現する接続プーリング最適化機能が用意されています。これを実現するには、.NETアプリケーションを対象にデータベース・ステータス・メッセージを受信、応答および送信するようにODP.NETを構成します。
これらの最適化構成には、高速アプリケーション通知(FAN)、ランタイム接続ロード・バランシング、高速接続フェイルオーバー(FCF)などの機能の使用が含まれます。
これらの接続プーリング最適化によって、Oracle Real Application Clustersおよびグローバル・データ・サービス製品の高可用性とパフォーマンスを向上できます。
3.4.1 高速アプリケーション通知
高速アプリケーション通知(FAN)は、Oracle RAC、Data Guard、GoldenGateでODP.NETアプリケーションにクラスタ構成およびサービス・レベルの情報を通知するために使用される高可用性とロード・バランシングの通知メカニズムであり、この情報にはUPイベントやDOWNイベント、サーバー・ロードなどのステータスの変更が含まれます。FANのUPイベントおよびDOWNイベントは、インスタンス、サービスおよびノードに適用できます。受信した情報に従って、ODP.NETは、アプリケーションの可用性とパフォーマンスを向上するためにその接続プールを調整できます。
FANでは、Oracle RAC、Data GuardおよびGoldenGateは、次の2つのOracleメッセージ交換インフラストラクチャのいずれかを使用して、ODP.NETアプリケーションに通知を送信します。
-
Oracle Notification Service(ONS)
-
Oracle Streams Advanced Queueing (AQ)
表3-5で、各メッセージ・システムの使用時期と、ODP.NET関連のクライアント構成について説明します。
表3-5 ODP.NETドライバ・タイプ別の構成
ODP.NETドライバ・タイプ | データベース・サーバーのバージョン | FANインフラストラクチャ | 構成 | 手動ONS構成の場所 |
---|---|---|---|---|
管理対象 |
12.1以上 |
ONS |
自動または手動 |
次の2つのファイルのいずれか
|
管理対象 |
11.2以下 |
ONS |
手動 |
次の2つのファイルのいずれか
|
管理対象外 |
12.1以上 |
ONS |
自動または手動 |
|
管理対象外 |
11.2以下 |
AQ |
自動 |
N/A |
自動ONS構成では、開発者は、ODP.NETがデータベースから自動的に取得するノードおよびポートに加え、ODP.NETがリスニングするための別のノードおよびポートを追加できます。
ODP.NETアプリケーションは、コードを変更することなく、AQからONS FANインフラストラクチャに移行できます。ただし、前述のとおり、ONSへの移行や、新しいデータベース・サーバーのバージョンへの移行、またはODP.NET管理対象外ドライバから管理対象ドライバへの移行時には、ODP.NETクライアント構成の変更が必要になる場合があります。
データベースのサーバー側では、FANを設定して構成する必要があります。
データベースからのFANメッセージを使用して、ODP.NETは次のことを実行できます。
-
ランタイム接続ロード・バランシングの機能を使用して、ODP.NETは、Oracle RACノード、サービス、サービス・メンバーおよびGDSリソース間の接続における負荷のバランスを調整できます。この機能によって、ODP.NETのレスポンスが早くなり、サーバー・リソースのリソース割当てが改善されます。
-
データベース・ノード、サービス、サービス・メンバー、データベースが停止した場合に、高速接続フェイルオーバー(FCF)の機能を使用して、Oracle RAC、Data GuardおよびGoldenGateからODP.NET接続プールに情報を伝えることができます。この停止メッセージは、プール内のどの接続が無効であり、削除する必要があるのかを示します。
関連項目:
-
.NET構成ファイルを構成する場合は、「onsConfigセクション」を参照してください。
-
ONS構成ファイルを構成する場合は、「クライアント側のONSデーモン構成」を参照してください。
-
FAN用のAQ構成の詳細は、「データベース通知をリスニングするポートの構成」を参照してください。
-
FANの詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください
-
oraaccess.xml
を構成する場合は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。
3.4.2 実行時接続ロード・バランシング
ロード・バランシング・アドバイザリおよびサービス目標に応じて、Oracle Data Provider for .NETは、ランタイム接続ロード・バランシングを使用して、Oracle RACインスタンス間の作業要求のバランスを調整します。ワークロードは常に変化し続けるので、ロード・バランシングが実行されるのは、アプリケーションから新しい接続要求を受けたときです。これにより、その時点で最も負荷の少ないノードがユーザーの接続先となり、サービス・レベルがODP.NETにより最適化されます。
Oracle Database 12cでは、ランタイム接続ロード・バランシングの機能拡張により、Oracle Data GuardおよびOracle GoldenGateをサポートするようになったことで、ODP.NET 12cの接続に対して、これら2つのデータベース・サービスのロード・バランスもグローバル・データ・サービスの一部として調整されるようになりました。ランタイム接続ロード・バランシングをすでに使用している場合は、ODP.NETアプリケーションのコードを変更することなく、グローバル・データ・サービスを使用できます。
ランタイム接続ロード・バランシングを有効にした場合:
-
ODP.NET接続プールは、ロード・バランシング・アドバイザリおよびサービスの目的に基づき、接続を分配します。
-
また、ODP.NET接続プールは、ロード・バランシング・アドバイザリおよびサービスの目的に基づき、サービスを提供する各サービス・メンバーに対して接続数のバランスを調整します。
デフォルトでODP.NETは、ランタイム接続ロード・バランシングのFANメッセージをサーバーから受信するように設定されています。この機能を有効にしているのは、接続文字列のLoad Balancing=true
設定とpooling=true
設定で、それぞれこれがデフォルト値です。この機能は、"pooling=true"
の場合にのみ使用できます。ランタイム接続ロード・バランシングを使用するには、特定のOracleサーバー構成を設定する必要があります。
次の例は、ランタイム接続ロード・バランシングを有効にする接続文字列です。
"user id=scott;password=tiger;data source=erp;load balancing=true;"
関連項目:
-
ランタイム接続ロード・バランシングで必要なOracle Net構成の設定の詳細は、Oracle Database Net Services管理者ガイドを参照
-
必要なOracle RAC構成の詳細は、Oracle Real Application Clusters管理およびデプロイメント・ガイドを参照
3.4.3 高速接続フェイルオーバー(FCF)
Oracle RACサービス、サービス・メンバー、ノードまたはData Guardデータベースに障害が発生しても、切断されたODP.NET接続オブジェクトは引き続きアプリケーションに存在する可能性があります。ユーザーがこれらの無効な接続の使用を試みると、エラーが発生します。FCFによって、ODP.NETは、事前にこれらの切断済の接続を迅速に解放できます。ユーザーは、サーバー側の障害後も、管理者による手動操作なしでアプリケーションを使用できます。
Oracle Database 12cでは、FCFの機能拡張により、グローバル・データ・サービスを通じたODP.NET 12cの接続に対して、Oracle Data GuardおよびOracle GoldenGateをサポートするようになりました。FCFをすでに使用している場合は、ODP.NETアプリケーションのコードを変更することなく、グローバル・データ・サービスを使用できます。
ODP.NETアプリケーションのFCFは、高可用性イベントの「HA Events
」という接続文字列属性を使用して有効にできます。HAイベントが有効の場合:
-
ODP.NET接続プールでは、グローバル・データ・サービス、Oracle RACサービス、サービス・メンバー、ノードまたはデータベースの停止時に、プールから接続が事前に削除されます。
-
ODP.NETでは、既存のコールを終了してハングを避けるため、停止したデータベースからのレスポンスを事前にスレッドで強制的に待機します。このような接続がプールに戻されると、その接続に関連付けられていたリソースは解放されます。
-
切断された接続を削除して、次の接続要求時に接続合計数が「
min pool size
」を下回った場合、ODP.NETは既存のOracleインスタンスへの接続を確立します。
デフォルトでODP.NETは、サーバーからFCF FANメッセージを受信するように設定されています。この機能を有効にしているのは、接続文字列のHA Events=true
設定とpooling=true
設定で、それぞれこれがデフォルト値です。
次の例は、HAイベントを有効にする接続文字列です。
"user id=scott;password=tiger;data source=erp;HA events=true;"
関連項目:
-
FCFで必要なOracle Net構成の設定の詳細は、Oracle Database Net Services管理者ガイドを参照
-
必要なOracle RAC構成の詳細は、Oracle Real Application Clusters管理およびデプロイメント・ガイドを参照
3.4.4 FCFの計画済停止によるサービス中断の最小化
FCFの高可用性は、ノード障害のような計画外停止だけでなく、サーバーの修復、更新、変更などの計画済停止にも有効であるため、ODP.NETアプリケーションのユーザーに対してサービスの中断を最小限に抑えることができます。
データベース・サービスを停止または再配置するように設定した場合、計画済理由コード付きでFANメッセージが発行されます。FCF対応のODP.NET接続プール(HA Events=true
)が通知を受け取ると、アイドル接続のクローズ処理が開始されて、その特定のデータベース・サービスに対する新規接続はブロックされるようになります。そのデータベース・サービスに対してアクティブだった接続は、ユーザーが各自の作業を終えて接続をプールに返すまで、アクティブの状態が続きます。これによって、計画済停止のために、ユーザーの作業を中断せずに済みます。
最終的には、すべてのユーザーが各自の作業を終えて、そのデータベース・サービスに対する接続がなくなります。その時点で、データベース管理者はサービスを停止し、計画済停止の作業に着手できます。この機能を活用することで、エンド・ユーザーの作業を妨げず、最短の時間でデータベース・サービスを停止できます。
Oracleの計画済停止サポートは、Oracle Real Application Clusters (Oracle RAC)、Oracle Data Guard、および単一インスタンスの一部のシナリオで動作します。
Oracle RACの計画済停止
Oracle RACの場合に一般的な計画済停止のシナリオは、次のとおりです。データベース・サーバー・コマンドは、Oracle RAC 12cリリース2専用です。それより前のリリースでは、コマンドが異なる場合があります。
-
データベース・サーバーのソフトウェアまたはハードウェアの問題に対してアップグレード、パッチ適用または修復を行う必要が発生します。既存のユーザーに対してエラーが多く発生しないように、インスタンスは正常に終了してください。そうする前に、すべてのユーザーが作業を完了するまで待つこともできます。全ユーザーのログアウトを待つか、所定の時刻に計画済停止を開始するかは、ビジネス要件に応じて決まります。管理者は、Oracleサーバー制御ユーティリティ(
srvctl
)を使用して次のコマンドライン操作を発行できます。srvctl relocate service –database <unique database name> –service <service name> –drain_timeout 120 –stopoption IMMEDIATE –oldinst <existing instance>
このコマンドは、既存のインスタンスから、実行場所として構成されている任意のインスタンスに、データベース・サービスの配置を変更しています。ターゲットが指定されていないため、Oracle Cluster Ready Services (CRS)コマンドラインはこのインスタンスを選択します。CRSは、アクティブなセッションが排出されるまで120秒間は待機し(
-drain_timeout 120
)、それ以降に既存のインスタンスに残っているセッションは強制的に切断されます(-stopoption IMMEDIATE
)。計画済停止とともにアプリケーション・コンティニュイティを使用している場合は、エンド・ユーザーから停止を隠すために、停止されたセッションのリカバリが試みられます。再配置操作は、新しい場所でサービスを開始してから、元の場所でサービスを停止します。即時の再配置によって、ブラウンアウトせずに排出することができます。サービスを開始できない場合は、元の場所で停止されないため、可用性は維持されません。
-
一方、接続プールでは、ODP.NET接続プールからインスタンスを停止中に、FAN計画済DOWNイベントによってアイドル・セッションがODP.NET接続プールからただちにクリアされ、そのインスタンスのアクティブ・セッションは次のチェックインで解放されるようマークされます。これらのFANアクションにより、ユーザーの作業を妨げずにセッションがインスタンスから排出されます。
他のインスタンスの既存の接続は使用可能なままで、これらのインスタンスに新しい接続をオープンできます。
-
すべてのセッションが、プールへの接続をただちにチェックされるわけではありません。タイムアウト期間は
-drain_timeout
によって指定され、それが過ぎるとインスタンスが強制的に停止されて、残っているクライアント接続が削除されます。インスタンスでアクティブなセッションが残っているかどうかは、管理者がv$session
表を問い合せてチェックすることができます。 -
アップグレード、パッチまたは修復が完了したら、元のノードでインスタンスとサービスを再起動します。FAN UPイベントは、元のマシンを再度使用できるようになったことをODP.NETプールに通知します。
Oracle Data Guardの計画済停止
計画済のフェイルオーバーが発生すると、Oracle Data Guardは、プライマリ・データベースからスタンバイ・データベースへのスイッチオーバーを実行します。スイッチオーバーの間は、管理者がエンド・ユーザーによる中断を制限したほうがよい場合があります。Oracle Database 12cリリース2以上では、管理者がData Guardのコマンドライン・インタフェース(DGMGRL
)・コマンドを使用して、プライマリとスタンバイの間でデータベースのロールを切り替えることができます。
SWITCHOVER TO <database name> [WAIT <timeout in seconds> ];
WAIT
オプションでは、スイッチオーバーを続行する前にセッションが排出されるまで待つかどうかを指定します。
Oracle RACの場合と同じように、アイドル接続をプールから削除するようFANがODP.NETに通知します。プライマリ・データベースへのアクティブな接続が残っていない状態になるまで、これ以降にチェックインされる接続は破棄され、その状態になったらスイッチオーバーが再開されます。
スタンバイへのスイッチオーバーが完了すると、スタンバイ・インスタンスへの接続を作成できるようになったことを、FAN UPイベントがODP.NETに通知します。
Data Guardがサービスを再配置している間は、サービスの再配置が完全に完了するまで、新しい受信接続リクエストは許可されません。Oracle Data Guardのスイッチオーバー中など、暫定期間に受信接続リクエストがあった場合は、接続エラーが発生します。
エラーを避けるために、ODP.NETは新しいデータベース・サービスが利用可能になるまで、接続の試行を一時停止することができます。ODP.NET管理対象ドライバおよび管理対象外ドライバでは、サービスが起動されるか、またはサービスの停止イベントを受け取ってから設定された時間制限で切れるまであらゆる接続の試行をブロックします。この機能は計画停止およびサービスの再配置に有用です。Oracle RACとOracle Data Guardで動作します。
この時間制限が、.NET構成ファイルで設定できるServiceRelocationConnectionTimeout
設定です。
3.4.5 Oracle RACデータベースにおけるプールの動作
シングルインスタンス・データベースに対して接続プールが作成された場合、プール・サイズ属性は単一のサービスに適用されます。同様に、Oracle RACデータベースに対して接続プールが作成された場合、プール・サイズ属性はサービスに適用され、サービス・メンバーには適用されません。たとえば、Min Pool Size
がN
に設定されている場合、ODP.NETでは各サービス・メンバーに対してN
個の接続を作成しません。かわりに、サービス全体に対して最小N
個の接続を作成し、サービス・メンバー間でN
個の接続が分散されます。
次のプール・サイズ接続文字列属性が、サービスに適用されます。
-
Min Pool Size
-
Max Pool Size
-
Incr Pool Size
-
Decr Pool Size
ODP.NETは、特定のノードですでに始まっている分散トランザクションで必要とされるのと同じOracle RACノードに接続します。このとき利用されるのが、Oracleランタイム接続ロード・バランシング、または使用率の低いノードに接続を切り替えるOracle RACロード・バランシング・グラビテイションです。接続プールに、この特定のノードに対するアイドル接続がない場合、ODP.NETはこのノードへの新しい接続を作成します。接続プールで使用できるアイドル接続がなくなった場合でも、ノードのアフィニティは優先されます。