Oracle Database 2日でReal Application Clustersガイド 11g リリース1(11.1) E05737-03 |
|
ワークロード管理を使用すると、ワークロードを複数のデータベース・インスタンスに分散し、ユーザーおよびアプリケーションに対するデータベースおよびクラスタのパフォーマンスを最適化できます。この章の内容は次のとおりです。
Oracle Real Application Clusters(Oracle RAC)データベースのワークロード管理を実装する際は、複数の異なる機能を使用できます。この項の内容は次のとおりです。
Oracle RACおよび単一インスタンスのOracleデータベース環境をデプロイすると、ワークロード管理機能を様々な方法で使用できます。ノードの数や環境の複雑さおよび目的に応じて、最適なワークロード管理および高可用性構成を選択します。この項では、この選択時に考慮が必要な様々な事項について説明します。
Oracle Database 10g では、サービスと呼ばれる自動ワークロード管理機能が導入されました。サービスとは、共通の属性、パフォーマンスしきい値、および優先順位を持つアプリケーションのワークロードです。単一のサービスで、1つのアプリケーション、複数のアプリケーション、または1つのアプリケーションのサブセットを表すことができます。単一のサービスをOracle RACデータベースの1つ以上のインスタンスに関連付けたり、単一のインスタンスで複数のサービスをサポートすることも可能です。サービスは、同じリソースのために競合するアプリケーションを管理するための単一のエンティティを提供し、各ワークロードを1つの単位として管理できるようにします。
ワークロードを管理するために、特定のアプリケーションまたはアプリケーションの一部の操作に割り当てるサービスを定義できます。サービスを使用して、異なるタイプの作業のワークロードを管理することもできます。たとえば、オンライン・ユーザー、バッチ処理およびレポートは、それぞれ異なるサービスを使用できます。
ユーザーまたはアプリケーションがデータベースに接続するときには、接続用のサービスを使用することをお薦めします。Oracle Databaseでは、データベースの作成時にデータベース・サービスが自動的に1つ作成されます。ほとんどのインストール環境では、このサービスのみで十分です。データベースを使用してワークロードをより柔軟に管理する場合は、複数のサービスを作成し、どのデータベース・インスタンスでサービスを提供するかを指定できます。
サービスはデータベース・リソース・マネージャに統合されます。ここで、インスタンス内のサービスで使用されるリソースを制限できます。また、Oracle Schedulerのジョブは、特定のインスタンスではなく、サービスを使用して実行できます。
サービスを作成する際に、そのサービスを通常サポートするインスタンスを定義します。このようなインスタンスを、そのサービスの優先インスタンスといいます。 また、サービスの優先インスタンスで障害が発生した場合にサービスをサポートする別のインスタンスを定義することもできます。このようなインスタンスをサービスの使用可能インスタンスといいます。
サービスの優先インスタンスを指定した場合、通常の処理では、そのサービスは優先インスタンスで稼働します。Oracle Clusterwareは、サービスがそのサービス用に構成されたすべての優先インスタンスで常に稼働している状態を維持しようとします。インスタンスに障害が発生すると、そのサービスは他の優先インスタンスまたは使用可能インスタンスのうちの1つに無作為に再配置されます。また、サービスを使用可能インスタンスに手動で再配置することもできます。サービスの作成時に優先インスタンスまたは使用可能インスタンスを指定しない場合、デフォルトでOracle RACデータベースのすべてのインスタンスがそのサービスの優先インスタンスになります。
サービスが使用可能インスタンスにフェイルオーバーした場合、そのサービスが優先インスタンスに自動的に戻ることはありません。ただし、コールアウトを使用すると、優先インスタンスへのサービスの再配置を自動化できます。コールアウトの詳細は、「FANコールアウトの概要」を参照してください。優先インスタンスにサービスを再配置するコールアウト・スクリプトの例は、Oracle Technology Networkの「Oracle Real Application Clusters Sample Code」セクション(http://www.oracle.com/technology/sample_code/products/rac/)で入手できます。
サービスに使用可能インスタンスを指定する必要はありません。ただし、サービスの優先インスタンスを構成する際にそのサービスに対して使用可能インスタンスを1つ以上指定しない場合、優先インスタンスが失敗してもサービスは他のインスタンスに再配置されません。
「未使用」としてインスタンスを指定することもできます。この設定により、サービスの優先インスタンスが失敗しても、そのサービスはインスタンスで稼働しません。
データベース・リソース・マネージャでは、ユーザー、アプリケーションおよびサービスに割り当てられたデータベース・リソースが制御されます。このアプローチにより、ユーザー、アプリケーションおよびサービスは使用可能な分のデータベース・リソースを受け取ります。また、データベース・リソース・マネージャによって、効率的に複数のアプリケーションおよび混合ワークロードをサポートするために、Oracle RACデータベースで1つ以上のノードを実行できます。
データベース・リソース・マネージャには、OracleデータベースまたはOracle RAC環境内の作業に優先度を設定する機能があります。たとえば、オンライン・ワーカーなどの優先度の高いユーザーに多くのリソースを割り当ててレスポンス時間を最短に抑え、バッチ・ジョブやレポートなどの優先度の低いユーザーには割り当てるレスポンスの量を抑えて実行時間を長くできます。この方法では、リソースをより細かく制御できます。
リソースは、データベース管理者が指定したリソース・プランに従ってユーザーに割り当てられます。リソース・プランの指定には、次の用語が使用されます。
サービスを使用して接続するユーザーは特定のリソース・コンシューマ・グループのメンバーであるため、データベース・リソース・マネージャによってリソース・コンシューマ・グループをサービスにマップできます。したがってリソース・コンシューマ・グループに対して使用可能なリソースを制限できます。
Oracle RACの高可用性フレームワークを使用すると、実行中の状態にあるデータベース、コンポーネントおよびアプリケーションを常にOracle RACで管理できます。インスタンス、コンポーネントまたはアプリケーションに障害が発生しても自動的に再起動できるため、Oracle Databaseの動作を最適な状態に保つことができます。
Oracle Databaseはサービスの可用性の維持に重点を置いています。Oracle RACでは、Oracleサービスは1つ以上のインスタンスでワークロードを共有し、継続的に使用できるように設計されています。Oracle RACの高可用性フレームワークでは、各サービスの構成情報をOracle Cluster Registry(OCR)に格納することでサービスの可用性が維持されます。Oracle Clusterwareは、サービス定義に基づいて複数のインスタンス間でサービスのリカバリおよび調整を行います。
ロード・バランシング・アドバイザは、Oracle RACデータベース・インスタンスが提供している現在のサービス・レベルについての情報をアプリケーションやクライアントに提供します。ロード・バランシング・アドバイザは、最適なパフォーマンスを得るためにデータベース・サービスのアプリケーション・リクエストをどのインスタンスに送信すべきかを、そのサービスに定義したワークロード管理ディレクティブに基づいてアプリケーションに推奨します。
ロード・バランシング・アドバイザによって示されるアドバイスでは、サーバーの処理能力およびサーバー上のサービスの現在のワークロードが考慮されます。ロード・バランシング・アドバイザを有効にすることにより、負荷が高いインスタンス、動作が遅いインスタンス、応答がないインスタンス、または障害が発生しているインスタンスで作業を行わないことによって、アプリケーションのスループットを向上させることができます。
ロード・バランシング・アドバイザを効果的に利用する方法は、ランタイム接続ロード・バランシング機能を持つ統合されたOracleクライアントを使用することです。高速アプリケーション通知(FAN)と統合されているため、Oracle Integrated Clientsでは、Oracle RACクラスタの現在のステータスを認識します。これにより、クライアント接続が、使用できなくなったインスタンスへの接続を試みたり、それを待機することを防ぎます。また、インスタンスが再起動すると、最近起動したインスタンスへの接続が接続プールによって作成され、このインスタンスが提供する追加のリソースが利用されるため、Oracle RACではFANを使用してアプリケーションの接続プールを通知します。
使用されている各サービスにサービス・レベル目標を定義して、ロード・バランシング・アドバイザを使用するようにOracle RAC環境を構成できます。これによって、そのサービスのロード・バランシング・アドバイザが有効になり、FANロード・バランシング・イベントの発行が有効になります。ランタイム接続ロード・バランシングのサービス・レベル目標には、次の2つがあります。
「ロード・バランシング・アドバイザの有効化」オプションを選択していない場合は、サービス・レベルの目標値が「なし」に設定され、そのサービスに対するロード・バランシングが無効になります。
参照:
|
Oracle Netは、クライアントおよびOracleデータベース・サーバー上に存在するソフトウェア・コンポーネントです。このコンポーネントは、クライアント・アプリケーションとサーバー間の接続を確立して維持し、業界標準プロトコルを使用してクライアントとサーバー間でメッセージを交換します。クライアント・アプリケーションとデータベースが通信するには、クライアント・アプリケーションが接続先のデータベースの場所の詳細を指定し、データベースがIDまたはアドレスなどを示す必要があります。
データベース・サーバー上には、Oracle Netリスナーが存在し、これは通常リスナーと呼ばれます。リスナーは、クライアント接続リクエストをリスニングするプロセスです。リスナーの構成ファイルはlistener.ora
です。
Net Configuration Assistant(NetCA)を使用して、データベース・サービスの単純な名前であるネット・サービス名を作成できます。ネット・サービス名は接続記述子に変換されます。これはデータベースのネットワーク・アドレスおよびデータベース・サービスの名前です。接続記述子のアドレスの一部は実際にリスナーのプロトコル・アドレスです。クライアントは接続記述子を使用して、クライアントが接続するデータベースまたはインスタンスを指定します。
ネット・サービス名を使用する場合、最初にネット・サービス名を接続記述子にマッピングしたときにデータベース・インスタンスへの接続が設定されます。このマッピング情報は、ネーミング・メソッドを使用してアクセスした情報の1つ以上のリポジトリに格納されます。最も使用されるネーミング・メソッドは、ローカル・ネーミングです。ここで、ネット・サービス名およびその接続記述子はtnsnames.ora
と呼ばれる特定の構成ファイルに格納されています。
サービスを使用してクライアントがクラスタ・データベースに接続する際に、Oracle Netの接続ロード・バランシング機能を使用して、そのサービスをサポートするすべてのインスタンス間でユーザー接続を分散できます。実装可能なロード・バランシングには、クライアント側とサーバー側の2種類のロード・バランシングがあります。Oracle RACデータベースのクライアント接続では、両方の接続ロード・バランシングを使用する必要があります。Oracle Database Configuration Assistant(DBCA)を使用してOralce RACデータベースを作成した場合、デフォルトでは、サーバー側のロード・バランシングが構成されて有効化されます。
クライアント側のロード・バランシングでは、接続リクエストをリスナー間で均等に分散します。リスナーは、接続リクエストを受信すると、リクエストされたサービスを提供することをリスナーが認識するインスタンスにユーザーを接続します。
クライアント側のロード・バランシングは、tnsnames.ora
ファイルにパラメータLOAD_BALANCE=yes
を設定して、クライアントの接続定義に定義します。このパラメータをyes
に設定すると、Oracleクライアントはアドレス・リストから無作為にアドレスを選択し、そのノードのリスナーに接続します。その結果、クラスタ内の使用可能なリスナー間で、クライアント接続が均等に分散されます。
DBCAを使用してOracle RACデータベースを作成する場合、アシスタントでは、tnsnames.ora
ファイルにロード・バランシング接続定義のサンプルが作成されます。
クライアント側のロード・バランシングには接続フェイルオーバーも含まれます。接続フェイルオーバーを使用する場合、選択したアドレスからエラーが返されると、Oracle Net Servicesはアドレス・リスト内の次のアドレスを試します。これは、接続に成功するか、アドレス・リスト内のすべてのアドレスを試すまで続けられます。
サーバー側のロード・バランシングでは、ロード・バランシング・アドバイザからの情報を使用して、リスナーにより、現在サービスを提供している最適なインスタンスに接続リクエストが転送されます。
各サービスに対して、接続ロード・バランシングの目標を設定し、リスナーでのロード・バランシングの使用方法を定義できます。接続ロード・バランシングには、長期または短期のいずれかの目標を使用できます。これらの目標の特性は次のとおりです。
DBCAを使用して作成されたサービスでは、長期の接続ロード・バランシングの目標がデフォルトで使用されます。
ランタイム接続ロード・バランシングはOracle接続プールの機能の1つです。これを使用すると、ロード・バランシング・アドバイザの情報に基づいてクライアントの作業リクエストをOracle RACデータベースのインスタンス間で分散させることができます。接続の割当ては、ロード・バランシング・アドバイザのFANイベントによる通知に従い、データベース・インスタンスが提供する現在のパフォーマンス・レベルに基づいて行われます。これにより、初期データベース接続時のロード・バランシングではなく、トランザクション・レベルでのロード・バランシングが実現します。
ランタイム接続ロード・バランシングを使用すると、アプリケーションは、ロード・バランシング・アドバイザの情報を使用して、ユーザーにより適切なパフォーマンスを提供します。Oracle JDBCおよびOracle Data Provider for .NET(ODP.NET)クライアントの接続プールは、ロード・バランシング・アドバイザの情報を使用できるように統合されています。次の構成を持つサービスを使用して、ランタイム接続ロード・バランシングのクライアント・データソースを有効にする必要があります。
図7-1「ランタイム接続ロード・バランシング」は、ランタイム接続ロード・バランシングを説明したものです。この図では、Oracle RACデータベースに3つのインスタンスがあります。ここで、インスタンス1およびインスタンス3のパフォーマンスは最適であり、インスタンス2のパフォーマンスは現在は最適ではないとロード・バランシング・アドバイザで示されているとします。暗黙的な接続キャッシュでランタイム接続ロード・バランシングが有効になっている場合、次のプロセスが発生します。
高速アプリケーション通知は、Oracle RACで他のプロセスにクラスタ構成およびサービス・レベルの情報を通知するために使用される通知メカニズムであり、この情報としてはUP
イベントやDOWN
イベントなどのステータスの変更が含まれます。FANのUP
イベントおよびDOWN
イベントは、インスタンス、サービスおよびノードに適用できます。FANでは、ロード・バランシング・アドバイザのイベントもパブリッシュされます。
クラスタ構成の変更に対しては、Oracle RACの高可用性フレームワークにより、インスタンスの状態に関して変更が発生すると同時にFANイベントがパブリッシュされます。アプリケーションは、データベースの問合せと問題の検出を待たずに、FANイベントを受信して即時に対応できます。
FANのUP
およびDOWN
イベントには、次のメリットがあります。
DOWN
イベントでは、障害が発生したインスタンスまたはノードに接続されているセッションを終了できるため、アプリケーションの中断を最小限に抑えることができます。未完了のトランザクションを終了でき、アプリケーション・ユーザーは即時に通知されます。接続をリクエストしているアプリケーション・ユーザーは、リクエストされたサービスを提供している起動済のインスタンスに送られます。
UP
イベントでは、サービスおよびインスタンスが起動されている場合、アプリケーションが追加のリソースを即時に利用できるように、新しい接続を作成できます。
FANコールアウトは、高可用性イベントの発生と同時にOracle RACによって実行されるサーバー側の実行可能ファイルです。クラスタ構成でのイベントの発生時に実行されるアクションを、FANコールアウトを使用して自動化する例を次に示します。
FANコールアウトの実行可能ファイルは、CRSホーム・ディレクトリのracg/usrco
サブディレクトリに格納されます。このサブディレクトリがCRSホームにない場合は、CRS_home/racg/tmp
サブディレクトリと同じ権限および所有者でこのディレクトリを作成する必要があります。
Oracle Clusterwareを実行するすべてのノードに、FANコールアウトで使用される実行可能ファイルのコピーを用意しておく必要があります。サンプルのコールアウト・スクリプトは、Oracle Technology Networkの「Oracle Real Application Clusters Sample Code」セクション(http://www.oracle.com/technology/sample_code/products/rac/)で入手できます。
参照:
|
Oracle Enterprise Manager Database Controlを使用してサービスを作成できます。
「可用性」ページが表示されます。
「クラスタ管理データベース・サービス」ページが表示されます。
「サービスの作成」ページが表示されます。
DEVUSERS
など)を入力します。
LOW_GROUP
というコンシューマ・グループを選択すると、開発ユーザーに与えるデータベース・リソースへの優先度を低くすることができます。
参照:
Oracle Enterprise Managerでは、新しく作成されたサービス用にOracle Clusterwareリソースが構成されますが、tnsnames.ora
ファイルに、対応するエントリは生成されません。
lsnrctl status
次のような新しいサービスのリストが表示されます。
Service "DEVUSERS.oracle.com" has 1 instance(s). Instance "sales1", status READY, has 2 handler(s) for this service...
新しく作成されたサービスの表示名(DEVUSERS.oracle.com
など)は、tnsnames.ora
ファイルのSERVICE_NAME
パラメータに使用する値です。
/network/admin
ディレクトリのtnsnames.ora
ファイルを変更します。次のようなエントリを追加して各ノードのVIPアドレスを指定します。
DEVUSERS = (DESCRIPTION = (ADDRESS_LIST = Service (ADDRESS = (PROTOCOL = TCP)(HOST = docrac1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = docrac2-vip)(PORT = 1521)) (LOAD_BALANCE = yes) ) (CONNECT_DATA = (SERVICE_NAME = DEVUSERS.oracle.com)) )
前述の例では、パラメータADDRESS_LIST
には、サービスの優先インスタンスまたは使用可能インスタンスのいずれかとして構成されたインスタンスを含む各ノードの1つのADDRESS
が含まれています。
$ sqlplus system@DEVUSERS Enter password: password
パスワードを入力すると、Oracle RACデータベースに正常に接続したことを示すメッセージが表示されます。エラー・メッセージが表示された場合は、tnsnames.ora
ファイルを調査して、ユーザー名、パスワードおよびサービス名が正しく入力されたか、Oracle RAC環境のすべての情報が正しいかを検証します。
Oracle Enterprise Managerでサービスを作成および管理できます。大部分のサービス管理タスクには、PL/SQLパッケージDBMS_SERVICE
およびSRVCTLユーティリティも使用できます。
次の項では、クラスタ・データベース用のサービスの管理方法について説明します。
「クラスタ管理データベース・サービス」ページは、サービス関連のすべてのタスクを開始するマスター・ページです。このページにアクセスするには、「クラスタ・データベース: メンテナンス」ページに移動し、「サービス」セクションの「クラスタ管理データベース・サービス」をクリックします。このページとページ内のリンクを使用して、次の操作を実行できます。
Oracle Enterprise Managerを使用してサービスを管理する際に、「クラスタ管理データベース・サービス」ページを使用します。
「クラスタ管理データベース・サービス」ページで、次のタスクを実行できます。
「クラスタ管理データベース・サービス: クラスタおよびデータベースのログイン」ページが表示されます。
「クラスタ管理データベース・サービス」ページが表示され、そのクラスタ・データベース・インスタンス上で使用可能なサービスが表示されます。
任意のサービス用の「クラスタ管理データベース・サービス: 詳細」ページでは、次のタスクを実行できます。
「クラスタ管理データベース・サービス: クラスタおよびデータベースのログイン」ページが表示されます。
「クラスタ管理データベース・サービス」ページが表示され、そのクラスタ・データベース・インスタンス上で使用可能なサービスが表示されます。
そのサービスの「クラスタ管理データベース・サービス: 詳細」ページが表示されます。次のスクリーンショットに、DEVUSERSサービスの詳細ページが表示されます。
サービスの作成時には、サービスのパフォーマンスを測定するためのしきい値を指定できます。サービスが指定したしきい値を超えると、自動ワークロード・リポジトリ(AWR)からアラートが生成され、Oracle Enterprise Managerによって表示されます。
パフォーマンス関連の統計、待機イベントおよびアクティブ・セッションは、サービス・レベルで監視されます。また、AWRでは、サービスを使用してパフォーマンスを監視できます。AWRによって、SQL実行時間、待機クラス、サービスによって消費されたリソースなどのサービス・パフォーマンスが記録されます。
サービスを作成する際、「経過時間のしきい値」または「CPU時間のしきい値」の値を指定できます。これらのメトリックに対して「警告およびクリティカル」のしきい値を指定できます。
「クラスタ・データベース・インスタンス: ホーム」ページが表示されます。
「メトリックとポリシー設定」ページが表示されます。
「詳細設定の編集」ページが表示されます。
「メトリックとポリシー設定」ページが表示されます。
フェイルオーバーを自動化する場合、考慮する主要な要素が2つあります。1つは、新規の本番データベースへの接続が試行される前のTCP/IPネットワーク・タイムアウトを避けるために、障害発生時に接続されているクライアントに障害が発生したことを迅速かつ自動で通知する必要があることです(タイムアウトの範囲は8分から2時間の間で、オペレーティング・システムによって異なります)。Oracle RAC構成では、高速アプリケーション通知(FAN)を使用してJDBCクライアント、OCIクライアントおよびODP.NETクライアントに通知します。FANイベント通知およびコールアウトによって、プライマリ・サイトでの障害発生時にクライアントが自動かつ迅速にリダイレクトできます。
2つ目のクライアント・フェイルオーバーの主要な要素は、フェイルオーバー発生後の新規インスタンスへのクライアントのリダイレクトで、これはサービスを使用して実装できます。Oracle RACデータベースでのサービス作成時にサービスを割り当てたインスタンスが使用できなくなった場合、Oracle RACでは、データベースで使用可能なインスタンスにサービスを再配置します。接続リクエストが入るときにどのインスタンスが現在サービスを提供しているかを、リスナー登録を使用してクラスタ内のすべてのリスナーが認識できるようにするために、ユーザーはインスタンスから独立したサービスにアクセスできます。
この項では、アプリケーション・クライアントのFANを構成します。この項には次のトピックが含まれます。
アプリケーションでJDBC開発環境をThickおよびThin JDBCクライアントに使用できます。JDBCの暗黙的な接続キャッシュを使用して、高速接続フェイルオーバーおよびランタイム接続ロード・バランシングのFAN機能を有効にする必要があります。この項ではJDBC(Java Database Connectivity)クライアント・フェイルオーバーの構成方法を説明します。
DataSource
プロパティFastConnectionFailoverEnabled
をTRUE
に設定して、JDBCクライアントの高速接続フェイルオーバーを有効化します。次に例を示します。
OracleDataSource ods; ods = new OracleDataSource(); ... ods.setConnectionCachingEnabled(True); ods.setFastConnectionFailoverEnabled(True); ods.setConnectionCacheName("MyCache"); ods.setConnectionCacheProperties(cp);
oracle.net.ns.SQLnetDef.TCP_CONNTIMEOUT_STR
プロパティをデータ・ソース上でゼロ以外の値に設定します(暗黙的な接続キャッシュ上では設定しません)。JDBCクライアントがこのプロパティの設定時に、使用できないホストに接続しようとした場合、接続試行はoracle.net.ns.SQLnetDef.TCP_CONNTIMEOUT_STR
に対して指定した時間にバインドされます。指定した時間が過ぎても接続に成功しない場合、クライアントはアドレス・リストにある次のホストに接続しようとします。ほとんどのインストールに対して十分なプロパティの設定値は3秒です。
Sales_JDBC = (DESCRIPTION = (ADDRESS=(PROTOCOL=TCP)(HOST=docrac1_vip)(PORT=1521)) (ADDRESS=(PROTOCOL=TCP)(HOST=docrac2_vip)(PORT=1521)) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = Sales_JDBC) ) )
JDBC ThinドライバではOracle Netを使用しないため、JDBC Thinドライバを使用する場合は、URLに完全な接続記述子を含む必要があります。
ods.setONSConfiguration("docrac1_vip:6200,docrac2_vip:6200");
リモートONSサブスクリプションでは、クライアント・アプリケーションでフェイルオーバーに使用できるすべてのホストが指定されている必要があります。さらにすべてのONS通信にセキュア・ソケット・レイヤー(SSL)を使用します。次に例を示します。
ods.setONSConfiguration("nodes=docrac1_vip:6200, docrac2_vip:6200 walletfile=/mydir/conf/Wallet");
参照:
|
この項では、FANイベントを使用したフェイルオーバーのOracle Call Interface(OCI)クライアントを構成する方法について説明します。
サービスを優先したプライマリ・インスタンスを構成する必要があります。「サービス・プロパティ」で「透過アプリケーション・フェイルオーバー・ポリシー」を「基本」に設定します。「通知プロパティ」では、「OCIおよびODP.NETアプリケーションでの高速アプリケーション通知の有効化」を選択します。
Oracle Enterprise Managerを使用したサービスの変更の詳細は「サービスの管理」を参照してください。
OCI_EVENTS
パラメータで環境を初期化して、OCIクライアントのFANを有効化します。次に例を示します。
OCIEnvCreate(...OCI_EVENTS...)
libthread
またはlibpthread
にリンクします。
OCIAttrSet(envhp, (ub4) OCI_HTYPE_ENV, (dvoid *)evtcallback_fn, (ub4) 0, (ub4)OCI_ATTR_EVTCBK, errhp); OCIAttrSet(envhp, (ub4) OCI_HTYPE_ENV, (dvoid *)evtctx, (ub4) 0, (ub4)OCI_ATTR_EVTCTX, errhp);
イベントのコールバックとコンテキストを登録した後、OCIは高可用性イベントが発生するたびに登録された関数を1回コールします。
参照:
|
Oracleインスタンスに予期せず接続される場合、透過アプリケーション・フェイルオーバー(TAF)によって、他のOracleインスタンスへフェイルオーバーがシームレスに試行されます。フェイルオーバーに時間がかかることがあるため、TAFコールバックによってアプリケーションにその遅延を通知する必要がある場合があります。ODP.NETではOracleConnection
オブジェクトのFailoverイベントによってTAFコールバックをサポートします。TAFコールバックを受信するには、イベント・ハンドラ機能をOracleConnection
オブジェクトのFailover
イベントで登録する必要があります。また、接続パラメータenlist
はTAFを機能させるためにfalse
に設定する必要があります。
ODP.NETを有効化する手順は、FCFの有効化に接続文字列内でのパラメータの設定が必要という点で、JDBCを有効化する手順と似ています。この項では、FANイベントを使用してフェイルオーバーのOracle Data Provider for .NET(ODP.NET)クライアントを構成する方法を説明します。
サービスを優先したプライマリ・インスタンスを構成する必要があります。「サービス・プロパティ」で「透過アプリケーション・フェイルオーバー・ポリシー」を「基本」に設定します。「通知プロパティ」では、「OCIおよびODP.NETアプリケーションでの高速アプリケーション通知の有効化」を選択します。「接続ロード・バランシングの目標」を「長い」に設定します。
ha events
接続文字列属性を接続時にtrue
に設定します。これは、接続プールを使用している場合にのみ機能します。つまり、pooling
属性をtrue
に設定する必要があります。次に例を示します。この例で、usernameは接続先のデータベース・ユーザーの名前を、passwordはそのユーザーのデータベース・パスワードを示します。
// C#
using System;
using Oracle.DataAccess.Client;
class HAEventEnablingSample
{
static void Main()
{
OracleConnection con = new OracleConnection();
// Open a connection using ConnectionString attributes
// Also, enable "load balancing"
con.ConnectionString =
"User Id=username;Password=password
;Data Source=oracle;" +
"Min Pool Size=10;Connection Lifetime=120;Connection Timeout=60;" +
"HA Events=true;Incr Pool Size=5;Decr Pool Size=2";
con.Open();
// Create more connections and carry out work against the DB here.
// Dispose OracleConnection object
con.Dispose();
}
}
参照:
|
Oracle Net Servicesによってインスタンスへの接続が確立されると、クライアントが接続をクローズするか、インスタンスが停止するか、または障害が発生するまで、接続はオープン状態のまま維持されます。接続に透過的アプリケーション・フェイルオーバー(TAF)を構成すると、インスタンスで障害が発生した場合、Oracle RACでは、障害が発生していないインスタンスにセッションが移動されます。
TAFでは、フェイルオーバーが完了すると問合せは再開できますが、INSERT
、UPDATE
、DELETE
などの他のトランザクションの場合、アプリケーションで、失敗したトランザクションをロールバックして再度送信する必要があります。フェイルオーバーが発生したら、セッションのカスタマイズ(つまりALTER
SESSION
文)を再実行する必要があります。
Oracle By Example(OBE)には、Oracle Database 11g リリース1の高可用性機能に関する一連のチュートリアルが含まれています。このOBEには、Oracle Enterprise ManagerおよびPL/SQLを使用した、Oracle RAC環境でのTAFの設定方法が示されています。
透過的アプリケーション・フェイルオーバーに関するOBEのチュートリアルを表示するには、次のURLに移動します。
http://www.oracle.com/technology/obe/10gr2_db_vmware/ha/rac/rac.htm
|
Copyright © 2006, 2008 Oracle Corporation. All Rights Reserved. |
|