Um sicherzustellen, dass die replizierten Anweisungen in der korrekten Reihenfolge übernommen werden, verwendet das System der garantierten Nachrichtenzustellung die Transaktionslog-Offsets der Publikationseigentümer- und Subskribenten-Datenbanken. Jedes COMMIT wird in einem Transaktionslog mit einem klar definierten Offset markiert. Die Reihenfolge von Transaktionen können Sie ermitteln, indem Sie ihre Transaktionslog-Offsetwerte vergleichen.
Jede Nachricht enthält die folgenden Transaktionslog-Offsets:
Das Transaktionslog-Offset der letzten COMMIT-Anweisung in der vorherigen Nachricht Wenn eine Transaktion mehrere Nachrichten umfasst, werden die Nachrichten mithilfe der Sequenznummer innerhalb der Transaktion korrekt gereiht. Sicherstellen, dass die replizierten Vorgänge in der korrekten Reihenfolge übernommen werden.
Das Transaktionslog-Offset der letzten COMMIT-Anweisung in der Nachricht.
Beim Versand werden Nachrichten anhand des Offsets der letzten COMMIT-Anweisung der vorherigen Nachricht aufgereiht. Wenn eine Transaktion mehrere Nachrichten umfasst, wird eine Sequenznummer innerhalb der Transaktion verwendet, um die Nachrichten korrekt zu reihen.
Die log_sent-Spalte in der SYSREMOTEUSER-Systemtabelle enthält das lokale Transaktionslog-Offset für die letzte Nachricht, die an den Subskribenten gesendet wurde.
Im Folgenden wird beschrieben, wie die SYSREMOTEUSER-Systemtabellen aktualisiert werden, wenn Nachrichten gesendet werden.
Wenn der Nachrichtenagent (dbremote) des Publikationseigentümers eine Nachricht an einen Subskribenten sendet, setzt er auch den log_sent-Wert auf den Transaktionslog-Offsetwert der letzten COMMIT-Anweisung in der gesendeten Nachricht.
Beispiel: Der Publikationseigentümer sendet die folgende Nachricht an Benutzer1.
(0-0000923200-0000923357-0)
|
In der SYSREMOTEUSER-Systemtabelle des Publikationseigentümers setzt der Publikationseigentümer den log_sent-Wert auf 0000923357 für Benutzer1.
Nach Empfang und Übernahme der Nachricht in der Subskribenten-Datenbank wird eine Bestätigung an den Publikationseigentümer gesendet. Die Bestätigung enthält das letzte Transaktionslog-Offset, das von der Subskribenten-Datenbank angewendet wurde.
Beispiel: Die Meldung bestätigt, dass Benutzer1 alle Transaktionen bis zum Transaktionslog-Offset 0000923357 angewendet hat.
Wenn der Nachrichtenagent (dbremote) des Publikationseigentümers die Bestätigung erhält, setzt er die confirm_sent-Spalte auf den Wert des Bestätigungsoffsets für den Benutzer in der SYSREMOTEUSER-Systemtabelle.
Beispiel: Der Publikationseigentümer setzt die confirm_sent-Spalte auf 0000923357 für Benutzer1 in der SYSREMOTEUSER-Systemtabelle des Publikationseigentümers.
Sowohl der log_sent- als auch der confirm_sent-Wert enthalten Transaktionslog-Offsets des Publikationseigentümer-Transaktionslogs. Der confirm_sent-Wert kann kein späteres Offset als der log_sent-Wert sein.
Im Folgenden wird beschrieben, wie die SYSREMOTEUSER-Systemtabellen beim Empfang von Nachrichten aktualisiert werden.
Wenn der Nachrichtenagent (dbremote) in einer Subskribenten-Datenbank eine Replikationsaktualisierung empfängt und anwendet, aktualisiert er die log_received-Spalte in der SYSREMOTEUSER-Systemtabelle mit dem Offset der letzten COMMIT-Anweisung in der Nachricht.
Beispiel: Wenn der Subskribent die folgende Nachricht empfängt und anwendet, wird der log_received-Wert in der SYSREMOTEUSER-Systemtabelle auf 0000923357 gesetzt.
(0-0000923200-0000923357-0)
|
Die log_received-Spalte in einer beliebigen Subskribenten-Datenbank enthält daher ein Transaktionslog-Offset, das im Transaktionslog der Publikationseigentümer-Datenbank vorhanden ist.
Wenn die Vorgänge empfangen und angewendet werden, setzt der Nachrichtenagent (dbremote) des Subskribenten den confirm_received-Wert in seiner SYSREMOTEUSER-Systemtabelle und sendet dann eine Bestätigung an die Publikationseigentümer-Datenbank.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |