UPDATE-Anweisung können als löschen-einfügen-Paare repliziert werden


Zusammenfassung


Jede Spalte Teil einer unique-Einschränkung wird aktualisiert, wenn SQL Server implementiert die Aktualisierung als "verzögerte Update", d. als ein Paar Löschen h./INSERT -Vorgängen. Diese "verzögerte Aktualisieren" wird ein Paar Delete-Replikation / Anweisungen an die AbonnentenEINZUFÜGEN . Es gibt auch andere Situationen, in denen eine verzögerte Aktualisierung führen. Daher keine Geschäftslogik im UPDATE -Trigger oder benutzerdefinierte gespeicherte Prozeduren auf dem Abonnenten implementieren sollten werden ebenfalls in Löschen/INSERT -Trigger oder benutzerdefinierte gespeicherte Prozeduren.

Weitere Informationen


Das Standardverhalten bei der Transaktionsreplikation wird verwendet
Einfügen, Aktualisieren und Löschen von benutzerdefinierten gespeicherten Prozeduren auf dem Abonnenten zu verwenden.

Legen Sie Aussagen auf dem Verleger gelten für Abonnenten über einen Prozeduraufruf gespeicherten Einfügen . Ebenso wird eine DELETE -Anweisung durch Löschen gespeicherte Prozedur aufrufen.

Aber bei der Ausführung einer UPDATE -Anweisung als "verzögerte Aktualisieren" Protokollleser-Agent Fügt ein Paar Löschen/ Prozeduraufrufe gespeichertenEinfügen in der Verteilungsdatenbank auf Abonnenten als gespeicherte Update angewendet werden Prozeduraufruf. Beispielsweise haben Sie eine publizierenden Tabelle namens Tabelle1, mit den folgenden drei Spalten:
  • SP1 int
  • SP2 int
  • col3 varchar(30).
Die einzige Einschränkung für Tabelle1 wird auf SP1 über eine primary Key-Einschränkung definiert. Nehmen Sie an, dass Sie einen Datensatz (1,1, "Hamburg").

Wenn Sie diesen Code ausführen:
UPDATE TABLE1 set col1 = 3 where col2 = 'Dallas'
Die UPDATE -Anweisung von SQL Server implementiert, als ein Paar Löschen/ aktualisierenlegen -Anweisung Sie SP1 hat einen eindeutigen Index definiert. Daher setzt der Protokollleser ein Paar Löschen/Einfügen in der Verteilungsdatenbank aufruft. Dies kann Geschäftslogik auswirken, der Trigger oder benutzerdefinierte gespeicherte Prozeduren auf dem Abonnenten vorhanden ist. Zusätzliche Geschäftslogik in DELETE und INSERT -Trigger oder gespeicherte Prozeduren für diese Situation aufzunehmen.

Wenn Sie logische verwenden möchten und alle Ihre Aktualisierungsbefehle repliziert als Löschen / PaareEinfügen können Sie ein Ablaufverfolgungsflag gemäß Artikel der Microsoft Knowledge Base:
160181 -INF: Ablaufverfolgungsflags UPDATE als löschen-einfügen-Paar replizieren
Darüber hinaus wird bei Verwendung ein horizontales Filters in Ihrer Publikation und die aktualisierte Zeile eine Bedingung nicht erfüllt, nur Löschen Aufruf einer Prozedur an die Abonnenten gesendet. Wenn die aktualisierte Zeile die Bedingung nicht erfüllt zuvor jedoch nach der Aktualisierung die Bedingung erfüllt, wird nur der Einfügen Prozeduraufruf durch den Replikationsprozess gesendet.


Im vorhergehenden Beispiel annehmen, dass Sie auch einen horizontalen Filter definiert für Tabelle1: wo col2 = "Hamburg". Wenn Sie diesen Code ausführen:
UPDATE table1 set col2 = 'New York' where col1 = 3
Der Protokollleser-Agent wird nur ein Löschen gespeicherten Prozeduraufruf auf die Abonnenten angewendet werden, da die aktualisierte Zeile horizontalen Filterkriterien nicht erfüllt.

Nun, wenn Sie diesen Code ausführen:
UPDATE table1 set col2 = 'Dallas' where col1 = 3
Der Protokollleser generiert nur den gespeicherten Einfügen Prozeduraufruf, da die Zeile die Bedingung nicht zuvor.

Obwohl ein Aktualisierungsvorgang auf dem Verleger ausgeführt wurde, werden die entsprechenden Befehle auf dem Abonnenten angewendet.

Referenzen


Finden Sie für SQL Server 2000 Service Pack 1 oder höher im folgenden Artikel der Microsoft Knowledge Base:
302341 -INF: neue Ablaufverfolgungsflag Singleton-Update für die Transaktionsreplikation aktivieren