この項では、TimesTenレプリケーション・エージェント、およびTimesTenレプリケーション・エージェントが連動してマスター・データ・ストアから対応するサブスクライバ・データ・ストアにデータをレプリケートする方法について説明します。
マスターおよびサブスクライバの各データ・ストアでのレプリケーションは、レプリケーション・エージェントによって制御されます。マスター・データ・ストアのレプリケーション・エージェントは、トランザクション・ログからレコードを読み取り、レプリケート対象の要素への変更を検出した場合はそれらをサブスクライバ・データ・ストアのレプリケーション・エージェントに転送します。その後、サブスクライバ・データ・ストアのレプリケーション・エージェントが、それらの更新をサブスクライバ・データ・ストアに適用します。マスター・エージェントは、更新転送時にサブスクライバ・エージェントが稼働していない場合、転送可能になるまでそれらの更新をログに保持します。
マスターおよびサブスクライバのエージェントは、TCP/IPストリーム・ソケットを介して通信します。マスターおよびサブスクライバの各データ・ストアは、次の情報によって識別されます。
レプリケーション・エージェントは、TCP/IPアドレスやホスト名などの設定情報をTTREPシステム表から取得します。詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス・ガイド』のシステム表およびレプリケーション表に関する説明を参照してください。
デフォルトのレプリケーションでは、非同期方式によって更新がデータ・ストア間でコピーされます。非同期レプリケーションでは、最高のパフォーマンスが実現しますが、レプリケート対象の更新がサブスクライバ・データ・ストアでコミットされたことを示す確認応答はアプリケーションに送信されません。レプリケート・データがマスター・データ・ストアとサブスクライバ・データ・ストア間で一貫していることをより高いレベルで保証する必要がある即時アプリケーションでは、オプションのRETURN RECEIPTサービスまたはRETURN TWOSAFEサービスを有効にできます。
RETURN RECEIPTサービスでは、サブスクライバが更新を受信したことがレプリケーションで確認されるまでアプリケーションをブロックすることによって、アプリケーションをレプリケーション・メカニズムと疎結合または同期化します。RETURN TWOSAFEサービスでは、サブスクライバが更新を受信およびコミットしたことがレプリケーションで確認されるまでアプリケーションをブロックすることによって、完全な同期化が行われます。
RETURN RECEIPTレプリケーションでは、同期性を低くすることによって、RETURN TWOSAFEレプリケーションよりパフォーマンスへの影響が小さくなっています。非同期、RETURN RECEIPTおよびRETURN TWOSAFEのレプリケーションの動作の詳細は、次の項を参照してください。
デフォルトのTimesTenレプリケーションを使用した場合、アプリケーションは、マスター・データ・ストアを更新すると、サブスクライバがその更新を受信および適用するまで待機せずに処理を続行します。マスターおよびサブスクライバのデータ・ストアには、サブスクライバが更新を正常に受信およびコミットしたことを確認するための内部メカニズムがあります。これらのメカニズムは、更新がサブスクライバで1回のみ適用されることを保証しますが、アプリケーションからは完全に独立しています。
デフォルトのTimesTenレプリケーションは、最高のパフォーマンスを実現しますが、アプリケーションは、サブスクライバ上のレプリケート対象の要素の受信プロセスと完全に切り離されます。
デフォルトのTimesTenレプリケーション・サイクルは次のとおりです。
ただし、次のような場合は、ログをディスクにフラッシュする処理は行われません。
注意: | 更新レコードは、マスター・データ・ストアのトランザクション・ロードに応じて256KB以下のバッチでディスクにフラッシュされ、サブスクライバに転送されます。バッチは、トランザクション・ログ・バッファにログ・データがなくなった場合、または現在のバッチがほぼ256KBの場合に作成されます。書き込むログ・レコードが少なく、トランザクション・ロードが軽い場合、バッチは小さくなります。 |
RETURN RECEIPTサービスは、マスターでのコミット後、コミットされたトランザクションの更新をサブスクライバが受信するまでアプリケーションをブロックして、マスター・データ・ストアとサブスクライバ・データ・ストア間に特定のレベルの同期を提供します。
RETURN RECEIPTをリクエストするアプリケーションは、基本的な非同期の場合と同じ方法でマスター・データ・ストアを更新します。ただし、レプリケート対象の要素を更新するトランザクションをアプリケーションでコミットすると、マスター・データ・ストアは、そのトランザクションの更新がサブスクライバで受信されたことを示す確認応答を受信するまでアプリケーションをブロックします。
RETURN RECEIPTレプリケーションでは、パフォーマンスは低下しますが、マスター・データ・ストアとサブスクライバ・データ・ストア間でのより高いレベルのデータの整合性および一貫性が即時アプリケーションで保証されます。このアプリケーションでは、マスターで障害が発生した場合でも、マスターでコミットされたトランザクションがサブスクライバ・データ・ストアに保持されることが高度なレベルで保証されます。
図1.3に示すように、RETURN RECEIPTレプリケーション・サイクルは、図1.2に示した基本的な非同期サイクルと同じです。ただし、マスター・レプリケーション・エージェントは、トランザクションをコミットした後でアプリケーション・スレッドをブロックし(ステップ1)、サブスクライバが更新バッチの受信を確認する(ステップ5)までそのアプリケーション・スレッドを制御します。サブスクライバからRETURN RECEIPTの確認応答を受信した時点で、そのアプリケーション・スレッドの制御をアプリケーションに返し(ステップ6)、アプリケーションでトランザクションを続行できるようにします。
注意: | データ・ストアの整合性とパフォーマンスのバランスを考慮して、RETURN RECEIPTは完全には同期されていません。このサービスは、サブスクライバがトランザクションを受信したことをアプリケーションに通知しますが、サブスクライバ・データ・ストアでトランザクションがコミットされたこと、またはトランザクションが永続的になったことを保証するわけではありません。 |
設定可能なタイムアウト時間(デフォルトは10秒)内にサブスクライバがトランザクションの受信を確認できない場合、マスター・レプリケーション・エージェントは、サブスクライバから更新の確認応答を受信しなかったことを示す警告を返し、スレッドの制御をアプリケーションに返します。その後、アプリケーションは、マスターに対して別のトランザクションをコミットできるようになり、マスターは以前と同様にサブスクライバへのレプリケーションを続行します。RETURN RECEIPTトランザクションでタイムアウトが発生する原因は多数考えられます。最も可能性の高い原因は、ネットワークの問題、レプリケーション・エージェントの障害、またはマスター・レプリケーション・エージェントでトランザクション・ロードに対して大幅な遅延が発生しているため、タイムアウトが発生する前にRETURN RECEIPTトランザクションをレプリケートできない場合です。RETURN RECEIPTタイムアウトの管理方法については、「RETURNサービス・タイムアウト・エラーおよびレプリケーションの状態変化の管理」を参照してください。
RETURN RECEIPTレプリケーションの設定方法については、「RETURN RECEIPT」を参照してください。
RETURN TWOSAFEサービスは、マスターとサブスクライバ間の完全な同期レプリケーションを実現します。トランザクションがマスターでコミットされた後にサブスクライバに送信される前述のレプリケーション・モードとは異なり、TWOSAFEモードのトランザクションは、マスターでコミットされる前に、まずサブスクライバでコミットされます。
注意: | RETURN TWOSAFEサービスは、ホット・スタンバイ・レプリケーション・スキームでのみ使用できす。このスキームには、単一のマスターおよびサブスクライバが存在し、データ・ストア全体がレプリケーション要素です。ホット・スタンバイ構成の詳細は、「一般ワークロード設定」を参照してください。 |
RETURN TWOSAFEレプリケーションに設定された、マスターとサブスクライバ間でのレプリケーションの動作を次に説明します。
注意: | RETURN TWOSAFEトランザクションの送信は非永続的です。このため、マスター・レプリケーション・エージェントは、サブスクライバに送信する前のログ・レコードをディスクにフラッシュすることはできません。この処理は、レプリケーションが非同期またはRETURN RECEIPTのレプリケーションに設定されている場合、デフォルトで行われます。 |
設定可能なタイムアウト時間(デフォルトは10秒)内にサブスクライバがトランザクションのコミットを確認できない場合、またはサブスクライバからの確認応答がコミットの失敗を示している場合、レプリケーション・エージェントは、マスター・データ・ストアでトランザクションをコミットせずに制御をアプリケーションに返します。その後、アプリケーションは、無条件にコミットするか、コミットを再試行するかを決定できます。必要に応じて、マスター・レプリケーション・エージェントに指示してタイムアウトしたすべてのトランザクションをコミットするようにレプリケーション・スキームを設定できます。
RETURN TWOSAFEレプリケーションの設定方法については「RETURN TWOSAFE」を参照してください。
注意: | RETURN RECEIPTサブスクライバ属性とRETURN TWOSAFEサブスクライバ属性は共存できません。トランザクションは、RETURN TWOSAFEまたはRETURN RECEIPTのいずれかであり、両方にすることはできません。 |