Oracle Database 11gリリース2(11.2)では、新しいセットのOracle RAC高速アプリケーション通知(FAN)イベントのAPIが導入されました。ユニバーサル接続プールまたはOracle JDBC接続キャッシュを使用しない場合にも、これらのAPIを使用するとOracle Databaseの高可用性(HA)機能を利用できます。これらのAPIはOracle JDBC APIの一部ではありません。
この付録の内容は次のとおりです。
この機能はOracle Notification System(ONS)メッセージ・トランスポート・メカニズムに依存しています。ONSを使用するには、システム、サーバーおよびクライアントで構成が必要です。
Oracle RAC高速アプリケーション通知を使用するには、simplefan.jar
ファイルがクラス・パスに存在するか、ons.jar
ファイルがクラス・パスに存在するか、Oracle Notification Services (ONS)クライアントがクライアント・システムにインストールされ、稼働している必要があります。
Oracle RAC高速アプリケーション通知(FAN)機能は、コールバック・メカニズムによるFANイベントへのアクセス用に簡略化されたAPIを提供します。このメカニズムを使用すると、FANイベントが発生したときに、アプリケーション・コードでコールバックを受信できます。これらのAPIを、この付録ではOracle RAC FAN APIと呼んでいます。
Oracle RAC FAN APIは、Oracle Database HA機能をフルに活用して、反応のよいアプリケーションを開発するために役立つFANイベント通知です。Universal Connection Poolを使用するのでなく、独自の接続キャッシュを実装してFANイベントと連携するには、Oracle RAC高速アプリケーション通知を使用することをお薦めします。
注意:
|
Oracle RAC FAN APIを使用すると、Oracle RACによって送信されるFANイベント通知の、アプリケーション・コードによる受信と応答が可能になります。これは、コードが次の方法によりFANイベントに応答できるようにすることで実現します。
Oracle RACサービスの停止イベント、サービスの起動イベントおよびノードの停止イベントのリスニング
ロード・バランシング・アドバイザ・イベントのリスニングと、それらに対する応答
この機能により、FANイベントのサブセットが公開されます。これはOracle RACを実行しているクラスタによって送信される通知で、サブスクライバにクラスタ内の構成変更を通知します。サポートされているFANイベントは、次のとおりです。
サービス起動
サービス起動イベントは、管理されているリソースが稼働中で使用可能であることを通知します。クラスタが管理するデータベース・サービスがアクティブになり、クラスタ内でインスタンスでの作業を受け入れるために使用可能になると、クラスタでは、サービス起動イベントを送信します。
サービス停止
サービス停止イベントは、管理されているリソースが停止していてアクセスで使用できないことを通知します。サービス停止イベントには、次の2種類があります。
サービスの特定のインスタンスが停止していることを通知するイベント。このインスタンスは作業を受け入れることができません。
サービスのすべてのインスタンスが停止していることを通知するイベント。このサービスは作業を受け入れることができません。
サービスの最後のインスタンスが停止すると、サブスクライバは両方のイベントを受信します。これらのイベントは一緒に受信することもありますが、そうでない場合もあります。
ノード停止
ノード停止イベントは、ホスト識別子で識別されるOracle RACノードが停止していて使用不可であることを通知します。クラスタは、ノードで作業を受け入れられなくなると、ノード停止イベントを送信します。
ロード・バランシング・アドバイザ
ロード・バランシング・アドバイザ・イベントはロード・バランシング・アルゴリズムのためのメトリックを提供します。ロード・バランシング・アドバイザは、使用可能なノード間で推奨される作業分散についてサブスクライバに知らせるために定期的に送信されます。
注意: 独自の接続キャッシュを実装する場合にかぎり、Oracle RAC高速アプリケーション通知を使用することをお薦めします。それ以外の場合は、Universal Connection Poolを使用して、Oracle RAC高速アプリケーション通知の利点を、他の多くの利点ともども、すべて活用することをお薦めします。Universal Connection Poolingの詳細は、『Oracle Universal Connection Pool for JDBC開発者ガイド』を参照してください。 |
Oracle RAC FAN APIをインストールするには、次の手順を実行します。
次のリンクからsimplefan.jar
ファイルをダウンロードします。
http://www.oracle.com/technology/tech/java/sqlj_jdbc/index.html
simplefan.jar
ファイルをクラスパスに追加します。
Javaコードで次の操作を実行します。
getInstance
メソッドを使用して、FanManager
クラスのインスタンスを取得します。
FanManager
クラスのconfigure
メソッドを使用して、イベント・デーモンを構成します。configure
メソッドでは、次のプロパティを設定します。
onsNodes
: このJava VMのONSランタイムが通信するONSデーモンのhost:port
ペアのカンマ区切りリスト。host:port
ペアのhost
は、ONSデーモンを実行しているシステムのホスト名です。port
は、そのデーモンのローカルのポート構成パラメータです。
onsWalletFile
: ONSウォレット・ファイルのパス名。ウォレット・ファイルは、SSL証明書の格納にSSLが使用するローカルのウォレット・ファイルのパスです。ONSデーモンのウォレット・ファイル構成パラメータと同様です。
onsWalletPassword
: ONSウォレット・ファイルにアクセスするためのパスワード。
Oracle RAC FAN APIの詳細は、『Oracle Database RAC FAN Events Java API Reference』を参照してください。
Oracle RAC FANイベントのJava APIはOracle Notification System(ONS)サービスに依存しています。この項では、ONSを構成する方法について説明します。内容は次のとおりです。
ONS構成は、ONSの構成ファイルORACLE_HOME
/opmn/conf/ons.config
によって制御されます。このファイルは、ONSデーモンに動作方法を指示します。ons.config
内の構成情報は、単純な名前と値のペアで定義されています。
ons.config
ファイルのパラメータには必須のものとオプションのものがあります。表B-1は必須のONS構成パラメータを示し、表B-2はオプションのONS構成パラメータを示します。
表B-1 必須のONS構成パラメータ
パラメータ | 説明 |
---|---|
|
ローカル・クライアントと通信するために、ONSがローカル・ホスト・インタフェースでバインドするポート。 たとえば、 |
|
他のONSデーモンと通信するために、ONSがすべてのインタフェースでバインドするポート。 たとえば、 |
|
通信相手である他のONSデーモンのリスト。ノード値は、ホスト名またはIPアドレスにポートを追加したもののカンマ区切りのリストとして指定します。提供するポート値は、各ONSインスタンスがリスニングしているリモート・ポートです。全ノードで同一のファイルを維持するために、現行のONSノードの たとえば、 ノード行にリスト表示されているノードは、Oracle RACインスタンス内の個別のノードに対応します。ノードをリストに含めることにより、中間層ノードはOracle RACノードと確実に通信できます。最低1つの中間層ノードと、1つのOracle RACインスタンス内のノードを構成しないと、互いが認識されません。それぞれの側で最低1つのノードが互いを認識していると、すべてのノードが認識されます。各Oracle RACノードのONS構成ファイルでは、すべての単一クラスタおよび中間層ノードをリスト表示する必要はありません。特に、1つのONS構成ファイル・クラスタ・ノードが中間層を認識している場合、クラスタ内のすべてのノードが中間層を認識しています。 |
表B-2 オプションのONS構成パラメータ
パラメータ | 説明 |
---|---|
|
ONSがログに記録するメッセージ・レベル。この値は、1(ログに記録されるメッセージ量は最小)から9(ログに記録されるメッセージ量は最大)までの整数値です。デフォルト値は3です。 たとえば、 |
|
ONSがメッセージのロギングに使用するログ・ファイル。ログ・ファイルのデフォルト値は たとえば、 |
|
Oracle Secure Sockets Layer(SSL)がSSL証明書の格納に使用するウォレット・ファイル。ONSでウォレット・ファイルが指定されると、他のONSインスタンスとの通信時にSSLを使用し、接続しようとするすべてのONSインスタンスからSSL証明書の認証を要求します。つまり、1つのONSインスタンスでSSLを有効にする場合、このインスタンスと接続されているすべてのインスタンスでも有効にする必要があります。この値は、 たとえば、 |
|
ONSがすべてのOracle RACノードおよびポート番号を、ONS構成ファイルでなくOracle Cluster Registry (OCR)に格納するかどうかを示す、サーバー側での使用のために予約されている値。 このオプションは、クライアント側では使用しないでください。 |
クライアント側のONSには、ORACLE_HOME
/opmn
を介してアクセスできます。クライアント側でONSを設定するには、次の2つの方法があります。
リモートONS構成
クライアント側のONSデーモン
例B-1は、構成ファイルの例を示しています。
例B-1 ons.configサンプル・ファイルの例
# This is an example ons.config file # # The first three values are required localport=4100 remoteport=4200 nodes=racnode1.example.com:4200,racnode2.example.com:4200
ONSを構成した後、onsctl
コマンドでONSデーモンを起動します。ONSデーモンが常に稼働中であるかどうかは、ユーザーが確認する必要があります。
onsctlコマンドの使用
構成後、ORACLE_HOME
/opmn/bin/onsctl
を使用してONSデーモンの起動、停止、再構成および監視を行います。表B-3は、onsctl
でサポートされているコマンドのサマリーを示しています。
表B-3 onsctlコマンド
コマンド | 効果 | 出力 |
---|---|---|
|
ONSデーモンを起動 |
|
|
ONSデーモンを停止 |
|
|
ONSデーモンが稼働中であるかどうかを検証 |
|
|
ONSデーモンをシャットダウンせずにONS構成のリロードをトリガー |
|
|
onsctlのヘルプ・サマリー・メッセージを出力 |
|
|
onsctlの詳細ヘルプ・メッセージを出力 |
関連項目: 『Oracle Real Application Clusters管理およびデプロイメント・ガイド』 |
例B-2は、Oracle RAC高速アプリケーション通知のコードでの使用例を示しています。このコード例では、イベント・データを標準出力デバイスに出力します。
このコード例は、handleFanEvent
メソッドをオーバーロードして異なるFANイベント通知を引数として受け入れることによってOracle RAC FAN APIを使用する方法を示しています。また、次のイベント・データも示しています。
FANイベント通知を送信するシステムの名前
FANイベント通知のタイムスタンプ
FANイベント通知のロード・ステータス
例B-2 Oracle RAC FAN APIを使用するサンプル・コードの例
... ...Properties props = new Properties(); props.putProperty(“serviceName”, “gl”); FanSubscription sub = FanManager.getInstance().subscribe(props); sub.addListener(new FanEventListener()) { public void handleFanEvent(ServiceDownEvent event) { try { System.out.println(event.getTimestamp()); System.out.println(event.getServiceName()); System.out.println(event.getDatabaseUniqueName()); System.out.println(event.getReason()); ServiceMemberEvent me = se.getServiceMemberEvent(); if (me != null) { System.out.println(me.getInstanceName()); System.out.println(me.getNodeName()); System.out.println(me.getServiceMemberStatus()); } ServiceCompositeEvent ce = se.getServiceCompositeEvent(); if (ce != null) { System.out.println(ce.getServiceCompositeStatus()); } } catch (Throwable t) { // handle all exceptions and errors t.printStackTrace(System.err); } } public void handleFanEvent(NodeDownEvent event) { try { System.out.println(event.getTimestamp()); System.out.println(ne.getNodeName()); System.out.println(ne.getIncarnation()); } catch (Throwable t) { // handle all exceptions and errors t.printStackTrace(System.err); } } public void handleFanEvent(LoadAdvisoryEvent event) { try { System.out.println(event.getTimestamp()); System.out.println(le.getServiceName()); System.out.println(le.getDatabaseUniqueName()); System.out.println(le.getInstanceName()); System.out.println(le.getPercent()); System.out.println(le.getServiceQuality()); System.out.println(le.getLoadStatus()); } catch (Throwable t) { // handle all exceptions and errors t.printStackTrace(System.err); } } });
Oracle RAC FAN APIを使用するには、独自の接続キャッシュを実装する必要があります。次の点を検討してから、Oracle RAC FAN APIを使用するために接続キャッシュを実装します。
Oracle RAC FAN APIでは、FANイベントの最小サブセットを提供します。
Oracle RAC FAN APIは、ONSイベントのみサポートします。対応するスーパークラスタ・イベントをアプリケーションでサポートする場合、サブスクリプション・プロパティへの追加が必要になることがあります。
Oracle RAC FAN APIによって、アプリケーション・コードがFANイベントを送信できるようにはなりません。