Autonomous Databaseでのアプリケーション・コンティニュイティの構成

Application Continuityを構成するには、アプリケーションが使用するデータベース・サービスのアプリケーション・継続性を有効にし、フェイルオーバー・タイプおよびドレイン・タイムアウトを構成する必要があります。また、高可用性を有効にする複数の接続文字列パラメータを設定する必要があります。

アプリケーション・コンティニュイティを有効にするためのサービスの構成

DBMS_APP_CONT_ADMINを使用して、アプリケーション・継続性または透過的アプリケーション・コンティニュイティを有効にします:

  • アプリケーション・連続性(AC): このフェイルオーバー・オプションは、プロシージャDBMS_APP_CONT_ADMIN.ENABLE_ACを使用して設定します。ENABLE_ACプロシージャは3つのパラメータを使用します。SERVICE NAMEは変更するサービス名で、FAILOVER_RESTOREはアプリケーション・コンティニュイティ(AC)を選択するためにLEVEL1に設定されます。REPLAY_INITIATION_TIMEOUTはリプレイ・タイムアウトで、リクエストを送信してから何秒までそのリクエストのリプレイを許可するかを指定します。

    たとえば、ADMINユーザーとして、TPURGENTサービスのアプリケーション・コンティニュイティを有効にするには:

    execute DBMS_APP_CONT_ADMIN.ENABLE_AC(
            'databaseid_tpurgent.adb.oraclecloud.com', 'LEVEL1', 600);
  • Transparent Application Continuity (TAC): このフェイルオーバー・オプションは、プロシージャDBMS_APP_CONT_ADMIN.ENABLE_TACを使用して設定します。ENABLE_TACプロシージャは3つのパラメータを使用します。SERVICE NAMEは変更するサービス名で、FAILOVER_RESTOREは透過的アプリケーション・コンティニュイティ(TAC)を選択するためにAUTOに設定されます。REPLAY_INITIATION_TIMEOUTはリプレイ・タイムアウトで、リクエストの送信後何秒までそのリクエストのリプレイを許可するかを指定します。

    たとえば、ADMINユーザーとして、リプレイ・タイムアウトを20分に設定してTPサービスの透過的アプリケーション・コンティニュイティを有効にするには:

    execute DBMS_APP_CONT_ADMIN.ENABLE_TAC(
            'databaseid_tp.adb.oraclecloud.com', 'AUTO', 1200);
    
  • 無効: プロシージャDBMS_APP_CONT_ADMIN.DISABLE_FAILOVER()を使用してフェイルオーバーを無効にします。

    たとえば、ADMINユーザーとして、TPサービスのフェイルオーバーを無効にするには:

    execute DBMS_APP_CONT_ADMIN.DISABLE_FAILOVER(
            'databaseid_tp.adb.oraclecloud.com');
    

アプリケーション・継続性のサービス名パラメータの検索

ワークロード・タイプに応じて、次のようなコマンドを使用してデータベース内のDBA_SERVICESからSELECTし、アプリケーション・コンティニュイティを有効にするサービスを識別します:

  • データ・ウェアハウス

    SELECT name, failover_type FROM DBA_SERVICES;
    NAME                                                    FAILOVER_TYPE
    ------------------------------------------------------- -------------
    nvt21_adb1_low.adb.oraclecloud.com                      
    nvt21_adb1_high.adb.oraclecloud.com                     
    nvt21_adb1_medium.adb.oraclecloud.com                   
  • トランザクション処理またはJSONデータベース

    SELECT name, failover_type FROM DBA_SERVICES;
    NAME                                                    FAILOVER_TYPE
    ------------------------------------------------------- ----------------
    nvt21_adb1_tp.adb.oraclecloud.com                        
    nvt21_adb1_tpurgent.adb.oraclecloud.com                 
    nvt21_adb1_low.adb.oraclecloud.com                       
    nvt21_adb1_high.adb.oraclecloud.com                      
    nvt21_adb1_medium.adb.oraclecloud.com                   

highサービスのFAILOVER_TYPEに値がないことと、アプリケーション・継続性が無効であることがわかります。

サービスに対してアプリケーション・コンティニュイティが有効であることを確認

ワークロード・タイプに応じて、DBA_SERVICESに対する問合せの出力をチェックし、アプリケーション・コンティニティが有効になっていることを確認します。

  • データ・ウェアハウス

    SELECT name, failover_type FROM DBA_SERVICES;
    NAME                                                    FAILOVER_TYPE
    ------------------------------------------------------- --------------
    nvt21_adb1_low.adb.oraclecloud.com                      
    nvt21_adb1_high.adb.oraclecloud.com                     AUTO
    nvt21_adb1_medium.adb.oraclecloud.com                   
  • トランザクション処理またはJSONデータベース

    SELECT name, failover_type FROM DBA_SERVICES;
    NAME                                                    FAILOVER_TYPE
    ------------------------------------------------------- --------------
    nvt21_adb1_tp.adb.oraclecloud.com                       
    nvt21_adb1_tpurgent.adb.oraclecloud.com                 TRANSACTION
    nvt21_adb1_low.adb.oraclecloud.com                       
    nvt21_adb1_high.adb.oraclecloud.com                     AUTO
    nvt21_adb1_medium.adb.oraclecloud.com                   

