29 Oracle JDBCによるFANイベントのサポート
Oracle Database 12cリリース2 (12.2.0.1)以降、Oracle JDBCドライバでは計画済または計画外の停止にOracle RAC高速アプリケーション通知(FAN)イベントがサポートされています。これにより、サードパーティの接続プールが高可用性のためにOracle RAC機能を容易に利用できるようになりました。Oracleユニバーサル接続プール(UCP)またはWebLogic Serverを使用しないJavaアプリケーションが、このサポートを利用できます。たとえば、Oracle RACサーバー側のローリング・アップグレードなどのシナリオでは、アプリケーション内でJDBCエラーが発生しません。
ノート:
Oracle JDBCドライバではFANイベントがサポートされていますが、Oracle UCPではすべてのFANイベントに対してより包括的なサポートが提供されています。
29.1 Oracle JDBCによるFANイベントのサポートの概要
この機能を使用するには、単一インスタンスのデータベースでOracle RACデータベースまたはOracle Restartを使用する必要があります。この機能により、次がサポートされています。
-
計画済のメンテナンス
これはOracle RACサーバー上で計画済メンテナンスに対応しており、Oracle RACサービスは正常に停止できます。この場合、接続プールから流用された接続または使用中の接続は中断されず、安全なドレイニングを行うAPIが起動されて初めてクローズされます。たとえば、アプリケーションが接続などの作業を終了してこれを接続プールに戻すときなどです。
-
計画外停止
この場合、無効な接続はただちに検出されて中断され、これによりネットワーク接続がハングしないように切断されます。この場合、流用された接続および使用中の接続には、計画外停止時に割込みが発生します。アプリケーションでは影響を受ける接続の例外を処理し、そのアプリケーション自体で、またはアプリケーション・コンティニュイティなどのOracle高可用性ソリューションを使用して、必要なリカバリを実行します。
関連項目:
Oracle RACを使用するサーバー側の構成は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。この章では、Oracle JDBCドライバによるFANイベントのサポートを使用している場合にアプリケーションが実行する必要がある、クライアント側の構成ステップについてのみ説明します。
29.2 計画済メンテナンスの安全なドレイニングAPI
計画済Oracle RACメンテナンスの場合、JDBCドライバでは安全なドレイニングを行うAPIのリストがサポートされています。これは、サードパーティのJava接続プールで追加のハンドシェイクまたは統合作業に必要になります。これらのAPIはドレイニングポイントとして機能し、ここでドライバは、アプリケーションでエラーが表示されずに、計画済メンテナンスで影響を受ける接続を安全にクローズします。次に、ドライバFANがサポートしている、安全なドレイニングAPIのリストを示します。
-
java.sql.Connection.isValid(int timeout)
-
oracle.jdbc.OracleConnection.pingDatabase()
-
oracle.jdbc.OracleConnection.pingDatabase(int timeout)
-
oracle.jdbc.OracleConnection.endRequest()
-
すべての標準JDBCおよびOracle JDBC拡張機能の
EXECUTE***
がStatement
、PreparedStatement
およびCallableStatement
インタフェース上でコールされます
標準JDBCおよびOracle JDBC拡張機能のEXECUTE***
コールの場合、実行したSQLコマンド文字列に次のSQLヒントがSQL文字列内で最初のコメントのないトークンとして含まれている必要があります。
/*+ CLIENT_CONNECTION_VALIDATION */
修飾SQLが接続の検証SQLとして処理されます。次に例を示します。
/*+ CLIENT_CONNECTION_VALIDATION */ SELECT 1 FROM DUAL
通常、サードパーティの接続プールは、これらのAPIにコールを実行します。このような起動での無効な接続の検出時に、アプリケーションにエラーが表示されないように、サードパーティの接続プールはプールから関連する接続をクローズし削除します。アプリケーション自体がこれらのAPIをコールすると、アプリケーションは基礎となる接続をアクティブに検証し、検出された無効な接続をクローズして削除します。
29.3 FANイベントのサポートのためのOracle JDBCドライバのインストールおよび構成
Oracle JDBCドライバは、接続するデータベース・サーバーをチェックすることにより、FANイベント用にOracle JDBCサポートを有効にするかどうか、および次の必要なJARファイルがアプリケーション環境およびOracle JDBCドライバで使用可能かどうかを自動的に判定します。
-
simplefan.jar
ファイルおよびons.jar
ファイル次のリンクから12.2.0.1バージョンの
simplefan.jar
ファイルおよびons.jar
ファイルをインストールし、これらをCLASSPATH
に含める必要があります。http://www.oracle.com/technetwork/database/application-development/jdbc/jdbc-ucp-122-3110062.html
いずれかのファイルが存在しないか、ドライバがこれをロードできない場合、この機能は無効になります。サードパーティの接続プールで使用する場合、これらのJARファイルは同じ場所に配置する必要があります。ここで接続プールがドライバのJARファイルを取得しロードします。
-
Oracle JDBCデータソース
JDBC接続の取得時に、
oracle.jdbc.pool.OracleDataSource
またはoracle.jdbc.OracleDriver
などの通常の同じOracle JDBCデータソースを使用できます。サードパーティの接続プールとともに使用する場合、アプリケーションではこれらのクラスを接続プールの接続ファクトリとして指定する必要があります。
この機能を明示的に無効にする場合、アプリケーションではoracle.jdbc.fanEnabled
プロパティをFALSE
に設定できます。このプロパティは、システム・プロパティとしても接続プロパティとしても使用できます。ユニバーサル接続プール(UCP)またはWebLogic ServerのアクティブなGridLink (AGL)を使用するアプリケーションの場合、このプロパティはデフォルトでFALSE
に設定されます。それ以外の場合は、デフォルト値はTRUE
です。
ノート:
-
JDBCドライバがFANイベントのサポートを自動的に有効化する場合、
simplefan.jar
およびons.jar
ファイルがCLASSPATH
に存在する状態でgetConnection
メソッドをコールすると、java.lang.IllegalArgumentException
などの例外がスローされる可能性があります。これを避けるには、次のいずれかを実行します。-
CLASSPATH
からsimplefan.jar
またはons.jar
を削除します。 -
oracle.jdbc.fanEnabled
プロパティをFALSE
に設定して、この機能を明示的に無効化します。
-
-
oracle.jdbc.fanEnabled
プロパティをTRUE
に設定しても、この機能が他の要因に依存しているために、FANイベントのOracle JDBCサポートが有効にならない場合があります。
JDBCドライバでは、Oracle FANイベントをサポートするために、サードパーティの接続プールに対して最小限の構成の変更またはコードの変更が必要になります。構成の変更またはコードの変更の必要がない接続プールの場合、次の基準のいずれかを満たしていると想定されます。
-
プールには、プールのチェックアウト時にJDBC接続を検証するための構成オプションがある。
-
プールは
javax.sql.PooledConnection
を使用し、javax.sql.ConnectionPoolDataSource
実装にプラグインするための構成オプションがある。このような接続プールは、接続が戻るときにクローズした物理接続または無効な物理接続をチェックできることも想定されます。
一部のサードパーティのJava接続プールの接続検証オプションのいくつかを次に示します。これらのオプションの大部分は、検証APIではなく、SQLに基づいています。
Java接続プール | 接続検証オプション |
---|---|
Oracle WebLogic汎用データソースおよびMDSデータソース |
|
IBM WebSphere |
|
RedHat JBoss |
|
Apache TomCat |
|
Oracle RACサーバー・リリース11gとともにFANイベント機能のOracle JDBCによるサポートを使用する場合、アプリケーションでは、oracle.jdbc.fanONSConfig
システム・プロパティを介してOracle RAC FANのリモートONS構成文字列を明示的に設定する必要があります。プロパティの値および書式は、UCP高速接続フェイルオーバー(FCF)と同様です。
29.4 計画済メンテナンスの場合のOracle JDBCドライバによるFANのサポートの例
次の例では、Oracle RACの計画済メンテナンスで、JDBC Oracle FANサポートを有効にして使用する通常の方法を示します。次の手順の実行後、アプリケーションでは計画済メンテナンス時に例外を受信しません。
-
Oracle JDBCドライバをリリース12.2.0.1にアップグレードして、
ojdbc8.jar
ファイルを使用します。 -
12.2.0.1バージョンの
ons.jar
ファイルおよびsimplefan.jar
ファイルをインストールして使用します。 -
oracle.jdbc.pool.OracleDataSource
クラスを使用して、物理接続を取得するか、サードパーティのJava接続プールでこのクラスを接続ファクトリとして構成します。後者の場合、特定のプール・プロパティを設定して接続検証を有効にする必要があります。Oracle RACリリース11gに対して実行している場合に、オプションで、リモートONSを構成するようにシステム・プロパティ
oracle.jdbc.fanONSConfig
を指定します。 -
アプリケーションは、Oracle RAC上のローリング・アップグレードと同様に、計画済メンテナンス・アクティビティを実行する準備ができるまで実行されます。計画済メンテナンス時に、使用パターンに基づいたサービスごとに、DBAは拡張12.2
srvctl
インタフェースを使用して、次のアクティビティを実行します。-
–f
(force)を指定しないで、次にアップグレードするインスタンスでサービスを再配置または停止します -
このサービスへのすべての接続がドライバFANでドレインされるまで待機します
-
タイムアウトに達したときに、定義した停止モードでセッションを切断します(トランザクションをお薦めします)
-
すべてのサービスを再配置または停止したときに、インスタンスを停止してアップグレードまたはパッチを適用します
-
インスタンスを再起動し、サービスが停止している場合はサービスを再起動します
-
すべてのインスタンスがアップグレード/パッチ適用されるまで、繰り返します
-