継続的な可用性のためのドライバの構成

この記事では、継続的な可用性のためにドライバを構成する方法について説明します。

JDBC Thinドライバの構成

  1. すべての推奨パッチがクライアントに適用されていることを確認してください。MOSノート『アプリケーション・コンティニュイティのクライアント検証マトリックス』(ドキュメントID 2511448.1)を参照してください。

  2. カバレッジおよびパフォーマンスのためのJDBC文キャッシュの使用

    カバレッジおよびパフォーマンスを最適にするためには、アプリケーション・サーバーの文キャッシュのかわりにJDBCドライバの文キャッシュを使用します。これにより、ドライバは文が閉じられたことを認識でき、リクエストの最後にメモリーを解放できます。

    JDBC文キャッシュを使用するには、接続プロパティoracle.jdbc.implicitStatementCacheSize (OracleConnection.CONNECTION_PROPERTY_IMPLICIT_STATEMENT_CACHE_SIZE)を使用します。文キャッシュは接続ごとです。キャッシュ・サイズの値は、open_cursorsの数と一致します。例:

    oracle.jdbc.implicitStatementCacheSize=nnn (nnnは通常10から100の間で、アプリケーションが保持するオープン・カーソルの数と同じです)。

  3. ガベージ・コレクタのチューニング

    多くのアプリケーションでは、デフォルトのガベージ・コレクタ・チューニングで間に合います。大量のデータを返して保持するアプリケーションでは、より大きい値(2GB以上など)を使用できます。例:

    java -Xms3072m -Xmx3072m 

    初期Javaヒープ・サイズ(ms)と最大ヒープ・サイズ(mx)のメモリー割当てを同じ値に設定することをお薦めします。これにより、メモリー・ヒープの拡大および縮小時にシステム・リソースが使用されることを回避します。

  4. JDBCコンクリート・クラス

    JDBCアプリケーションでは、非推奨のoracle.sqlコンクリート・クラスである、BLOB、CLOB、BFILE、OPAQUE、ARRAY、STRUCTまたはORADATAはサポートされていません。(MOSノート1364193.1『新しいJDBCインタフェース』を参照してください。)アプリケーションが合格したかどうかを確認するには、クライアントでORAchk -acchkを使用します。Oracle JDBC Thinドライバ・バージョン18c以降、JDBCリプレイ・ドライバ用の制限付きコンクリート・クラスのリストは縮小されました: oracle.sql.OPAQUEoracle.sql.STRUCToracle.sql.ANYDATA

  5. 高速接続フェイルオーバー(FCF)の構成

    これは、FANイベントのサブスクリプションの有効化に対応しています。

    クライアント・ドライバ12c以降の場合:

    • 自動起動に推奨されるURLを使用します
    • ons.jar (およびオプションのWALLET jars、osdt_cert.jar、osdt_core.jar、oraclepki.jar)がCLASSPATHにあることを確認します
    • プールまたはドライバ・プロパティfastConnectionFailoverEnabled=trueを設定します
    • UCP (推奨)またはサードパーティの接続プール
    • ONS用のポート6200をオープンします(6200がデフォルト・ポートですが、別のポートが選択されている可能性もあります)

    12cより前のクライアント・ドライバの場合は、提供されたアドレスを使用します:

    • oracle.ons.nodesをXXX01:6200、XXX02:6200、XXX03:6200に設定します

OCI (Oracle Call Interface)ドライバの構成

  1. すべての推奨パッチがクライアントに適用されていることを確認してください。MOSノート『アプリケーション・コンティニュイティのクライアント検証マトリックス』(ドキュメントID 251148.1)を参照してください。

  2. OCIStmtPrepareOCIStmtPrepare2に置き換えます。12.2以降、OCIStmtPrepare()は非推奨になりました。すべてのアプリケーションでOCIStmtPrepare2()を使用する必要があります。TACおよびACではOCIStmtPrepareが許可されますが、この文はリプレイされません。

  3. OCIベースのアプリケーションにFANを使用するには、次を実行します:

    • サービスにaq_ha_notificationsを事前に設定しておきます
    • 自動起動に推奨される接続文字列を使用します
    • オプションのウォレットを含めたFANのクライアントの構成の説明に従って、oraaccess.xml内にauto_config、eventsおよびwallet_location (オプション)を設定します。
    • アプリケーションをO/Sクライアント・スレッド・ライブラリとリンクします
    • ONS用のポート6200をオープンします(6200がデフォルト・ポートですが、別のポートが選択されている可能性もあります)。12cより前のクライアント・ドライバの場合は、oraccess.xml内に提供されたアドレスを使用します:

