BothDown状態について
レプリケートされた構成では、TimesTenオペレータは、TimesTenデータベースのアクティブ・スタンバイ・ペアをプロビジョニング、監視および管理します。アクティブ・データベースまたはスタンバイ・データベースの障害を検出して対応します。たとえば、アクティブ・スタンバイ・ペアの1つのデータベースが停止している場合、TimesTenオペレータは次のことを実行します:
-
アクティブ・データベースで障害が発生した場合、オペレータはスタンバイをアクティブに昇格させます。
-
スタンバイ・データベースに障害が発生した場合、オペレータはアクティブの実行を維持し、スタンバイを修復します。
ただし、両方のデータベースが同時に失敗した場合は、データベースが適切にバックアップされることが不可欠です。TimesTenレプリケーションでは、両方のデータベースで同時にトランザクションをアトミックにコミットしません。トランザクションは1つのデータベースでコミットされ、その後に別のデータベースでコミットされます。(トランザクションが最初にコミットされるデータベースは、先行するデータベースとみなされます。)レプリケーションの構成方法によっては、アクティブ・データベースのトランザクションがスタンバイより先行する場合や、スタンバイがアクティブより先行する可能性があります。データ損失を回避するには、障害の修正後に、先行するデータベースがアクティブ・データベースになる必要があります。
ほとんどの場合、TimesTenオペレータは、障害発生時にどのデータベースが先行していたかを判断できます。ただし、どのデータベースが先行していたかをオペレータが判断できない場合があります。特に、次の条件がすべて発生した場合、オペレータはどのデータベースが先行するかを判断できません。
-
ポーリング間隔中に両方のデータベースに障害が発生しました。具体的には、オペレータが両方のデータベースを調べて、TimesTenポッドは
Healthy
状態でした。オペレータがpollingInterval
秒待機し、オペレータが(このpollingInterval
の後)データベースを再度調べたとき、両方のデータベースが停止しており、かつ -
RETURN
TWOSAFE
レプリケーションが構成されており、かつ -
DISABLE
RETURN
またはLOCAL
COMMIT
ACTION
COMMIT
(あるいはその両方)が構成されていました。
.spec.ttspec.pollingInterval
データ項目と、RETURN
TWOSAFE
およびDISABLE
RETURN
レプリケーション構成オプションの詳細は、「TimesTenClassicSpecSpec」を参照してください。アクティブ・スタンバイ・ペアのレプリケーション・スキームの定義の詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』のCREATE ACTIVE STANDBY PAIRおよび『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のアクティブ・スタンバイ・ペアのレプリケーション・スキームの定義を参照してください
このイベントの組合せは、一部のトランザクションがスタンバイでコミットされて、アクティブではコミットされていない可能性があること、または一部のトランザクションがアクティブでコミットされて、スタンバイではコミットされていない可能性があること(あるいはその両方)を示します。この場合、TimesTenオペレータは処理を実行しません。
両方のデータベースに障害が発生した場合、TimesTenClassicオブジェクトはBothDown状態になります。次に、オペレータは、実行する適切な処理を決定する必要があります。オペレータは、まず.spec.ttspec.bothDownBehavior
データ項目の値を調べて実行内容を決定します。
.spec.ttspec.bothDownBehavior
がManual
に設定されている場合、TimesTenClassicオブジェクトはすぐにManualInterventionRequired
状態になります。TimesTenコンテナが後で使用可能になった場合でも、オペレータはそれ以上の処理を行いません。「レプリケート・オブジェクトのManualInterventionRequired状態について」を参照してください。
.spec.ttspec.bothDownBehavior
がBest
(デフォルト設定)に設定されている場合、オペレータは、障害発生時にどのデータベースが先行していたかを特定しようとします。
-
どのデータベースが先行するかをオペレータが判断できない場合、TimesTenClassicオブジェクトはすぐに
ManualInterventionRequired
状態になります。「レプリケート・オブジェクトのManualInterventionRequired状態について」を参照してください。 -
どのデータベースが先行するかをオペレータが判断できる場合は、次のようになります。
-
TimesTenClassicオブジェクトは
WaitingForActive
状態になります。オブジェクトは、そのデータベースを含むポッドが実行中で、そのポッド内のtt
コンテナにあるTimesTenエージェントがオペレータに応答するまで、この状態のままです。この時点で、TimesTenClassicオブジェクトはConfiguringActive
状態になります。 -
TimesTenClassicオブジェクトが
ConfiguringActive
状態である間、このポッドのTimesTenが起動され、データベースがロードされ、新しいアクティブ・データベースとして使用されるように構成されます。これらのステップに問題がある場合、TimesTenClassicオブジェクトはManualInterventionRequired
状態になります。データベースが正常にロードされ、新しいアクティブとして正常に構成された場合、TimesTenClassicオブジェクトはStandbyDown
状態になります。TimesTenClassicオブジェクトの状態の詳細は、「TimesTenClassicオブジェクトの高レベル状態について」を参照してください。 -
spec.ttspec.waitingForActiveTimeout
データ項目の値を指定することで、TimesTenClassicオブジェクトをWaitingForActive
状態のままにする最長時間(秒単位)を指定できます。この期間の後、オブジェクトがまだWaitingForActive
状態の場合、オブジェクトは自動的にManualInterventionRequired
状態に移行します。デフォルトは0
で、これはタイムアウトがないことを示し、オブジェクトは無期限にこの状態のままになります。spec.ttspec.waitingForActiveTimeout
データ項目の詳細は、「TimesTenClassicSpecSpec」を参照してください。 -
データベースのリカバリにかかる時間は、データベースのサイズによって異なります。
spec.ttspec.waitingForActiveTimeout
の値を決定するときは、データベースのサイズを考慮する必要があります。 -
先行するデータベースをロードできない場合、TimesTenClassicオブジェクトは
ManualInterventionRequired
状態になります。「レプリケート・オブジェクトのManualInterventionRequired状態について」を参照してください。
-