Synchronisation
IBM® Netezza® Replication Services verwendet zwei Ansätze zur Aufrechterhaltung der Synchronisierung: SQL-Anweisungsreplikation (by-SQL-Replikation) und Änderungswertreplikation (by-value-Replikation). Welche Methode verwendet wird, hängt davon ab, ob die SQL-Transaktion einen deterministischen Wert enthält.
Eine SQL-Anweisung ist in einer Replikationsmenge deterministisch, wenn sie bei ihrer Ausführung auf jedem Replikationsknoten der Menge das gleiche Ergebnis liefert. Diese Definition unterscheidet sich von derjenigen einer Anweisung auf einem einzelnen NPS-Knoten. So ist z.B. eine Funktion, die eine Objekt-ID zurückgibt, auf einem einzelnen NPS-Knoten deterministisch, in einer Replikationsumgebung jedoch nicht-deterministisch, da verschiedene Replikationsknoten unterschiedliche IDs für dasselbe Objekt vergeben können.
By-SQL-Replikation
Bei der by-SQL-Replikation wird bei der Ausführung von SQL-Transaktionen auf der primären Seite dieselbe by-SQL-Replikation zur Replikat-Seite transportiert und dort ausgeführt. Zu diesem Zweck zeichnet die primäre Datenbank die SQL Data Manipulation Language (DML)- und Data Definition Language (DDL)-Anweisungen auf, die die replizierten Datenbanken aktualisieren, und schreibt sie in das Replikationsprotokoll. Das Protokoll erfasst auch externe Tabellendaten, die zur Änderung von Tabellen verwendet werden. Netezza Replication Services kopiert dann das Protokoll über das Netzwerk an alle Replikationsknoten im Replikationssatz. Wenn das Replikat das Protokoll wiedergibt, werden die Anweisungen nach dem SQL-Prinzip wiedergegeben und angewendet.
By-value-Replikation
Es gibt jedoch einige Fälle, in denen eine by-SQL-Replikation einen nicht-deterministischen Wert enthält (eine SQL-Anweisung, die bei Ausführung auf verschiedenen Hosts unterschiedliche Ergebnisse liefern kann). Beispielsweise würde eine SQL-Anweisung, die die Funktion now() aufruft, aufgrund von Netzwerkübergangszeiten, Zeitzonenunterschieden oder Latenzzeiten unterschiedliche Ergebnisse liefern, wenn sie auf dem primären System ausgeführt und dann auf dem Replikat wiedergegeben wird. In solchen Szenarien kann das Erfassen und Wiedergeben der SQL-Anweisung allein nicht zu synchronisierten Datenbanken führen. Um nicht-deterministische SQL-Operationen zu handhaben, verarbeitet die Primärdatei die Transaktion nach Wert statt nach SQL. Das heißt, wenn nicht-deterministische Werte erkannt werden, erfasst die Primärdatei die Ergebnismenge der SQL-Anweisungen und sendet sie an die Replik. Wenn das Replikat das Protokoll wiedergibt, wendet es den Nettoeffekt (die DDL und die Zeile vor und nach der Bilderfassung) der SQL-Anweisung auf die Primärdatei an.
Die aktuelle Uhrzeit und das Datum sind Beispiele für nicht-deterministische Funktionen, die durch die By-Value-Replikation unterstützt werden. Wenn aktuelle Zeit- und Datumsfunktionen ausgeführt werden, erfasst das Replikationsprotokoll den Primärwert und repliziert den Wert an das Replikat. Der Effekt der By-Value-Replikation besteht darin, dass die Replikate Werte haben, die mit denen des primären identisch sind, anstatt die Uhrzeit und das Datum auszuwerten, zu dem das Replikat die Abfrage ausgeführt hat.
Anforderungen für die anfängliche Datenbanksynchronisierung in einer replizierten Umgebung
- Um alle globalen Daten auf allen replizierten Knoten identisch zu machen, sichern Sie die Daten auf den Replikaten und stellen Sie sie auf dem Primärknoten wieder her. Dadurch wird sichergestellt, dass es keine doppelten globalen Objekte gibt und dass der Primärkatalog über eine Kopie jedes globalen Objekts in seinem Katalog verfügt. Weitere Informationen finden Sie unter Vorbereiten des Primärsystems für neue Replikate.
- Erstellen Sie auf dem primären Knoten eine Sammlung von Backups für jede replizierte Datenbank und verwenden Sie diese Backups, um die Datenbank auf allen Replikationsknoten wiederherzustellen. Dieser Schritt stellt sicher, dass jeder Knoten identische Werte für alle replizierten Datenbanken hat.
Ausgehend von identischen Datenbankinhalten hält die by-SQL-Replikation die Replikate identisch mit dem Primärsystem. Eine WHERE-Klausel für die Aktualisierung wählt beispielsweise immer die Zeilen auf den Replikaten aus, die mit den Zeilen identisch sind, die auf dem Primärserver ausgewählt wurden. In Fällen, in denen nicht-deterministische Ergebnisse zulässig sind, wie z. B. bei der Funktion DATE/TIME, hält die By-Value-Replikation die Datenbanken synchronisiert.