ODP.NET管理対象外プロバイダ・ドライバの構成

  1. すべての推奨パッチがクライアントに適用されていることを確認してください。MOSノート『アプリケーション・コンティニュイティのクライアント検証マトリックス』(ドキュメントID 251148.1)を参照してください。

  2. Oracle Call InterfaceベースのアプリケーションにFANを使用するには、次を実行します:

    • サービスにaq_ha_notificationsを事前に設定しておきます
    • 自動起動に推奨される接続文字列を使用します
    • オプションのウォレットを含めたFANのクライアントの構成の説明に従って、oraaccess.xml内にonsConfigおよびwallet_location (オプション)を設定します。
    • ONS用のポート6200をオープンします(6200がデフォルト・ポートですが、別のポートが選択されている可能性もあります)
    • 接続文字列でFANを設定します: "user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true;"
    • (オプション)同様に接続文字列で実行時ロード・バランシングを設定します: "user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true; load balancing=true;"

フェイルオーバーのためのサービス属性の有効化

透過的アプリケーション・コンティニュイティは、事前定義済のサービスtp_tlstptpurgent_tlsおよびtpurgentではデフォルトで有効になるため、このいずれかを使用している場合は何もする必要はありません。また、これらについては、FAILOVER_RESTOREDEFAULT値はAUTOです。

サービスで提供されるフェイルオーバー・タイプは、パッケージDBMS_APP_CONT_ADMINを使用して変更できます。このAPIを使用して、アプリケーション・コンティニュイティ、透過的アプリケーション・コンティニュイティまたは透過的アプリケーション・フェイルオーバー(TAF)を有効にするか、フェイルオーバーをすべて無効にします。新しいセッションでは、新しいフェイルオーバー・タイプが使用されます。これらのプロシージャを使用するには、管理者である必要があります。

サービスの透過的アプリケーション・コンティニュイティを有効にするには:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAC('HIGH');

サービスでアプリケーション・コンティニュイティを有効にするには:

execute DBMS_APP_CONT_ADMIN.ENABLE_AC('TPURGENT');

サービスでTAF SELECTを有効にするには:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('LOW');

サービスでTAF BASICを有効にするには:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('MEDIUM', 'SESSION');

サービスでフェイルオーバーを無効にするには:

execute DBMS_APP_CONT_ADMIN.DISABLE_FAILOVER('HIGH');

サービスを変更せずにTAFを使用する場合は、接続文字列でTAFの古いクライアント側構成を使用します:

(FAILOVER_MODE=(TYPE=select)(METHOD=basic)(OVERRIDE=TRUE)) 

メンテナンスのためのサービス属性の構成

計画メンテナンスが開始されると、ドレインする必要があるセッションにドレイン対象のマークが付きます。アイドル状態のセッションは順次解放されます。アクティブなセッションは、そのセッションで実行中の作業が完了した時点でドレインされます。セッションのドレインは、高速アプリケーション通知(FAN)用に構成されたOracle接続プールと中間層で広く使用されています。Oracle Database 18c以降は、データベースが停止または再配置されると、データベース自体がセッションをドレインします。計画メンテナンスが認識されないようにするためには、ドレインが常に最適なソリューションです。

割り当てられた時間内に作業のドレインが完了しそうにない場合は、アプリケーション・コンティニュイティなどのフェイルオーバー・ソリューションを実行します。

ドレイン・タイムアウト(秒)および停止オプションは、パッケージDBMS_APP_CONT_ADMINを使用してサービスに設定できます。これらのプロシージャを使用するには、管理者である必要があります。

ドレイン・タイムアウトを600秒に調整し、停止オプションをIMMEDIATEに設定するには:

execute DBMS_APP_CONT_ADMIN.SET_DRAINING('HIGH', 600, 'IMMEDIATE' );

ドレイン・タイムアウトのみを調整するには:

execute DBMS_APP_CONT_ADMIN.SET_DRAINING('TPURGENT', 600);

オプションのウォレットを含めたFANのクライアントの構成

Autonomous Databaseの使用時には、FANにウォレットベースの認証を選択できます。TNS接続と同じウォレットを使用します。

