Oracle Database 12cリリース1 (12.1)では、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イベント通知。これは、コードが次の方法によりFANイベントに応答できるようにすることで実現します。
Oracle RACサービスの停止イベントおよびノードの停止イベントのリスニング
ロード・バランシング・アドバイザ・イベントのリスニングと、それらに対する応答
この機能により、FANイベントのサブセットが公開されます。これはOracle RACを実行しているクラスタによって送信される通知で、サブスクライバにクラスタ内の構成変更を通知します。サポートされているFANイベントは、次のとおりです。
サービス停止
サービス停止イベントは、管理されているリソースが停止していてアクセスで使用できないことを通知します。サービス停止イベントには、次の2種類があります。
サービスの特定のインスタンスが停止していることを通知するイベント。このインスタンスは作業を受け入れることができません。
サービスのすべてのインスタンスが停止していることを通知するイベント。このサービスは作業を受け入れることができません。
サービスの最後のインスタンスが停止すると、サブスクライバは両方のイベントを受信します。これらのイベントは一緒に受信することもありますが、そうでない場合もあります。
ノード停止
ノード停止イベントは、ホスト識別子で識別されるOracle RACノードが停止していて使用不可であることを通知します。クラスタは、ノードで作業を受け入れられなくなると、ノード停止イベントを送信します。
ロード・バランシング・アドバイザ
ロード・バランシング・アドバイザ・イベントはロード・バランシング・アルゴリズムのためのメトリックを提供します。ロード・バランシング・アドバイザは、使用可能なノード間で推奨される作業分散についてサブスクライバに知らせるために定期的に送信されます。
注意: 独自の接続キャッシュを実装する場合にかぎり、Oracle RAC高速アプリケーション通知を使用することをお薦めします。それ以外の場合は、Universal Connection Poolを使用して、Oracle RAC高速アプリケーション通知の利点を、他の多くの利点ともども、すべて活用することをお薦めします。ユニバーサル接続プールの詳細は、『Oracle Universal Connection Pool for JDBC開発者ガイド』を参照してください。 |
Oracle RAC FAN APIをインストールするには、次の手順を実行します。
次のリンクからsimplefan.jar
ファイルをダウンロードします。
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.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』を参照してください。
例B-1は、Oracle RAC高速アプリケーション通知のコードでの使用例を示しています。このコード例では、イベント・データを標準出力デバイスに出力します。
このコード例は、handleFanEvent
メソッドをオーバーロードして異なるFANイベント通知を引数として受け入れることによってOracle RAC FAN APIを使用する方法を示しています。また、次のイベント・データも示しています。
FANイベント通知を送信するシステムの名前
FANイベント通知のタイムスタンプ
FANイベント通知のロード・ステータス
例B-1 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イベントを送信できるようにはなりません。