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

SQL Anywhere 11.0.1 (Deutsch) » SQL Remote » SQL Remote-Replikationsplanung » SQL Remote-Replikation planen und einrichten » Aktualisierungskonflikte

 

Benutzerdefinierte Konfliktlösung mittels einer VERIFY-Klausel

SQL Remote generiert UPDATE-Anweisungen in den Nachrichten, die die VERIFY-Klausel verwenden. Eine UPDATE-Anweisung ändert den Wert einer oder mehrerer Zeilen von einem vorhandenen Wert auf einen neuen Wert. UPDATE-Anweisungen, die eine VERIFY-Klausel einbeziehen, enthalten auch den vorhandenen Wert der Zeile.

Bei der Anwendung einer UPDATE-Anweisung vergleicht die konsolidierte Datenbank ihren vorhandenen Wert der Zeile mit dem Wert, den die entfernte Datenbank als den vorhandenen Wert der Zeile erwartet. Ein Aktualisierungskonflikt wird vom Datenbankserver erkannt, wenn die Werte in der VERIFY-Klausel nicht mit den Zeilen in der Datenbank übereinstimmen.

Beispiel: Ein Aktualisierungskonflikt tritt auf, wenn die folgende Abfolge von Ereignissen stattfindet:

  1. Benutzer 1 aktualisiert eine Zeile am entfernten Standort 1.

  2. Benutzer 2 aktualisiert dieselbe Zeile am entfernten Standort 2.

  3. Die Aktualisierung von Benutzer 1 wird an die konsolidierte Datenbank gesendet und angewendet.

  4. Die Aktualisierung von Benutzer 2 wird an die konsolidierte Datenbank gesendet.

    Da die UPDATE-Anweisung eine VERIFY-Klausel enthält, kann die konsolidierte Datenbank Konflikte erkennen. In der konsolidierten Datenbank vergleicht SQL Remote den Wert in seiner Zeile mit dem alten Wert, den Benutzer 2 gesendet hat. Da diese Werte nicht übereinstimmen, gibt es einen Aktualisierungskonflikt.

    Wenn ein Aktualisierungskonflikt erkannt wird, führt die konsolidierte Datenbank Folgendes durch:

    1. Sie löst etwaige Konfliktlösungstrigger aus, die für den Vorgang festgelegt sind.

      Sie legen Konfliktlösungstrigger fest, um Aktualisierungskonflikte zu behandeln. Konfliktlösungstrigger werden nur dann in einer konsolidierten Datenbank aktiviert, wenn Nachrichten von einem entfernten Benutzer übernommen werden. Weitere Hinweise finden Sie unter Benutzerdefinierte Konfliktlösung mit Trigger.

    2. Sie führt die UPDATE-Anweisungen aus.

    3. Sie sendet die Aktionen des Konfliktlösungstriggers und die UPDATE-Anweisung an alle entfernten Datenbanken, auch an den Absender der Nachricht, die den Konflikt ausgelöst hat.

      Üblicherweise repliziert SQL Remote keine Triggeraktionen: Es wird vorausgesetzt, dass der Trigger in der entfernten Datenbank vorhanden ist. Konfliktlösungstrigger werden nur in konsolidierten Datenbanken aktiviert, und daher werden ihre Aktionen in entfernte Datenbanken repliziert.

  5. Die entfernten Datenbanken empfangen die UPDATE-Anweisungen von der konsolidierten Datenbank.

    In entfernten Datenbanken werden RESOLVE UPDATE-Trigger nicht ausgelöst, wenn eine Nachricht von einer konsolidierten Datenbank einen Aktualisierungskonflikt enthält.

  6. In der entfernten Datenbank werden die UPDATE-Anweisungen abgearbeitet.

    Am Ende des Prozesses sind die Daten innerhalb des Systems konsistent.


UPDATE-Anweisungen mit einer VERIFY-Klausel
Die VERIFY_ALL_COLUMNS-Option verwenden