JDBCアプリケーションの場合

  1. 次のjarファイルがアプリケーションのCLASSPATHに存在することを確認します:

    (ons.jar, osdt_cert.jar, osdt_core.jar, oraclepki.jar) 
  2. 次のいずれかの方法で、FANにウォレットを指定します:

    • 自動構成されたONSをウォレットで使用するには、次のJavaシステム・プロパティを設定します:

      "-Doracle.ons.walletfile=/replace this with host path/onswallet"
      "-Doracle.ons.walletpassword=myONSWalletPassword"

      これらは、プールごとまたは接続ごとには設定できないことに注意してください。

    • ONSを明示的に設定するには、次のいずれかを行います:

      • UCP XML構成ファイルを使用して明示的に設定します。例:

        <!--?xml version="1.0" encoding="UTF-8"? -->
        <ucp-properties>
          <connection-pool
            connection-pool-name="UCP_pool1"
            user="dbuser"
            password="dbuserpasswd"
            connection-factory-class-name="oracle.jdbc.pool.OracleDataSource"
            initial-pool-size="10"
            min-pool-size="5"
            max-pool-size="15"
            validate-connection-on-borrow="true"
            connection-wait-timeout="900"
            max-connections-per-service="50"
            sql-for-validate-connection="select 1 from dual" 
            url="jdbc:oracle:thin:@(DESCRIPTION =(CONNECT_TIMEOUT= 120)(RETRY_COUNT=20) (RETRY_DELAY=3) (TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST =(LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=primary-scan)(PORT=1521)))(ADDRESS_LIST =(LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=standby-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = MY-SERVICE)))"
            fastConnectionFailoverEnabled="true" 
            onsConfiguration="nodes=primary-scanhost:6200,secondary-scanhost:6200\nwalletfile=/replace_with_host_path/onswallet\nwalletpassword=myWalletPassword">
          </connection-pool>
        </ucp-properties>
      • setONSConfiguration()へのコールを使用して、UCP内からプログラム的に設定します。例:

        pds.setONSConfiguration("nodes=primary-scanhost:6200,secondary-scanhost:6200\nwalletfile=/replace_this_with_host_path/onswallet\nwalletpassword=myWalletPassword");

Oracle Driverバージョン12.2以上を使用したOracle Call Interface (OCI)アプリケーションの場合

oraaccess.xmlファイルの<default_parameters>セクションに次のものを追加します:

<default_parameters>
      (Other settings may be present in this section)
   <events>
      true
   </events>
   <ons>
      <auto_config>true</auto_config>
      <wallet_location>/my_path/onswallet</wallet_location>       
   </ons>
</default_parameters>

<wallet_location>パスは、ウォレットを含むディレクトリの名前にする必要があります。

他のパラメータは、oraaccess.xmlonsセクションで設定できます(<hosts><max_connections><subscription_wait_timeout>など)。

ネイティブ・イベント設定制御をサポートしているドライバでは、<events>セクションが使用されず、かわりにドライバ設定が使用されることがあります。

デフォルトでは、ONSに障害が発生した場合でもデータベース接続は確立されます。このシナリオで接続が失敗するようにする場合は、<events>および<ons>と同じレベルにセクションを追加できます。

<fan> 
   <subscription_failure_action> 
      error 
   </subscription_failure_action> 
</fan> 

oraaccess.xmlファイルをtnsnames.oraおよびsqlnet.oraネットワーク・ファイルと同じディレクトリに配置します。たとえば、Oracle Instant Clientを使用している場合、これらのファイルはデフォルト・ディレクトリnetwork/adminに含まれている可能性があります。あるいは、すべてのネットワーク構成ファイルを別のアクセス可能ディレクトリに配置することもできます。その場合は、環境変数TNS_ADMINをそのディレクトリ名に設定します。

ODP.Net管理対象プロバイダ

application.configファイルを使用して、ONS構成およびウォレットの場所を指定します。例:

<oracle.manageddataaccess.client>
    <version number="*">
      <onsConfig mode="remote">
        <settings>
          <setting name="Protocol" value="TCPS" />
          <setting name="WALLET_LOCATION" value="C:\myPath\ONS_SSLWallet" />
        </settings>
        <ons database="atp01db">
          <add name="nodeList" value="racNode1:6205,racNode2:6205,racNode3:6205" />
        </ons>
      </onsConfig>
    </version>
</oracle.manageddataaccess.client>