ヘッダーをスキップ

Oracle TimesTen Replication - TimesTen to TimesTen開発者および管理者ガイド リリース6.0 B25769-01 |
| 目次 | 索引

前へ | 次へ |

## レプリケーションの動作

この項では、TimesTenレプリケーション・エージェント、およびTimesTenレプリケーション・エージェントが連動してマスター・データ・ストアから対応するサブスクライバ・データ・ストアにデータをレプリケートする方法について説明します。

## レプリケーション・エージェント

マスターおよびサブスクライバの各データ・ストアでのレプリケーションは、レプリケーション・エージェントによって制御されます。マスター・データ・ストアのレプリケーション・エージェントは、トランザクション・ログからレコードを読み取り、レプリケート対象の要素への変更を検出した場合はそれらをサブスクライバ・データ・ストアのレプリケーション・エージェントに転送します。その後、サブスクライバ・データ・ストアのレプリケーション・エージェントが、それらの更新をサブスクライバ・データ・ストアに適用します。マスター・エージェントは、更新転送時にサブスクライバ・エージェントが稼働していない場合、転送可能になるまでそれらの更新をログに保持します。

マスターおよびサブスクライバのエージェントは、TCP/IPストリーム・ソケットを介して通信します。マスターおよびサブスクライバの各データ・ストアは、次の情報によって識別されます。

- データ・ストアに対するファイル・システムのパス名から導出されるデータ・ストア名
- ホスト名またはIPアドレス

レプリケーション・エージェントは、TCP/IPアドレスやホスト名などの設定情報をTTREPシステム表から取得します。『Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド』のシステム表およびレプリケーション表に関する章を参照してください。

## レプリケーション・エージェントによって更新をデータ・ストア間でコピーする方法

デフォルトのレプリケーションでは、非同期方式によって更新がデータ・ストア間でコピーされます。非同期レプリケーションでは、最高のパフォーマンスが実現しますが、レプリケート対象の更新がサブスクライバ・データ・ストアでコミットされたことを示す確認応答はアプリケーションに送信されません。レプリケート・データがマスター・データ・ストアとサブスクライバ・データ・ストア間で一貫していることをより高いレベルで保証する必要がある即時アプリケーションでは、オプションのRETURN RECEIPTサービスまたはRETURN TWOSAFEサービスを有効にできます。

RETURN RECEIPTサービスでは、サブスクライバが更新を受信したことがレプリケーションで確認されるまでアプリケーションをブロックすることによって、アプリケーションをレプリケーション・メカニズムと疎結合または同期化します。RETURN TWOSAFEサービスでは、サブスクライバが更新を受信およびコミットしたことがレプリケーションで確認されるまでアプリケーションをブロックすることによって、完全な同期化が行われます。

RETURN RECEIPTレプリケーションでは、同期性を低くすることによって、RETURN TWOSAFEレプリケーションよりパフォーマンスへの影響が小さくなっています。非同期、RETURN RECEIPTおよびRETURN TWOSAFEのレプリケーションの動作の詳細は、次の項を参照してください。

### デフォルトのレプリケーション

デフォルトのTimesTenレプリケーションを使用した場合、アプリケーションは、マスター・データ・ストアを更新すると、サブスクライバがその更新を受信および適用するまで待機せずに処理を続行します。マスターおよびサブスクライバのデータ・ストアには、サブスクライバが更新を正常に受信およびコミットしたことを確認するための内部メカニズムがあります。これらのメカニズムは、更新がサブスクライバで1回のみ適用されることを保証しますが、アプリケーションからは完全に独立しています。

デフォルトのTimesTenレプリケーションは、最高のパフォーマンスを実現しますが、アプリケーションは、サブスクライバ上のレプリケート対象の要素の受信プロセスと完全に切り離されます。

図1.2 基本的な非同期レプリケーション・サイクル

デフォルトのTimesTenレプリケーション・サイクルは次のとおりです。

1. アプリケーションは、ローカル・トランザクションをマスター・データ・ストアにコミットし、他のトランザクションを続行できます。
2. コミット時に、TimesTen Data Managerがトランザクションの更新レコードをトランザクション・ログ・バッファに書き込みます。
3. マスター・データ・ストアのレプリケーション・エージェントは、コミット済トランザクションの更新レコードのバッチをログ・バッファからディスク上のログ・ファイルにフラッシュするようにData Managerに指示し、ディスクを同期化します。マスターで障害が発生して、ディスク上のチェックポイント・ファイルおよびログ・ファイルからデータ・ストアをリカバリする必要がある場合は、この手順によって、リカバリされたマスターにサブスクライバにレプリケートしたすべてのデータが含まれていることが保証されます。

ただし、次のような場合は、ログをディスクにフラッシュする処理は行われません。

- コミット済トランザクションの更新レコードがすでにディスク上に存在する場合。
- マスター・データ・ストアのLogging属性でディスクレス・ロギングを指定している場合。
- TRANSMIT NONDURABLEオプションを指定してレプリケーション・スキームを設定している場合（「送信永続性の設定」を参照）。

4. マスター・レプリケーション・エージェントは、トランザクション更新レコードのバッチをサブスクライバ・レプリケーション・エージェントに転送します。サブスクライバ・レプリケーション・エージェントは、それらをサブスクライバ・データ・ストアに適用します。

注意: 更新レコードは、マスター・データ・ストアのトランザクション・ロードに応じて256KB以下のバッチでディスクにフラッシュされ、サブスクライバに転送されます。バッチは、トランザクション・ログ・バッファにログ・データがなくなった場合、または現在のバッチがほぼ256KBの場合に作成されます。書き込むログ・レコードが少なく、トランザクション・ロードが軽い場合、バッチは小さくなります。

