Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Remote » SQL Remote の配備と管理 » SQL Remote の管理 » 保証されたメッセージ配信システムの概要

 

正しい順序でのオペレーション適用の確保

レプリケートされた文が正しい順序で適用されるようにするため、保証されたメッセージ配信システムは、パブリッシャ・データベースとサブスクライバ・データベースのトランザクション・ログ・オフセットを使用します。トランザクション・ログにある各 COMMIT は、十分に定義されたオフセットでマーク付けされています。トランザクションの順序は、トランザクション・ログ・オフセット値を比較して決定されます。

各メッセージには、次のトランザクション・ログ・オフセットが含まれています。

  • 前のメッセージの最後の COMMIT のトランザクション・ログ・オフセットトランザクションがいくつかのメッセージにわたっている場合は、メッセージを正しい順序で並べるためのシーケンス番号がトランザクションにあります。正しい順序でのオペレーション適用の確保を参照してください。

  • メッセージの最後の COMMIT のトランザクション・ログ・オフセット。

メッセージの順序

メッセージを送信すると、前回のメッセージの最後の COMMIT のオフセットによって、メッセージが順に並べられます。トランザクションがいくつかのメッセージにわたっている場合は、メッセージを正しい順序で並べるために、トランザクション内のシーケンス番号が使用されます。

メッセージの送信

SYSREMOTEUSER システム・テーブルの log_sent カラムには、サブスクライバに送信された最新メッセージのローカル・トランザクション・ログのオフセットが入ります。

次の手順では、メッセージが送信されたときに SYSREMOTEUSER システム・テーブルがどのように更新されるかを示します。

  1. パブリッシャの Message Agent (dbremote) はサブスクライバにメッセージを送信すると、送信したメッセージの最後の COMMIT のトランザクション・ログ・オフセット値を log_sent 値に設定します。

    たとえば、パブリッシャが次のメッセージを user1 に送信します。

    「
    (0-0000923200-0000923357-「0」)」
    

    パブリッシャの SYSREMOTEUSER システム・テーブル内で、パブリッシャは log_sent 値に user1 の 0000923357 を設定します。

  2. メッセージが受信されてサブスクライバ・データベースに適用されると、パブリッシャには確認メッセージが送信されます。確認メッセージには、サブスクライバ・データベースによって適用された最新のトランザクション・ログ・オフセットが含まれています。

    たとえば、確認メッセージでは、user1 がトランザクション・ログ・オフセット 0000923357 以前のすべてのトランザクションを適用したことが確認されます。

  3. パブリッシャの Message Agent (dbremote) は確認メッセージを受信すると、SYSREMOTEUSER システム・テーブルの confirm_sent カラムにユーザの確認メッセージのオフセット値を設定します。

    たとえば、パブリッシャは、パブリッシャの SYSREMOTEUSER システム・テーブルの confirm_sent カラムに user1 の 0000923357 を設定します。

log_sent と confirm_sent の両方の値には、パブリッシャのトランザクション・ログのトランザクション・ログ・オフセットが含まれています。confirm_sent 値は、log_sent 値より後のオフセットにはなりません。

メッセージの受信

次の手順では、メッセージが受信されたときに SYSREMOTEUSER システム・テーブルがどのように更新されるかを示します。

  1. サブスクライバ・データベースの Message Agent (dbremote) がレプリケーションのアップデートを受信して適用すると、そのメッセージの最後の COMMIT のオフセットによって SYSREMOTEUSER システム・テーブルの log_received カラムが更新されます。

    たとえば、サブスクライバが次のメッセージを受信して適用すると、SYSREMOTEUSER システム・テーブルの log_received 値に 0000923357 が設定されます。

    「
    (0-0000923200-0000923357-「0」)」
    

    すべてのサブスクライバ・データベースの log_received カラムには、パブリッシャ・データベースのトランザクション・ログでの、トランザクション・ログ・オフセットが入ります。

  2. オペレーションが受信され適用されると、サブスクライバの Message Agent (dbremote) は、その SYSREMOTEUSER システム・テーブルの confirm_received 値を設定し、パブリッシャ・データベースに確認メッセージを送信します。

参照