アクティブ・スタンバイ・ペアでの障害時リカバリ・サブスクライバの使用

TimesTenアクティブ・スタンバイ・ペアのレプリケーションでは、データ・センター内のデータベース間の高速な切替えを可能にすることにより、高可用性が実現されます。

これには、AWTキャッシュ・グループを使用してOracle Databaseに変更を伝播するデータベースを自動的に変更する機能が含まれます。ただし、データ・センター全体でのさらなる高可用性を実現するには、サイト全体の障害からリカバリ可能である必要があり、サイト全体の障害には、アクティブ・スタンバイ・ペアのTimesTenマスター・データベースおよびキャッシュ・グループに使用されるOracle Databaseの両方の障害が含まれる場合があります。

サイト全体の障害からリカバリするには、アクティブ・スタンバイ・ペアのレプリケーション・スキームの一部として、特別な障害時リカバリ読取り専用サブスクライバを作成します。スタンバイ・データベースは、読取り専用サブスクライバのキャッシュ・グループ表に更新を送信します。この特別なサブスクライバはリモートの障害時リカバリ・サイトに配置されており、(同様に障害時リカバリ・サイトに配置されている)2番目のOracle Databaseに更新を伝播できます。この障害時リカバリ・サブスクライバは、プライマリ・サイトで全体の障害が発生した場合、障害時リカバリ・サイトで新しいアクティブ・スタンバイ・ペアのアクティブとしての役割を引き継ぐことができます。この場合、すべてのアプリケーションが障害時リカバリ・サイトに接続して処理を続行でき、サービスの中断を最小限に抑えることができます。

アクティブ・スタンバイ・ペアでの障害時リカバリ・サブスクライバの使用に関する要件

障害時リカバリ・サブスクライバを使用する場合の要件は、次のとおりです。

  • プライマリ・サイトで、AWTキャッシュ・グループが構成されたアクティブ・スタンバイ・ペア構成を使用していること。アクティブ・スタンバイ・ペアのレプリケーション・スキームには、読取り専用キャッシュ・グループを含めることもできます。読取り専用キャッシュ・グループは、障害時リカバリ・サブスクライバで通常の表に変換されます。AWTキャッシュ・グループ表は、障害時リカバリ・サブスクライバでAWTキャッシュ・グループ表のまま保持されます。

  • プライマリ・サイトから障害時リカバリ・サイトへの継続的なWAN接続があること。この接続には、少なくとも、通常量のトランザクションを障害時リカバリ・サブスクライバに適切な速度でレプリケートできる十分な帯域幅が必要です。

  • 障害時リカバリ・サイトで、プライマリ・サイトのデータベースと同じスキーマを持つ表を含めるようにOracle Databaseが構成されていること。このデータベースは、レプリケートされた更新をプライマリ・サイトから取得することのみを目的としており、障害時リカバリ・サブスクライバの作成時にキャッシュ・グループによって書き込まれた表になんらかのデータが存在する場合、そのデータは削除されることに注意してください。

  • プライマリ・サイトと障害時リカバリ・サイトの両方に同じキャッシュ・グループ管理者ユーザーIDおよびパスワードがあること。

必須ではありませんが、障害時リカバリ・サイトに2番目のTimesTenデータベースを構成することをお薦めします。このデータベースは、プライマリ・サイトに障害が発生した後、障害時リカバリ・サブスクライバがアクティブ・データベースに昇格した場合、スタンバイ・データベースの役割を引き継ぐことができます。

障害時リカバリ・サブスクライバのロール・アウト

