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

SAP Sybase SQL Anywhere 16.0 » 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 オプション