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

SQL Anywhere 12.0.1 » SQL Remote » SQL Remote システムの作成 » 更新の競合

 

VERIFY 句を使用したカスタム競合解決

SQL Remote は、VERIFY 句を使用するメッセージの中で UPDATE 文を生成します。UPDATE 文は、既存の 1 つ以上のローの値を新しい値に変更します。VERIFY 句を含む UPDATE 文には、そのローの既存の値も含まれています。

UPDATE 文を適用すると、統合データベースは既存のローの値を、リモートデータベースで既存のローの値が変更された後に期待される値と比較します。更新の競合は、VERIFY 句の値がデータベースのローと一致しない場合に、データベースサーバーによって検出されます。

たとえば、更新の競合は、次のような順序でイベントが実行されると発生します。

  1. ユーザー 1 が、リモートサイト 1 でローを更新します。

  2. ユーザー 2 が、リモートサイト 2 で同じローを更新します。

  3. ユーザー 1 による更新内容が、統合データベースに送信されて適用されます。

  4. ユーザー 2 による更新内容が、統合データベースに送信されます。

    UPDATE 文に VERIFY 句が含まれているため、統合データベースは競合を検出できます。統合データベースでは、SQL Remote がローに含まれている値を、ユーザー 2 が送信した古いロー値と比較します。これらの値は同じではないため、更新の競合が発生します。

    更新の競合が検出されると、統合データベースでは次の処理を実行します。

    1. オペレーションに対して定義された、すべての競合解決トリガーを起動します。

      「競合解決トリガー」を定義して、更新の競合を処理します。競合解決トリガーは、リモートユーザーがメッセージを適用する場合に、統合データベースでのみ起動されます。

    2. UPDATE 文を実行します。

    3. 競合解決トリガーのすべてのアクションと UPDATE 文が、すべてのリモートデータベースに送信されます。この中には、その競合をトリガーするメッセージを送信したリモートデータベースも含まれています。

      通常、SQL Remote は、トリガーアクションをレプリケートしません。これは、トリガーがリモートデータベースにあることを想定しているためです。競合解決トリガーは統合データベースでのみ起動されるため、このトリガーアクションはリモートデータベースにレプリケートされます。

  5. リモートデータベースは、統合データベースから UPDATE 文を受信します。

    リモートデータベースでは、統合データベースからのメッセージに更新の競合が含まれていると、RESOLVE UPDATE トリガーは起動されません。

  6. リモートデータベースで、UPDATE 文が処理されます。

    プロセスの最後では、システム全体でデータの一貫性が保たれます。

 参照

VERIFY 句を持つ UPDATE 文
verify_all_columns オプション