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