ヘッダーをスキップ
Oracle Database JDBC開発者ガイド
11gリリース2(11.2)
B56281-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

B Oracle RAC高速アプリケーション通知

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高速アプリケーション通知の概要

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高速アプリケーション通知を使用することをお薦めします。


注意:

  • 独自の接続キャッシュを実装しない場合は、Universal Connection Poolを使用し、Oracle RAC高速アプリケーション通知の利点を他の多くの利点とあわせてすべて活用することをお薦めします。Universal Connection Poolingの詳細は、『Oracle Universal Connection Pool for JDBC開発者ガイド』を参照してください。

  • Oracle Database 11gリリース2(11.2)から、暗黙的な接続キャッシュは非推奨となり、Universal Connection Pool(UCP)for JDBCがこれに置き換わりました。新しいアーキテクチャは、以前より強力でパフォーマンスも向上しているため、こちらを使用することをお薦めします。詳細は、次のリンクを参照してください。

    http://www.oracle.com/technology/tech/java/sqlj_jdbc/index.html
    

Oracle RAC FAN APIを使用すると、Oracle RACによって送信されるFANイベント通知の、アプリケーション・コードによる受信と応答が可能になります。これは、コードが次の方法によりFANイベントに応答できるようにすることで実現します。

この機能により、FANイベントのサブセットが公開されます。これはOracle RACを実行しているクラスタによって送信される通知で、サブスクライバにクラスタ内の構成変更を通知します。サポートされているFANイベントは、次のとおりです。


注意:

独自の接続キャッシュを実装する場合にかぎり、Oracle RAC高速アプリケーション通知を使用することをお薦めします。それ以外の場合は、Universal Connection Poolを使用して、Oracle RAC高速アプリケーション通知の利点を、他の多くの利点ともども、すべて活用することをお薦めします。Universal Connection Poolingの詳細は、『Oracle Universal Connection Pool for JDBC開発者ガイド』を参照してください。

Oracle RAC高速アプリケーション通知のインストールおよび構成

Oracle RAC FAN APIをインストールするには、次の手順を実行します。

  1. 次のリンクからsimplefan.jarファイルをダウンロードします。

    http://www.oracle.com/technology/tech/java/sqlj_jdbc/index.html
    
  2. simplefan.jarファイルをクラスパスに追加します。

  3. Javaコードで次の操作を実行します。

    1. getInstanceメソッドを使用して、FanManagerクラスのインスタンスを取得します。

    2. 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』を参照してください。

ONSの構成

Oracle RAC FANイベントのJava APIはOracle Notification System(ONS)サービスに依存しています。この項では、ONSを構成する方法について説明します。内容は次のとおりです。

ONS構成ファイルの概要

ONS構成は、ONSの構成ファイルORACLE_HOME/opmn/conf/ons.configによって制御されます。このファイルは、ONSデーモンに動作方法を指示します。ons.config内の構成情報は、単純な名前と値のペアで定義されています。

ons.configファイルのパラメータには必須のものとオプションのものがあります。表B-1は必須のONS構成パラメータを示し、表B-2はオプションのONS構成パラメータを示します。

表B-1 必須のONS構成パラメータ

パラメータ 説明

localport

ローカル・クライアントと通信するために、ONSがローカル・ホスト・インタフェースでバインドするポート。

たとえば、localport=4100です。

remoteport

他のONSデーモンと通信するために、ONSがすべてのインタフェースでバインドするポート。

たとえば、remoteport=4200です。

nodes

通信相手である他のONSデーモンのリスト。ノード値は、ホスト名またはIPアドレスにポートを追加したもののカンマ区切りのリストとして指定します。提供するポート値は、各ONSインスタンスがリスニングしているリモート・ポートです。全ノードで同一のファイルを維持するために、現行のONSノードのhost:portをノード・リストに含めることも可能です。リストの読取り時には、これは無視されます。

たとえば、nodes=myhost.example.com:4200,123.123.123.123:4200です。

ノード行にリスト表示されているノードは、Oracle RACインスタンス内の個別のノードに対応します。ノードをリストに含めることにより、中間層ノードはOracle RACノードと確実に通信できます。最低1つの中間層ノードと、1つのOracle RACインスタンス内のノードを構成しないと、互いが認識されません。それぞれの側で最低1つのノードが互いを認識していると、すべてのノードが認識されます。各Oracle RACノードのONS構成ファイルでは、すべての単一クラスタおよび中間層ノードをリスト表示する必要はありません。特に、1つのONS構成ファイル・クラスタ・ノードが中間層を認識している場合、クラスタ内のすべてのノードが中間層を認識しています。


表B-2 オプションのONS構成パラメータ

パラメータ 説明

loglevel

ONSがログに記録するメッセージ・レベル。この値は、1(ログに記録されるメッセージ量は最小)から9(ログに記録されるメッセージ量は最大)までの整数値です。デフォルト値は3です。

たとえば、loglevel=3です。

logfile

ONSがメッセージのロギングに使用するログ・ファイル。ログ・ファイルのデフォルト値は$ORACLE_HOME/opmn/logs/ons.logです。

たとえば、logfile=/private/oraclehome/opmn/logs/myons.logです。

walletfile

Oracle Secure Sockets Layer(SSL)がSSL証明書の格納に使用するウォレット・ファイル。ONSでウォレット・ファイルが指定されると、他のONSインスタンスとの通信時にSSLを使用し、接続しようとするすべてのONSインスタンスからSSL証明書の認証を要求します。つまり、1つのONSインスタンスでSSLを有効にする場合、このインスタンスと接続されているすべてのインスタンスでも有効にする必要があります。この値は、ewallet.p12ファイルが存在するディレクトリを指すように設定します。

たとえば、walletfile=/private/oraclehome/opmn/conf/ssl.wlt/defaultです。

useocr

ONSがすべてのOracle RACノードおよびポート番号を、ONS構成ファイルでなくOracle Cluster Registry (OCR)に格納するかどうかを示す、サーバー側での使用のために予約されている値。useocr=onの場合、すべてのOracle RACノードおよびポート番号がOracle Cluster Registry (OCR)に格納されます。

このオプションは、クライアント側では使用しないでください。


ons.configファイルでは、ナンバー記号(#)で始まる行に空白行およびコメントを使用できます。

クライアント側ONSの構成

クライアント側のONSには、ORACLE_HOME/opmnを介してアクセスできます。クライアント側でONSを設定するには、次の2つの方法があります。

例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コマンド

コマンド 効果 出力

start

ONSデーモンを起動

onsctl: ons started

stop

ONSデーモンを停止

onsctl: shutting down ons daemon...

ping

ONSデーモンが稼働中であるかどうかを検証

ons is running ...

reconfig

ONSデーモンをシャットダウンせずにONS構成のリロードをトリガー


help

onsctlのヘルプ・サマリー・メッセージを出力


detailed

onsctlの詳細ヘルプ・メッセージを出力




関連項目:

『Oracle Real Application Clusters管理およびデプロイメント・ガイド』

Oracle RAC高速アプリケーション通知の使用

例B-2は、Oracle RAC高速アプリケーション通知のコードでの使用例を示しています。このコード例では、イベント・データを標準出力デバイスに出力します。

このコード例は、handleFanEventメソッドをオーバーロードして異なるFANイベント通知を引数として受け入れることによってOracle RAC FAN APIを使用する方法を示しています。また、次のイベント・データも示しています。

例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を使用するために接続キャッシュを実装します。