アクティブ・スタンバイ・ペアでの障害時リカバリ・サブスクライバの使用
TimesTenアクティブ・スタンバイ・ペアのレプリケーションでは、データ・センター内のデータベース間の高速な切替えを可能にすることにより、高可用性が実現されます。
これには、AWTキャッシュ・グループを使用してOracle Databaseに変更を伝播するデータベースを自動的に変更する機能が含まれます。ただし、データ・センター全体でのさらなる高可用性を実現するには、サイト全体の障害からリカバリ可能である必要があり、サイト全体の障害には、アクティブ・スタンバイ・ペアのTimesTenマスター・データベースおよびキャッシュ・グループに使用されるOracle Databaseの両方の障害が含まれる場合があります。
サイト全体の障害からリカバリするには、アクティブ・スタンバイ・ペアのレプリケーション・スキームの一部として、特別な障害時リカバリ読取り専用サブスクライバを作成します。スタンバイ・データベースは、読取り専用サブスクライバのキャッシュ・グループ表に更新を送信します。この特別なサブスクライバはリモートの障害時リカバリ・サイトに配置されており、(同様に障害時リカバリ・サイトに配置されている)2番目のOracle Databaseに更新を伝播できます。この障害時リカバリ・サブスクライバは、プライマリ・サイトで全体の障害が発生した場合、障害時リカバリ・サイトで新しいアクティブ・スタンバイ・ペアのアクティブとしての役割を引き継ぐことができます。この場合、すべてのアプリケーションが障害時リカバリ・サイトに接続して処理を続行でき、サービスの中断を最小限に抑えることができます。
アクティブ・スタンバイ・ペアでの障害時リカバリ・サブスクライバの使用に関する要件
障害時リカバリ・サブスクライバを使用する場合の要件は、次のとおりです。
-
プライマリ・サイトで、AWTキャッシュ・グループが構成されたアクティブ・スタンバイ・ペア構成を使用していること。アクティブ・スタンバイ・ペアのレプリケーション・スキームには、読取り専用キャッシュ・グループを含めることもできます。読取り専用キャッシュ・グループは、障害時リカバリ・サブスクライバで通常の表に変換されます。AWTキャッシュ・グループ表は、障害時リカバリ・サブスクライバでAWTキャッシュ・グループ表のまま保持されます。
-
プライマリ・サイトから障害時リカバリ・サイトへの継続的なWAN接続があること。この接続には、少なくとも、通常量のトランザクションを障害時リカバリ・サブスクライバに適切な速度でレプリケートできる十分な帯域幅が必要です。
-
障害時リカバリ・サイトで、プライマリ・サイトのデータベースと同じスキーマを持つ表を含めるようにOracle Databaseが構成されていること。このデータベースは、レプリケートされた更新をプライマリ・サイトから取得することのみを目的としており、障害時リカバリ・サブスクライバの作成時にキャッシュ・グループによって書き込まれた表になんらかのデータが存在する場合、そのデータは削除されることに注意してください。
-
プライマリ・サイトと障害時リカバリ・サイトの両方に同じキャッシュ・グループ管理者ユーザーIDおよびパスワードがあること。
必須ではありませんが、障害時リカバリ・サイトに2番目のTimesTenデータベースを構成することをお薦めします。このデータベースは、プライマリ・サイトに障害が発生した後、障害時リカバリ・サブスクライバがアクティブ・データベースに昇格した場合、スタンバイ・データベースの役割を引き継ぐことができます。
障害時リカバリ・サブスクライバのロール・アウト
障害時リカバリ・サブスクライバを作成するには、次のステップを実行します。
-
AWTキャッシュ・グループが構成されたアクティブ・スタンバイ・ペアをプライマリ・サイトで作成します。アクティブ・スタンバイ・ペアには、読取り専用キャッシュ・グループを含めることもできます。読取り専用キャッシュ・グループは、障害時リカバリ・サブスクライバがロール・アウトされるときに通常の表に変換されます。
-
-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.flags
にTT_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にフラッシュするレプリケーション・スキームが自動的に構成されます。
-
障害時リカバリ・サブスクライバに障害しきい値を設定する場合は、
ttCacheAWTThresholdSet
組込みプロシージャをコールし、障害時リカバリ・サブスクライバが停止しているか、またはキャッチアップに時間がかかりすぎているとみなされる前に累積可能なトランザクション・ログ・ファイルの数を指定します。障害時リカバリ・サブスクライバが作成される前に、一方または両方のマスター・データベースに障害しきい値が構成されている場合、障害時リカバリ・サブスクライバは
ttRepAdmin -duplicate -initCacheDR
コマンドで作成されたときに障害しきい値の値を引き継ぎます。これらのマスター・データベースの障害しきい値が異なる場合は、大きい方の値が障害時リカバリ・サブスクライバに使用されます。「トランザクション・ログ障害しきい値の設定」を参照してください。
-
障害時リカバリ・サブスクライバのレプリケーション・エージェントを起動するには、
ttRepStart
組込みプロシージャまたは-repstart
オプションを指定したttAdmin
ユーティリティを使用します。たとえば:ttAdmin -repstart drsub
スタンバイ・データベースから障害時リカバリ・サブスクライバに更新がレプリケートされます。この後、これらの更新は、障害時リカバリ・サブスクライバによって障害時リカバリ・サイトのOracle Databaseに伝播されます。
「レプリケーション・エージェントの起動および停止」を参照してください。
障害時リカバリ・サイトへの切替え
プライマリ・サイトに障害が発生した場合は、障害時リカバリ・サイトに切り替えることができます。
障害リカバリ・サイトへの切替えには2つの方法があります。
-
障害時リカバリ・サイトへの切替え後の新しいアクティブ・スタンバイ・ペアの作成: 障害時リカバリ・サイトでのデータ損失のリスクを最小限に抑えることを目的としている場合は、障害時リカバリ・サブスクライバをアクティブ・データベースとして使用して新しいアクティブ・スタンバイ・ペアをロール・アウトすることもできます。
-
単一データベースへの切替え: 障害時リカバリ・データベースに後で障害が発生してデータが失われる可能性があってもアプリケーションの停止時間を最小限に抑えることが目的である場合は、かわりに、障害時リカバリ・サブスクライバからレプリケーション・スキームを削除し、レプリケートしない単一のデータベースとしてそれを使用することもできます。後でアクティブ・スタンバイ・ペアを障害時リカバリ・サイトにデプロイできます。
プライマリ・サイトでの元の構成への復元
プライマリ・サイトが再び使用可能になったときに、稼働中のアクティブ・スタンバイ・ペアを障害時リカバリ・サイトからプライマリ・サイトに戻す場合があります。
元の障害時リカバリ・サイトの作成および切替えに使用したプロセスを逆順で行うと、サービスの中断を最小限に抑えながらこの処理を行うことができます。次の手順を実行します:
-
必要に応じて
ttDestroy
ユーティリティを使用して、プライマリ・サイトで元のアクティブ・データベースを破棄します。たとえば、mast1
というデータベースを破棄するには、次のように入力します。ttDestroy mast1
-
「障害時リカバリ・サブスクライバのロール・アウト」の手順に従って、プライマリ・サイトで障害時リカバリ・サブスクライバを作成します。元のアクティブ・データベースを新しい障害時リカバリ・サブスクライバに対して使用します。
-
「障害時リカバリ・サイトへの切替え」の説明に従って、プライマリ・サイトで新しい障害時リカバリ・サブスクライバに切り替えます。スタンバイ・データベースもロール・アウトします。
-
「障害時リカバリ・サブスクライバのロール・アウト」の説明に従って、障害時リカバリ・サイトで新しい障害時リカバリ・サブスクライバをロール・アウトします。