障害時リカバリ・サブスクライバを作成するには、次のステップを実行します。

  1. AWTキャッシュ・グループが構成されたアクティブ・スタンバイ・ペアをプライマリ・サイトで作成します。アクティブ・スタンバイ・ペアには、読取り専用キャッシュ・グループを含めることもできます。読取り専用キャッシュ・グループは、障害時リカバリ・サブスクライバがロール・アウトされるときに通常の表に変換されます。

  2. -duplicateおよび-initCacheDRオプションを指定したttRepAdminユーティリティを使用し、障害時リカバリ・サイトで障害時リカバリ・サブスクライバを作成します。また、-cacheUidおよび-cachePwdオプションを使用して、障害時リカバリ・サイトでOracle Databaseのキャッシュ・グループ管理者およびパスワードを指定する必要もあります。

    データベースに複数のキャッシュ・グループが含まれている場合、-nThreadsオプションを使用して、キャッシュ・グループを並行してフラッシュするために生成されるスレッドの数を指定することにより、複製処理の効率を向上させることができます。各スレッドはキャッシュ・グループ全体をOracle Databaseにフラッシュし、フラッシュするキャッシュ・グループが残っている場合は、次のキャッシュ・グループに進みます。-nThreadの値が指定されていない場合は、1つのフラッシュ・スレッドのみが生成されます。

    たとえば、ホスト名がprimary、キャッシュ・ユーザーIDがsystem、パスワードがmanagerのシステムで、スタンバイ・データベースmast2を障害時リカバリ・サブスクライバdrsubに複製し、2つのキャッシュ・グループ・フラッシュ・スレッドを使用するとします。ttRepAdminによって-uid-pwd-cacheUidおよび-cachePwdの値を入力するよう要求されます。

    ttRepAdmin -duplicate -from mast2 -host primary -initCacheDR -nThreads 2 
     -connStr "DSN=drsub;UID=;PWD=;"

    CでttRepDuplicateEx関数を使用する場合は、ttRepDuplicateExArg.flagsTT_REPDUP_INITCACHEDRフラグを設定する必要があり、オプションで、ttRepDuplicateExArg.nThreads4InitDRの値を指定できます。

    int                 rc;
    ttUtilHandle        utilHandle;
    ttRepDuplicateExArg arg;
    memset( &arg, 0, sizeof( arg ) );
    arg.size = sizeof( ttRepDuplicateExArg );
    arg.flags = TT_REPDUP_INITCACHEDR;
    arg.nThreads4InitDR = 2;
    arg.uid="ttuser"
    arg.pwd="ttuser"
    arg.cacheuid = "system";
    arg.cachepwd = "manager";
    arg.localHost = "disaster";
    rc = ttRepDuplicateEx( utilHandle, "DSN=drsub",
                           "mast2", "primary", &arg );

    サブスクライバが複製されると、TimesTenでは、AWTキャッシュ・グループからOracle Databaseに更新を伝播し、TimesTenのキャッシュ・グループに対応するOracle Databaseの表を切り捨て、キャッシュ・グループのすべてのデータをOracle Databaseにフラッシュするレプリケーション・スキームが自動的に構成されます。

  3. 障害時リカバリ・サブスクライバに障害しきい値を設定する場合は、ttCacheAWTThresholdSet組込みプロシージャをコールし、障害時リカバリ・サブスクライバが停止しているか、またはキャッチアップに時間がかかりすぎているとみなされる前に累積可能なトランザクション・ログ・ファイルの数を指定します。

    障害時リカバリ・サブスクライバが作成される前に、一方または両方のマスター・データベースに障害しきい値が構成されている場合、障害時リカバリ・サブスクライバはttRepAdmin -duplicate -initCacheDRコマンドで作成されたときに障害しきい値の値を引き継ぎます。これらのマスター・データベースの障害しきい値が異なる場合は、大きい方の値が障害時リカバリ・サブスクライバに使用されます。

    「トランザクション・ログ障害しきい値の設定」を参照してください。

  4. 障害時リカバリ・サブスクライバのレプリケーション・エージェントを起動するには、ttRepStart組込みプロシージャまたは-repstartオプションを指定したttAdminユーティリティを使用します。たとえば:

    ttAdmin -repstart drsub

    スタンバイ・データベースから障害時リカバリ・サブスクライバに更新がレプリケートされます。この後、これらの更新は、障害時リカバリ・サブスクライバによって障害時リカバリ・サイトのOracle Databaseに伝播されます。

    「レプリケーション・エージェントの起動および停止」を参照してください。

障害時リカバリ・サイトへの切替え

プライマリ・サイトに障害が発生した場合は、障害時リカバリ・サイトに切り替えることができます。

