障害が発生したデータベースのリカバリ
データベースが双方向レプリケーション・スキームで構成されている場合、障害が発生したマスター・データベースはサブスクライバから自動的に最新の状態にされます。また、自動キャッチアップがアクティブ・スタンバイ・ペアのマスター・データベースのリカバリに適用されます。
「障害が発生したマスター・データベースの自動キャッチアップ」を参照してください。
再起動したデータベースをマスターのトランザクション・ログからリカバリして、レプリケーション・システムの他のデータベースとの一貫性を保つことができない場合、そのレプリケーション・ピアの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を参照してください。