障害が発生したデータベースのリカバリ
データベースが双方向レプリケーション・スキームで構成されている場合、障害が発生したマスター・データベースはサブスクライバから自動的に最新の状態にされます。また、自動キャッチアップがアクティブ・スタンバイ・ペアのマスター・データベースのリカバリに適用されます。
「障害が発生したマスター・データベースの自動キャッチアップ」を参照してください。
再起動したデータベースをマスターのトランザクション・ログからリカバリして、レプリケーション・システムの他のデータベースとの一貫性を保つことができない場合、そのレプリケーション・ピアの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
ノート:
ttRepDuplicateExでTT_REPDUP_RAMLOADフラグを使用すると、複製データベースのRAMポリシーは、ttRamPolicy関数またはttAdmin -ramPolicyで明示的に再設定されるまでmanualとなります。
TimesTen C言語ユーティリティ・ライブラリで提供される関数をすべて示すリストは、『Oracle TimesTen In-Memory Database C開発者ガイド』のTimesTenユーティリティAPIを参照してください。