データが読み取り用に共有されている場合、または各ロー (プライマリ・キーによって識別される) が 1 つのデータベースのみで更新される場合、更新の競合は発生しません。複数のデータベースでデータが更新された場合にのみ、更新の競合が発生します。
UPDATE 文をレプリケートするため、SQL Remote はローごとに個別の UPDATE 文を発行します。これらのシングル・ロー文は、次のいずれかの理由で失敗する場合があります。
更新するローが 1 つまたは複数のカラムで異なる 存在するはずの値の 1 つが他のユーザによって変更された場合、「更新の競合」が発生します。
リモート・データベースでは、ローの値に関わらず更新が実行されます。
統合データベースでは、SQL Remote によって「競合解決」オペレーションが実行されます。たとえば、競合が検出されると、統合データベースでは次の処理を実行できます。
デフォルトの競合解決を使用する。更新の競合に対するデフォルトの解決を参照してください。
VERIFY 句を使用する、カスタマイズされた競合解決を使用する。VERIFY 句を使用したカスタム競合解決を参照してください。
トリガを使用する、カスタマイズされた競合解決を使用する。トリガを使用したカスタム競合解決を参照してください。
UPDATE 文の競合は、プライマリ・キーの更新には適用されません。SQL Remote システムで、プライマリ・キーを更新しないでください。適切な設計を行って、プライマリ・キーの競合をシステムから取り除く必要があります。
更新するローが存在しない 個々のローはプライマリ・キーの値によって識別されます。ローが削除されたり、プライマリ・キーが別のユーザによって変更されたりしている場合は、更新すべきローが見つかりません。
リモート・データベースでは、更新は行われません。
統合データベースでは、更新は行われません。
主キー制約または一意性制約のないテーブルはレプリケートされた更新の WHERE 句のカラムをすべて参照する 2 つのリモート・データベースで同じローが別々に更新され、その変更が統合データベースにレプリケートされた場合は、統合データベースに到着した最初の変更が適用され、2 番目のデータベースの変更は適用されません。
そのため、データベースの整合性が失われます。したがって、レプリケートされたすべてのテーブルに主キー制約または一意性制約を持たせ、制約対象のカラムが更新されないようにする必要があります。
更新の競合に対するデフォルトの解決
VERIFY 句を使用したカスタム競合解決
トリガを使用したカスタム競合解決
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |