日本語PDF

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***StatementPreparedStatementおよび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データソース

TestConnectionsOnReserveTestConnectionsOnReleaseTestConnectionsOnCreate

IBM WebSphere

PreTest接続

RedHat JBoss

check-valid-connection-sql

Apache TomCat

TestonBorrowTestonRelease

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サポートを有効にして使用する通常の方法を示します。次の手順の実行後、アプリケーションでは計画済メンテナンス時に例外を受信しません。

  1. Oracle JDBCドライバをリリース12.2.0.1にアップグレードして、ojdbc8.jarファイルを使用します。

  2. 12.2.0.1バージョンのons.jarファイルおよびsimplefan.jarファイルをインストールして使用します。

  3. oracle.jdbc.pool.OracleDataSourceクラスを使用して、物理接続を取得するか、サードパーティのJava接続プールでこのクラスを接続ファクトリとして構成します。後者の場合、特定のプール・プロパティを設定して接続検証を有効にする必要があります。

    Oracle RACリリース11gに対して実行している場合に、オプションで、リモートONSを構成するようにシステム・プロパティoracle.jdbc.fanONSConfigを指定します。

  4. アプリケーションは、Oracle RAC上のローリング・アップグレードと同様に、計画済メンテナンス・アクティビティを実行する準備ができるまで実行されます。計画済メンテナンス時に、使用パターンに基づいたサービスごとに、DBAは拡張12.2 srvctlインタフェースを使用して、次のアクティビティを実行します。

    • –f (force)を指定しないで、次にアップグレードするインスタンスでサービスを再配置または停止します

    • このサービスへのすべての接続がドライバFANでドレインされるまで待機します

    • タイムアウトに達したときに、定義した停止モードでセッションを切断します(トランザクションをお薦めします)

    • すべてのサービスを再配置または停止したときに、インスタンスを停止してアップグレードまたはパッチを適用します

    • インスタンスを再起動し、サービスが停止している場合はサービスを再起動します

    • すべてのインスタンスがアップグレード/パッチ適用されるまで、繰り返します