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 のレプリケーション設計と設定

 

更新の競合

データが読み取り用に共有されている場合、または各ロー (プライマリ・キーによって識別される) が 1 つのデータベースのみで更新される場合、更新の競合は発生しません。複数のデータベースでデータが更新された場合にのみ、更新の競合が発生します。

UPDATE 文をレプリケートするため、SQL Remote はローごとに個別の UPDATE 文を発行します。これらのシングル・ロー文は、次のいずれかの理由で失敗する場合があります。

  • 更新するローが 1 つまたは複数のカラムで異なる   存在するはずの値の 1 つが他のユーザによって変更された場合、「更新の競合」が発生します。

    リモート・データベースでは、ローの値に関わらず更新が実行されます。

    統合データベースでは、SQL Remote によって「競合解決」オペレーションが実行されます。たとえば、競合が検出されると、統合データベースでは次の処理を実行できます。

    プライマリ・キーの更新に競合解決は適用されない

    UPDATE 文の競合は、プライマリ・キーの更新には適用されません。SQL Remote システムで、プライマリ・キーを更新しないでください。適切な設計を行って、プライマリ・キーの競合をシステムから取り除く必要があります。

  • 更新するローが存在しない   個々のローはプライマリ・キーの値によって識別されます。ローが削除されたり、プライマリ・キーが別のユーザによって変更されたりしている場合は、更新すべきローが見つかりません。

    リモート・データベースでは、更新は行われません。

    統合データベースでは、更新は行われません。

  • 主キー制約または一意性制約のないテーブルはレプリケートされた更新の WHERE 句のカラムをすべて参照する   2 つのリモート・データベースで同じローが別々に更新され、その変更が統合データベースにレプリケートされた場合は、統合データベースに到着した最初の変更が適用され、2 番目のデータベースの変更は適用されません。

    そのため、データベースの整合性が失われます。したがって、レプリケートされたすべてのテーブルに主キー制約または一意性制約を持たせ、制約対象のカラムが更新されないようにする必要があります。


更新の競合に対するデフォルトの解決
VERIFY 句を使用したカスタム競合解決
トリガを使用したカスタム競合解決