highサービスのFAILOVER_TYPE値がAUTOになっており、透過アプリケーション・コンティニュイティ(TAC)が有効になっていることを示しています。また、tpurgentサービスのFAILOVER_TYPE値がTRANSACTIONになっており、アプリケーション・コンティニュイティ(AC)が有効になっていることを示しています。

高速アプリケーション通知(FAN)の使用

Autonomous Databaseに接続すると、OracleデータベースはFANを自動構成します。Autonomous Databaseを使用したアプリケーション・デプロイメントの場合、計画外停止の高速アプリケーション通知(FAN)イベントは接続マネージャ(CMAN)に送信されます。FANを使用するために必要なクライアント・アプリケーション構成ステップはありません。

FANは、クライアント・ドライバおよびAutonomous Database接続マネージャ(CMAN)によって自動的に処理されます:

  • 計画メンテナンス・イベントの場合、FANはインバンドでドライバに直接送信されます。これには、アプリケーションがリクエスト境界に対してOracleプールまたはTACを使用するか、接続テストを使用する必要があります。
  • Oracle DatabaseおよびOracleクライアント・ドライバは、接続テストおよびリクエスト境界でドレインします。

詳細は、Autonomous Databaseでの継続的可用性のクライアント構成を参照してください。

高可用性のための接続文字列の構成

高可用性を維持するために、Oracleでは、Oracle Autonomous Databaseへの接続時に特定の接続文字列パラメータを設定することをお薦めします。

Oracle Autonomous Databaseへの接続時に、接続文字列にCONNECT_TIMEOUTRETRY_DELAYRETRY_COUNTおよび TRANSPORT_CONNECT_TIMEOUTパラメータを設定します。Oracle提供のtnsnames.oraファイルに埋込みの接続文字列は、ほとんどのアプリケーションに適した値で事前構成されています。場合によっては、アプリケーションのニーズに応じて、接続文字列の事前構成済の値を変更する必要があります。

このTNSは、バージョン12.2以上のすべてのOracleクライアントで使用してください。

alias =
(DESCRIPTION =
(CONNECT_TIMEOUT= 90)(RETRY_COUNT=50)
(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)
(ADDRESS_LIST =
  (LOAD_BALANCE=on)
  (ADDRESS = (PROTOCOL = TCP)(HOST=scan-host)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME = service-name)))

バージョン12.1以前のOracleドライバを使用するJDBC接続には、次を使用してください:

alias =
(DESCRIPTION =
(CONNECT_TIMEOUT= 15)(RETRY_COUNT=50)
(RETRY_DELAY=3)
(ADDRESS_LIST =  
   (LOAD_BALANCE=on)  
   (ADDRESS = (PROTOCOL = TCP)(HOST=scan-host)(PORT=1521)))
 (CONNECT_DATA=(SERVICE_NAME = service-name)))

接続文字列に関するノート:

  • JDBCおよびODPクライアントの場合、プール接続の待機時間は、接続文字列のCONNECT_TIMEOUTより長くなるように構成する必要があります。

  • クライアントで簡易接続ネーミングを使用しないでください。このような接続には高可用性機能がありません。

tnsnames.oraファイルの詳細は、クライアント資格証明(ウォレット)のダウンロードを参照してください。

ドライバ固有のクライアント・オプションの構成

クライアントとドライバに応じて、Autonomous Databaseへの接続時にアプリケーション・コンティニティを使用するようにクライアントが適切に構成されていることを確認する必要があります

JDBC Thinドライバの構成

JDBC Thinドライバを使用するクライアントでAutonomous Databaseとともに使用するための詳細を示します。

アプリケーションでJDBC Thinドライバを使用する場合は、次の推奨プラクティスに従います:

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

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

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

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

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

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

    java -Xms3072m -Xmx3072m 

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

  3. ユニバーサル接続プール(UCP)を使用する場合は、高速接続フェイルオーバーを無効にします。たとえば、次のとおりです。

    PoolDataSource.setFastConnectionFailoverEnabled(false)

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

Oracle Call Interface (OCI)ドライバを使用するクライアントでAutonomous Databaseとともにアプリケーション・コンティニュイティを使用するための詳細を示します。

クライアント・アプリケーションでOracle Call Interface (OCI)ドライバを使用する場合は、次の推奨プラクティスに従います:

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

ONSサーバーをoraaccess.xmlに構成しないでください:

<ons>
   <servers> 
   <!—Do not enter any values --> 
   </servers> 
</ons>

また、Autonomous Database Serverlessでは、<fan>セクションを構成しないでください:

<fan>  
<!-- only possible values are "trace" or "error" -->  
    <subscription_failure_action>
   </subscription_failure_action>  
</fan>

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

ODP.NET管理対象外プロバイダ・ドライバを使用するクライアントでAutonomous Databaseとともにアプリケーション・継続性を使用するための詳細を示します。

ODP.NET管理対象外プロバイダ・ドライバは、アプリケーションがAutonomous Databaseへの接続に使用するデータベース・サービスでアプリケーション・コンティニュイティが有効になっている場合に、自動的にアプリケーション・コンティニュイティを使用します。

ODP.NETアプリケーションをAutonomous Databaseサーバーレスに接続する場合、oraaccess.xmlにONSサーバーを構成しないでください:

<ons>
   <servers> 
   <!—Do not enter any values --> 
   </servers> 
</ons>