障害が発生したデータベースのリカバリ

データベースが双方向レプリケーション・スキームで構成されている場合、障害が発生したマスター・データベースはサブスクライバから自動的に最新の状態にされます。また、自動キャッチアップがアクティブ・スタンバイ・ペアのマスター・データベースのリカバリに適用されます。

「障害が発生したマスター・データベースの自動キャッチアップ」を参照してください。

再起動したデータベースをマスターのトランザクション・ログからリカバリして、レプリケーション・システムの他のデータベースとの一貫性を保つことができない場合、そのレプリケーション・ピアの1つからデータベースを再作成する必要があります。コマンドライン・ユーティリティまたはTimesTenユーティリティのC関数を使用します。「コマンドラインからの障害が発生したデータベースのリカバリ」および「Cプログラムからの障害が発生したデータベースのリカバリ」を参照してください。

ノート:

障害が発生したデータベースのDSNを再作成する必要はありません。

サブスクライバで障害が発生した場合、RETURNサービスで構成された表に対するマスター・データベースでのコミットは、RETURNサービス・タイムアウト時間に達するまで実行されません。これを回避するには、レプリケーション・スキームでRETURNサービスの障害およびリカバリのポリシーを設定します(「RETURNサービスの障害およびリカバリのポリシーの設定」を参照)。RETURN RECEIPTサービスを使用している場合は、ALTER REPLICATIONを使用してNO RETURN属性を設定し、サブスクライバがリストアされ、最新情報を反映するまでRETURN RECEIPTを無効にすることもできます。反映した時点で、別のALTER REPLICATION文を実行してRETURN RECEIPTを再設定できます。

コマンドラインからの障害が発生したデータベースのリカバリ

データベースを完全にレプリケートする場合は、ttDestroyユーティリティを使用して、障害が発生したデータベースをメモリーから削除し、ttRepAdmin -duplicateを使用して、影響を受けなかったデータベースから再作成することができます。

データベースにキャッシュ・グループが含まれている場合は、ttRepAdmin-keepCGオプションも使用する必要があります。「データベースの複製」を参照してください。

障害が発生したデータベースsubscriberdsをホストsystem1のマスターmasterdsからリカバリするには、次のように入力します。

ttDestroy /tmp/subscriberds

ttRepAdmin -dsn subscriberds -duplicate -from masterds -host "system1" -uid ttuser

ttuserのパスワードを入力するよう求められます。

ノート:

ttRepAdmin -duplicateは、同一のTimesTenリリースおよびパッチ・リリース間でのみサポートされます。メジャーおよびマイナーのリリース番号が同じである必要があります。

ttRepAdmin -duplicateを使用してデータベースを再作成した後、データベースに最初に接続すると、データベースがメモリーにリロードされます。大容量のデータベースの複製時にパフォーマンスを向上させるには、ttRepAdmin -ramloadオプションを使用して複製処理後もデータベースをメモリー内に保持して、リロード・ステップを回避します。

障害のあったデータベースsubscriberdsをホストsystem1のマスターmasterdsからリカバリし、データベースをメモリー内に保持して、複製処理の後でレプリケーションを再起動するには、次のように入力します。

ttDestroy /tmp/subscriberds

ttRepAdmin -dsn subscriberds -duplicate -ramload -from masterds -host "system1" -uid ttuser

ttuserのパスワードを入力するよう求められます。

ノート:

ttRepAdmin -duplicate -ramLoadオプションを使用してデータベースを複製した後、データベースのRAMポリシーは、ttAdmin -ramPolicyまたはttRamPolicy関数で明示的に再設定されるまでmanualとなります。

Cプログラムからの障害が発生したデータベースのリカバリ

TimesTenユーティリティ・ライブラリで提供されるC関数を使用して、障害が発生したデータベースをプログラムでリカバリできます。

データベースを完全にレプリケートする場合は、ttDestroyDataStore関数を使用して、障害が発生したデータベースを削除し、ttRepDuplicateEx関数を使用して、影響を受けなかったデータベースから再作成することができます。

ホストsystem1のマスターmasterdsから、ホストsystem2の障害が発生したデータベースsubscriberdsをリカバリおよび起動するには、次のように入力します。

int          rc;
ttutilhandle utilhandle;
ttrepduplicateexarg arg;
memset( &arg, 0, sizeof( arg ) );
arg.size = sizeof( ttrepduplicateexarg );
arg.flags = tt_repdup_repstart | tt_repdup_ramload;
arg.uid=ttuser;
arg.pwd=ttuser;
arg.localhost = "system2";
rc = ttdestroydatastore( utilhandle, "subscriberds", 30 );
rc = ttrepduplicateex( utilhandle, "dsn=subscriberds",
                      "masterds", "system1", &arg );

この例では、ttDestroyDataStore処理のタイムアウト時間は30秒です。ttRepDuplicateEx関数の最後のパラメータは、次の2つのフラグを含む引数構造になっています。

  • 複製処理の完了後にsubscriberdsデータベースをstart状態に設定するTT_REPDUP_RESTART

  • RAMポリシーをmanualに設定してメモリーにデータベースを保持するTT_REPDUP_RAMLOAD

ノート:

ttRepDuplicateExTT_REPDUP_RAMLOADフラグを使用すると、複製データベースのRAMポリシーは、ttRamPolicy関数またはttAdmin -ramPolicyで明示的に再設定されるまでmanualとなります。

TimesTen C言語ユーティリティ・ライブラリで提供される関数をすべて示すリストは、『Oracle TimesTen In-Memory Database C開発者ガイド』TimesTenユーティリティAPIを参照してください。