1. サブスクライバ・レプリケーション・エージェントは、更新レコードのバッチを受信したことを示す確認応答をマスター・レプリケーション・エージェントに送信します（この確認応答には、サブスクライバが最後にディスクにフラッシュしたレコードのバッチに関する情報が含まれます）。これで、マスター・レプリケーション・エージェントは、すべてのサブスクライバが受信、適用およびディスクへのフラッシュを完了した更新レコードをトランザクション・ログからパージし、別の更新レコードのバッチを送信できます。サブスクライバ・レプリケーション・エージェントは、非同期でステップ 6の処理に進みます。
2. サブスクライバ・レプリケーション・エージェントは、データ・ストアを更新し、そのData Managerにトランザクション更新レコードをトランザクション・ログ・バッファに書き込むように指示します。
3. サブスクライバ・データ・ストアのレプリケーション・エージェントは、個別のスレッドを使用して、ディスク・ベースのログ・ファイルに更新レコードをフラッシュするようにData Managerに指示します。

### RETURN RECEIPTレプリケーション

RETURN RECEIPTサービスは、マスターでのコミット後、コミットされたトランザクションの更新をサブスクライバが受信するまでアプリケーションをブロックして、マスター・データ・ストアとサブスクライバ・データ・ストア間に特定のレベルの同期を提供します。

RETURN RECEIPTをリクエストするアプリケーションは、基本的な非同期の場合と同じ方法でマスター・データ・ストアを更新します。ただし、レプリケート対象の要素を更新するトランザクションをアプリケーションでコミットすると、マスター・データ・ストアは、そのトランザクションの更新がサブスクライバで受信されたことを示す確認応答を受信するまでアプリケーションをブロックします。

RETURN RECEIPTレプリケーションでは、パフォーマンスは低下しますが、マスター・データ・ストアとサブスクライバ・データ・ストア間でのより高いレベルのデータの整合性および一貫性が即時アプリケーションで保証されます。このアプリケーションでは、マスターで障害が発生した場合でも、マスターでコミットされたトランザクションがサブスクライバ・データ・ストアに保持されることが高度なレベルで保証されます。

図1.3 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レプリケーション

RETURN TWOSAFEサービスは、マスターとサブスクライバ間の完全な同期レプリケーションを実現します。トランザクションがマスターでコミットされた後にサブスクライバに送信される前述のレプリケーション・モードとは異なり、TWOSAFEモードのトランザクションは、マスターでコミットされる前に、まずサブスクライバでコミットされます。

注意: RETURN TWOSAFEサービスは、ホット・スタンバイ・レプリケーション・スキームでのみ使用できす。このスキームには、単一のマスターおよびサブスクライバが存在し、データ・ストア全体がレプリケーション要素です。ホット・スタンバイ構成の詳細は、「一般ワークロード設定」を参照してください。

図 1.4 RETURN TWOSAFEレプリケーション

RETURN TWOSAFEレプリケーションに設定された、マスターとサブスクライバ間でのレプリケーションの動作を次に説明します。

1. アプリケーションが、マスター・データ・ストアでトランザクションをコミットします。
2. マスター・レプリケーション・エージェントが、トランザクション・レコードをログに書き込み、特殊なプリコミット・ログ・レコードをコミット・レコードの前に挿入します。このプリコミット･レコードは、サブスクライバでのコミットのステータスを示す確認応答をマスター・レプリケーションが受信するまで、ログ内でプレース・ホルダとして機能します。

注意: RETURN TWOSAFEトランザクションの送信は非永続的です。このため、マスター・レプリケーション・エージェントは、サブスクライバに送信する前のログ・レコードをディスクにフラッシュすることはできません。この処理は、レプリケーションが非同期またはRETURN RECEIPTのレプリケーションに設定されている場合、デフォルトで行われます。

1. マスター・レプリケーション・エージェントが、更新レコードのバッチをサブスクライバに送信します。
2. サブスクライバ・レプリケーション・エージェントが、サブスクライバ・データ・ストアでトランザクションをコミットします。
3. サブスクライバ・レプリケーション・エージェントが、サブスクライバでトランザクションがコミットされたかどうか、およびコミットが成功したかどうかについての通知とともに確認応答を返します。
4. サブスクライバでコミットが成功した場合、マスター・レプリケーション・エージェントが、マスター・データ・ストアでトランザクションをコミットします。
5. マスター・レプリケーション・エージェントが、制御をアプリケーションに返します。

設定可能なタイムアウト時間（デフォルトは10秒）内にサブスクライバがトランザクションのコミットを確認できない場合、またはサブスクライバからの確認応答がコミットの失敗を示している場合、レプリケーション・エージェントは、マスター・データ・ストアでトランザクションをコミットせずに制御をアプリケーションに返します。その後、アプリケーションは、無条件にコミットするか、コミットを再試行するかを決定できます。必要に応じて、マスター・レプリケーション・エージェントに指示してタイムアウトしたすべてのトランザクションをコミットするようにレプリケーション・スキームを設定できます。

RETURN TWOSAFEレプリケーションの設定方法については「RETURN TWOSAFE」を参照してください。

注意: RETURN RECEIPTサブスクライバ属性とRETURN TWOSAFEサブスクライバ属性は共存できません。トランザクションは、RETURN TWOSAFEまたはRETURN RECEIPTのいずれかであり、両方にすることはできません。