障害リカバリ・サイトへの切替えには2つの方法があります。

  • 障害時リカバリ・サイトへの切替え後の新しいアクティブ・スタンバイ・ペアの作成: 障害時リカバリ・サイトでのデータ損失のリスクを最小限に抑えることを目的としている場合は、障害時リカバリ・サブスクライバをアクティブ・データベースとして使用して新しいアクティブ・スタンバイ・ペアをロール・アウトすることもできます。

  • 単一データベースへの切替え: 障害時リカバリ・データベースに後で障害が発生してデータが失われる可能性があってもアプリケーションの停止時間を最小限に抑えることが目的である場合は、かわりに、障害時リカバリ・サブスクライバからレプリケーション・スキームを削除し、レプリケートしない単一のデータベースとしてそれを使用することもできます。後でアクティブ・スタンバイ・ペアを障害時リカバリ・サイトにデプロイできます。

障害時リカバリ・サイトへの切替え後の新しいアクティブ・スタンバイ・ペアの作成

  1. 読取り専用アプリケーションは、障害時リカバリ・サブスクライバにすぐにリダイレクトできます。データベースに対して更新を行うアプリケーションのリダイレクトは、ステップ7で実行します。
  2. ttRepSubscriberWait組込みプロシージャまたは-wait オプションを指定したttRepAdminコマンドを使用して、キャッシュ・グループへの新しい更新がすべてOracleデータベースに伝播されていることを確認します。
    Command> call ttRepSubscriberWait( null, null, '_ORACLE', null, 600 );

    成功すると<00>が返されます。ttRepSubscriberWaitでタイムアウトを示す0x01が返されたら、ステップ3に進む前に、キャッシュ・グループによる伝播が完了していない原因を調べて特定します。

  3. 障害時リカバリ・サブスクライバのレプリケーション・エージェントを停止するには、ttRepStop組込みプロシージャまたは-repstopオプションを指定したttAdminコマンドを使用します。たとえば、サブスクライバdrsubのレプリケーション・エージェントを停止するには、次のように入力します。
    call ttRepStop;
  4. DROP ACTIVE STANDBY PAIR文を使用して、サブスクライバのアクティブ・スタンバイ・ペアのレプリケーション・スキームを削除します。例:
    DROP ACTIVE STANDBY PAIR;
  5. 障害時リカバリ・サブスクライバ上に、アクティブ・データベースの読取り専用キャッシュ・グループ表から変換された表が存在する場合、障害時リカバリ・サブスクライバでそれらの表を削除します。
  6. 障害時リカバリ・サブスクライバで読取り専用キャッシュ・グループを作成します。AUTOREFRESH STATEがPAUSEDに設定されていることを確認します。
  7. CREATE ACTIVE STANDBY PAIR文を使用し、新しいアクティブ・スタンバイ・ペアのレプリケーション・スキームを作成し、障害時リカバリ・サブスクライバをアクティブ・データベースとして指定します。たとえば、前のサブスクライバdrsubをアクティブ・データベースとして使用し、新しいデータベースdrstandbyをスタンバイ・データベースとして使用する新しいアクティブ・スタンバイ・ペアを作成し、RETURN TWOSAFE戻りサービスを使用するには、次のように入力します。
    CREATE ACTIVE STANDBY PAIR drsub, drstandby RETURN TWOSAFE;
  8. ttRepStateSet組込みプロシージャを使用して、新しいアクティブ・スタンバイ・データベースを、ACTIVEステータスに設定します。たとえば、この例のデータベースdrsubで次のようにコールします。
    call ttRepStateSet( 'ACTIVE' );
  9. TimesTenデータベースへの書込みを必要とするすべてのアプリケーションが、新しいアクティブ・データベースにリダイレクトされるようになりました。
  10. 読取り専用キャッシュ・グループをレプリケートしている場合は、LOAD CACHE GROUP文を使用してキャッシュ・グループをロードし、自動リフレッシュ・プロセスを開始します。AWTキャッシュ・グループをレプリケートしている場合も、キャッシュ・グループをロードできます(必須ではありません)。
  11. アクティブ・データベースをスタンバイ・データベースに複製します。ttRepAdmin -duplicateユーティリティまたはttRepDuplicateEx C関数を使用して、データベースを複製できます。キャッシュ・グループを保持するには、ttRepAdmin-keepCGコマンドライン・オプションを使用します。「データベースの複製」を参照してください。
  12. スタンバイ・データベースでレプリケーション・エージェント・ポリシーを設定し、レプリケーション・エージェントを起動します。「レプリケーション・エージェントの起動および停止」を参照してください。
  13. スタンバイ・データベースがSTANDBY状態になるまで待機します。状態を確認するには、ttRepStateGet組込みプロシージャを使用します。
  14. ttCacheStart組込みプロシージャまたはttAdmin -cacheStartユーティリティを使用して、スタンバイ・データベースのキャッシュ・エージェントを開始します。
  15. スタンバイ・データベースからすべてのサブスクライバを複製します。「サブスクライバへのマスター・データベースの複製」を参照してください。ttRepAdmin-noKeepCGコマンドライン・オプションを使用し、サブスクライバでキャッシュ・グループを通常のTimesTen表に変換します。
  16. サブスクライバでレプリケーション・エージェント・ポリシーを設定し、各サブスクライバ・データベースでエージェントを起動します。「レプリケーション・エージェントの起動および停止」を参照してください。

