34 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イベントに対してより包括的なサポートが提供されています。34.1 Oracle JDBCによるFANイベントのサポートの概要
この機能を使用するには、単一インスタンスのデータベースでOracle RACデータベースまたはOracle Restartを使用する必要があります。
この機能により、次がサポートされています。
-
計画済のメンテナンス
これはOracle RACサーバー上で計画済メンテナンスに対応しており、Oracle RACサービスは正常に停止できます。この場合、接続プールから流用された接続または使用中の接続は中断されず、安全なドレイニングを行うAPIが起動されて初めてクローズされます。たとえば、アプリケーションが接続などの作業を終了してこれを接続プールに戻すときなどです。
-
計画外停止
この場合、無効な接続はただちに検出されて終了するため、サーバーへのネットワーク接続が応答しなくなることはありません。この場合、流用された接続および使用中の接続には、計画外停止時に割込みが発生します。アプリケーションでは影響を受ける接続の例外を処理し、そのアプリケーション自体で、またはアプリケーション・コンティニュイティなどのOracle高可用性ソリューションを使用して、必要なリカバリを実行します。
関連項目:
Oracle RACを使用するサーバー側の構成は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。この章では、Oracle JDBCドライバによるFANイベントのサポートを使用している場合にアプリケーションが実行する必要がある、クライアント側の構成ステップについてのみ説明します。34.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をコールすると、アプリケーションは基礎となる接続をアクティブに検証し、検出された無効な接続をクローズして削除します。
34.3 FANイベントのサポートのためのOracle JDBCドライバのインストールおよび構成
Oracle JDBCドライバは、接続するデータベース・サーバーをチェックすることにより、FANイベント用にOracle JDBCサポートを有効にするかどうか、および次の必要なJARファイルがアプリケーション環境およびOracle JDBCドライバで使用可能かどうかを自動的に判定します。
-
simplefan.jarファイルおよびons.jarファイルJDBCおよびUCPのダウンロード・ページから
simplefan.jarおよびons.jarファイルをインストールし、CLASSPATHに含める必要があります。いずれかのファイルが存在しないか、ドライバがこれをロードできない場合、この機能は無効になります。サードパーティの接続プールで使用する場合、これらの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)と同様です。
34.4 計画済メンテナンスの場合のOracle JDBCドライバによるFANのサポートの例
この項では、Oracle RACの計画済メンテナンスでJDBC Oracle FANサポートを有効にして使用する通常の方法を示します。
次の手順の実行後、アプリケーションでは計画済メンテナンス時に例外を受信しません。
-
Oracle JDBCドライバをリリース23aiにアップグレードして
ojdbc11.jarファイルかojdbc17.jarファイルを使用します。 -
23aiバージョンの
ons.jarファイルおよびsimplefan.jarファイルをインストールして使用します。 -
oracle.jdbc.pool.OracleDataSourceクラスを使用して、物理接続を取得するか、サードパーティのJava接続プールでこのクラスを接続ファクトリとして構成します。後者の場合、特定のプール・プロパティを設定して接続検証を有効にする必要があります。Oracle RACリリース21cに対して実行している場合に、オプションで、リモートONSを構成するようにシステム・プロパティ
oracle.jdbc.fanONSConfigを指定します。 -
アプリケーションは、Oracle RAC上のローリング・アップグレードと同様に、計画済メンテナンス・アクティビティを実行する準備ができるまで実行されます。計画済メンテナンス時に、使用パターンに基づいたサービスごとに、DBAは拡張
srvctlインタフェースを使用して、次のアクティビティを実行します。-
–f(force)を指定しないで、次にアップグレードするインスタンスでサービスを再配置または停止します -
このサービスへのすべての接続がドライバFANでドレインされるまで待機します
-
タイムアウトに達したときに、定義した停止モードでセッションを切断します(トランザクションをお薦めします)
-
すべてのサービスを再配置または停止したときに、インスタンスを停止してアップグレードまたはパッチを適用します
-
インスタンスを再起動し、サービスが停止している場合はサービスを再起動します
-
すべてのインスタンスがアップグレード/パッチ適用されるまで、繰り返します
-
34.5 Oracle JDBCでのサードパーティ接続プールの使用
この項では、計画停止および計画外停止をサポートするためにサードパーティ接続プールを構成するための要件を示します。
サードパーティ接続プールを構成するには、次のことを確認してください:
- ドライバでの高可用性(HA)サポートの有効化
- 接続の流用中に接続検証を強制
- 接続検証手法をチューニングしてコストを制限します。
- ドライバでの文キャッシュの有効化
前述の設定では、サードパーティ接続プールの接続で、計画停止イベント中(たとえば、インスタンスでサービスが停止した場合)にドレイニングAPIが使用されます。計画外停止を処理するには、データベース・サービスで透過的アプリケーション・コンティニュイティ(TAC)を有効にし、次のリプレイ・データ・ソースのいずれかを構成する必要があります:
oracle.jdbc.datasource.impl.OracleDataSourceとOracle Databases 23aiリリースまたはOracle Database 21cリリースoracle.jdbc.replay.OracleDataSourceとOracle Database 19cリリース
例
たとえば、HikariCPで計画停止をサポートする場合は、次の設定を処理する必要があります:
- HAサポートの確認:
ons.jarおよびsimplefan.jarファイルをクラスパスに含めます - 接続検証の確認:
com.zaxxer.hikari.aliveBypassWindowMs=-1 - 接続検証手法をチューニングします:
oracle.jdbc.defaultConnectionValidation=LOCAL - ドライバでの文キャッシュの有効化:
oracle.jdbc.implicitStatementCacheSize=50