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.bothDownBehaviorManualに設定されている場合、TimesTenClassicオブジェクトはすぐにManualInterventionRequired状態になります。TimesTenコンテナが後で使用可能になった場合でも、オペレータはそれ以上の処理を行いません。「レプリケート・オブジェクトのManualInterventionRequired状態について」を参照してください。

.spec.ttspec.bothDownBehaviorBest (デフォルト設定)に設定されている場合、オペレータは、障害発生時にどのデータベースが先行していたかを特定しようとします。

  • どのデータベースが先行するかをオペレータが判断できない場合、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状態について」を参照してください。