単一データベースへの切替え

  1. 読取り専用アプリケーションは、障害時リカバリ・サブスクライバにすぐにリダイレクトできます。データベースに対して更新を行うアプリケーションのリダイレクトは、ステップ5で実行します。
  2. 障害時リカバリ・サブスクライバのレプリケーション・エージェントを停止するには、ttRepStop組込みプロシージャまたは -repstopオプションを指定したttAdminコマンドを使用します。たとえば、サブスクライバdrsubのレプリケーション・エージェントを停止するには、次のように入力します。
    call ttRepStop;
  3. DROP ACTIVE STANDBY PAIR文を使用して、サブスクライバのアクティブ・スタンバイ・ペアのレプリケーション・スキームを削除します。例:
    DROP ACTIVE STANDBY PAIR;
  4. 障害時リカバリ・サブスクライバ上に、アクティブ・データベースの読取り専用キャッシュ・グループ表から変換された表が存在する場合、障害時リカバリ・サブスクライバでそれらの表を削除します。
  5. 障害時リカバリ・サブスクライバで読取り専用キャッシュ・グループを作成します。
  6. 構成済のアクティブ・スタンバイ・ペアはなくなりましたが、AWTキャッシュ・グループでは、レプリケーション・エージェントの起動を必要とします。ttRepStart組込みプロシージャまたは-repstartオプションを指定したttAdminコマンドを使用して、データベースでレプリケーション・エージェントを起動します。たとえば、データベースdrsubのレプリケーション・エージェントを起動するには、次のように入力します。
  7. TimesTenデータベースへの書込みを必要とするすべてのアプリケーションが、このデータベースにリダイレクトされるようになりました。

    ノート:

    アクティブ・スタンバイ・ペアは、後から障害時リカバリ・サイトでロール・アウトできます。これを行うには、「障害時リカバリ・サイトへの切替え後の新しいアクティブ・スタンバイ・ペアの作成」のステップに従い、ステップ2から開始し、ステップ4は省略します。

プライマリ・サイトでの元の構成への復元

プライマリ・サイトが再び使用可能になったときに、稼働中のアクティブ・スタンバイ・ペアを障害時リカバリ・サイトからプライマリ・サイトに戻す場合があります。

元の障害時リカバリ・サイトの作成および切替えに使用したプロセスを逆順で行うと、サービスの中断を最小限に抑えながらこの処理を行うことができます。次の手順を実行します:

  1. 必要に応じてttDestroyユーティリティを使用して、プライマリ・サイトで元のアクティブ・データベースを破棄します。たとえば、mast1というデータベースを破棄するには、次のように入力します。

    ttDestroy mast1
    
  2. 「障害時リカバリ・サブスクライバのロール・アウト」の手順に従って、プライマリ・サイトで障害時リカバリ・サブスクライバを作成します。元のアクティブ・データベースを新しい障害時リカバリ・サブスクライバに対して使用します。

  3. 「障害時リカバリ・サイトへの切替え」の説明に従って、プライマリ・サイトで新しい障害時リカバリ・サブスクライバに切り替えます。スタンバイ・データベースもロール・アウトします。

  4. 「障害時リカバリ・サブスクライバのロール・アウト」の説明に従って、障害時リカバリ・サイトで新しい障害時リカバリ・サブスクライバをロール・アウトします。