(0) exportieren Drucken
Alle erweitern

Verstehen und Vermeiden von Synchronisierungsschleifen

Letzte Aktualisierung: Februar 2014

 

 

Willkommen bei SQL-Datensynchronisierung (Vorschau). Dies ist das vierte von fünf Themen, mit denen Sie sich vertraut machen sollten, bevor Sie einen Datensynchronisierungsplan entwerfen und implementieren. Die fünf vorbereitenden Themenbereiche:

Das Plug-In für die Microsoft Azure SQL-Datensynchronisierung auf dem Microsoft Azure Silverlight-Portal wird nicht mehr fortgeführt. Verwenden Sie ab jetzt das Microsoft Azure-Verwaltungsportal für die Azure SQL-Datensynchronisierung.

Sie greifen auf die SQL-Datensynchronisierung (Vorschau) im Microsoft Azure-Verwaltungsportal unter SQL-Datenbank über die Registerkarte SYNC zu. Die Registerkarte SYNCHRONISIERUNG ist nur verfügbar, wenn Sie über mindestens eine Synchronisierungsgruppe verfügen. Im Thema Vorgehensweise: Erstellen einer Synchronisierungsgruppe (SDS)finden Sie weitere Informationen zum Erstellen und Ändern einer Synchronisierungsgruppe in diesem Portal.

Im Abschnitt Navigation unten finden Sie Links zu den Themen, mit denen Sie sich zuerst vertraut machen sollten, sowie Anweisungen zum Erstellen und Ändern von Synchronisierungsgruppen.

Eine Synchronisierungsschleife entsteht durch eine Überlappung zweier Datenbanken in zwei oder mehr Synchronisierungsgruppen, sodass eine Änderung in einer Datenbank in einer Synchronisierungsgruppe durch eine andere Synchronisierungsgruppe erneut in die gleiche Datenbank geschrieben wird. Synchronisierungsschleifen sind selbsterhaltend und können dazu führen, dass identische Daten in zwei oder mehr Datenbanken immer wieder mit großen Datenmengen überschrieben werden.

Jeder der folgenden Umstände kann eine Synchronisierungsschleife verursachen.

  • Ein Zirkelbezug in einer Datenbank oder Tabelle.

  • Ein Zirkelbezug zwischen zwei oder mehr Synchronisierungsgruppen.

  • Eine einzelne Datenbank, die bei zwei unterschiedlichen Agents registriert ist und einer Synchronisierungsgruppe unter zwei oder mehr Agents hinzugefügt wurde.

Beim Entwerfen von Synchronisierungstopologien kann eine Datenbank problemlos in mehreren Synchronisierungsgruppen vorhanden sein. Dies wird in Abbildung 1 dargestellt. Obwohl Datenbank A in Synchronisierungsgruppe 1 und Synchronisierungsgruppe 2 enthalten ist, gibt es keine Feedbackschleife, durch die die gleichen Daten immer wieder in die gleiche Datenbank geschrieben werden. Es ist auch möglich, dass mehrere Datenbanken in zwei Synchronisierungsgruppen enthalten sind, ohne dass dies zu einer Schleife führt. Diese Konfigurationen werden weiter unten behandelt.

Gehen wir die einzelnen Schritte durch, wenn eine Änderung an einer der Datenbanken in Abbildung 1 vorgenommen wird. Wir gehen davon aus, dass die Änderung in Datenbank C vorgenommen wird.

  1. Zeile 1 in Datenbank C wird geändert.

  2. In den Metadaten von Datenbank C wird ein Datensatz erstellt, der angibt, dass Zeile 1 geändert wurde, und der den Änderungszeitpunkt enthält.

  3. Synchronisierungsgruppe 1 wird synchronisiert.

    1. Es wird festgestellt, dass Zeile 1 in Datenbank C außerhalb von SG1 geändert wurde.

    2. Zeile 1 aus Datenbank C wird auf den SG1-Hub geschrieben.

    3. In den Metadaten von SG1 wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG1 geändert wurde.

    4. Zeile 1 aus SG1 wird in Datenbank A geschrieben.

    5. In den Metadaten von Datenbank A wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG1 geändert wurde. Die Synchronisierung von Synchronisierungsgruppe 1 ist abgeschlossen.

Wenn an keiner Datenbank neue Änderungen vorgenommen werden, werden bei der nächsten Synchronisierung in keine Datenbank Daten geschrieben.

Abbildung 1: Zwei Synchronisierungsgruppen, die die gleiche Datenbank enthalten. Keine Synchronisierungsschleife.

Die gleiche Ereignisfolge findet in umgekehrter Richtung statt (entsprechend Abbildung 1), wenn die Änderung in Datenbank D veranlasst wird.

Gehen wir die einzelnen Schritte durch, wenn eine Änderung an einer der Datenbanken in Abbildung 2 vorgenommen wird. Wir gehen erneut davon aus, dass die Änderung in Datenbank C vorgenommen wird.

  1. Zeile 1 in Datenbank C wird geändert.

  2. In den Metadaten von Datenbank C wird ein Datensatz erstellt, der angibt, dass Zeile 1 geändert wurde, und der den Änderungszeitpunkt enthält.

  3. Synchronisierungsgruppe 1 wird synchronisiert.

    1. Es wird festgestellt, dass Zeile 1 in Datenbank C außerhalb von SG1 geändert wurde.

    2. Zeile 1 aus Datenbank C wird auf den SG1-Hub geschrieben.

    3. In den Metadaten von SG1 wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG1 geändert wurde.

    4. Zeile 1 aus SG1 wird in Datenbank A und Datenbank B geschrieben.

    5. In den Metadaten von Datenbank A und Datenbank B wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG1 geändert wurde.

    Die Synchronisierung von Synchronisierungsgruppe 1 ist abgeschlossen.

  4. Synchronisierungsgruppe 2 wird synchronisiert.

    1. Es wird festgestellt, dass Zeile 1 in Datenbank A (oder B) außerhalb von SG2 geändert wurde.

    2. Zeile 1 aus Datenbank A wird auf den SG2-Hub geschrieben.

    3. In den Metadaten von SG2 wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG2 geändert wurde.

    4. Zeile 1 aus SG2 wird in Datenbank B (oder A) und Datenbank D geschrieben.

    5. In den Metadaten von Datenbank B (oder A) und Datenbank D wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG2 geändert wurde.

    Die Synchronisierung von Synchronisierungsgruppe 2 ist abgeschlossen.

Wenn an keiner Datenbank neue Änderungen vorgenommen werden, wird bei der nächsten Synchronisierung von SG1 eine Änderung in Datenbank A (oder B) festgestellt, die nicht von SG1 vorgenommen wurde (sie wurde von SG2 im letzten Zyklus vorgenommen). Auch wenn sich die Daten nicht von den Daten in allen Datenbanken beider Synchronisierungsgruppen unterscheiden, werden sie als geänderte Daten behandelt, und der oben beschriebene Synchronisierungszyklus wird immer wieder ausgeführt, ohne abgeschlossen zu werden.

In diesem Zusammenhang sollte darauf hingewiesen werden, dass im obigen Beispiel für Synchronisierungsschleifen zwar nur eine Zeile betrachtet wird, die Prinzipien für eine Zeile jedoch auch für jede beliebige Anzahl von Zeilen gelten. Stellen Sie sich eine Datenbank mit einer Million Zeilen vor, in der 1 % der nicht geänderten Zeilen in jedem Synchronisierungszyklus geändert wird. Nach einem Zyklus entsteht eine Endlosschleife mit 10.000 Zeilen. Nach zwei Zyklen besteht die Endlosschleife aus den genannten 10.000 Zeilen sowie zusätzlichen 9.900 Zeilen, insgesamt also 19.900 Zeilen. Und die Anzahl der Zeilen in der Schleife nimmt immer weiter zu und nie ab.

Abbildung 2: Zwei Synchronisierungsgruppen mit Synchronisierungsschleife

In Abbildung 3 wird eine komplexere Situation dargestellt, in der die Schleife möglicherweise nicht so leicht zu erkennen ist wie in Abbildung 2.

In Abbildung 3 sind drei Synchronisierungsgruppen vorhanden. Jede Synchronisierungsgruppe verfügt über einen Hub und zwei weitere Datenbanken. Jede Datenbank ist in zwei Synchronisierungsgruppen enthalten, jedoch enthält keine Synchronisierungsgruppe die gleichen zwei Datenbanken.

  • SG1: A und B

  • SG2: B und C

  • SG3: C und A

Gehen wir die einzelnen Schritte durch, wenn eine Änderung an einer der Datenbanken in Abbildung 3 vorgenommen wird. Wir gehen davon aus, dass die Änderung in Datenbank A vorgenommen wird.

  1. Zeile 1 in Datenbank A wird geändert.

  2. In den Metadaten von Datenbank A wird ein Datensatz erstellt, der angibt, dass Zeile 1 geändert wurde, und der den Änderungszeitpunkt enthält.

  3. Synchronisierungsgruppe 1 wird synchronisiert.

    1. Es wird festgestellt, dass Zeile 1 in Datenbank A außerhalb von SG1 geändert wurde.

    2. Zeile 1 aus Datenbank A wird auf den SG1-Hub geschrieben.

    3. In den Metadaten von SG1 wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG1 geändert wurde.

    4. Zeile 1 aus SG1 wird in Datenbank B geschrieben.

    5. In den Metadaten von Datenbank B wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG1 geändert wurde.

    Die Synchronisierung von Synchronisierungsgruppe 1 ist abgeschlossen.

  4. Synchronisierungsgruppe 2 wird synchronisiert.

    1. Es wird festgestellt, dass Zeile 1 in Datenbank B außerhalb von SG2 geändert wurde.

    2. Zeile 1 aus Datenbank B wird auf den SG2-Hub geschrieben.

    3. In den Metadaten von SG2 wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG2 geändert wurde.

    4. Zeile 1 aus SG2 wird in Datenbank C geschrieben.

    5. In den Metadaten von Datenbank C wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG2 geändert wurde.

    Die Synchronisierung von Synchronisierungsgruppe 2 ist abgeschlossen.

  5. Synchronisierungsgruppe 3 wird synchronisiert.

    1. Es wird festgestellt, dass Zeile 1 in Datenbank C außerhalb von SG3 geändert wurde.

    2. Zeile 1 aus Datenbank C wird auf den SG3-Hub geschrieben.

    3. In den Metadaten von SG3 wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG3 geändert wurde.

    4. Zeile 1 aus SG3 wird in Datenbank A geschrieben.

    5. In den Metadaten von Datenbank A wird ein Datensatz erstellt, der angibt, dass Zeile 1 von SG3 geändert wurde.

    Die Synchronisierung von Synchronisierungsgruppe 3 ist abgeschlossen.

Wenn an keiner Datenbank neue Änderungen vorgenommen werden, wird bei der nächsten Synchronisierung von SG1 eine Änderung von Zeile 1 in Datenbank A festgestellt, die nicht von SG1 vorgenommen wurde. Dies wird von SG1 als eine vollkommen andere Änderung behandelt, obwohl die Daten identisch mit den Daten in allen Datenbanken und Hubs sind. Daher wird der gesamte Synchronisierungszyklus unendlich wiederholt.


Abbildung 3: Drei Synchronisierungsgruppen mit Synchronisierungsschleife

Der wichtigste Schritt zum Vermeiden von Synchronisierungsschleifen besteht darin, keine Pfade zu verwenden, bei denen eine Datenänderung in einer Synchronisierungsgruppe am Ende von einer anderen Synchronisierungsgruppe wieder in die ursprüngliche Datenbank geschrieben wird. Es gibt drei Möglichkeiten, um dies zu erreichen.

  • Entwerfen Sie ein eigenes Synchronisierungssystem, sodass keine Schleifen vorhanden sein können.

    Beispiel:

    In Abbildung 2 können Sie Datenbank A oder B aus dem gemeinsam genutzten Bereich entfernen.

    In Abbildung 3 würde die Schleife unterbrochen, wenn Sie eine beliebige Datenbank aus einer Synchronisierungsgruppe entfernen.

  • Verwenden Sie Zeilenfilterung.

    Wenn Sie beim Konfigurieren der einzelnen Synchronisierungsgruppen sich gegenseitig ausschließende Filter erstellen, synchronisieren nie zwei Synchronisierungsgruppen die gleichen Daten.

    Beispiel:

    In Abbildung 2 könnten Sie den Zeilenfilter Area = "NA" in einer Synchronisierungsgruppe und Area = "EU" in der anderen hinzufügen.

  • Verwenden Sie eine Synchronisierungsrichtung.

    Beispiel:

    Wenn Sie die Synchronisierungsrichtungen wie in Abbildung 4 dargestellt festlegen, tritt keine Schleife mehr auf.

Abbildung 4: Verwenden einer Synchronisierungsrichtung zum Vermeiden von Schleifen

SQL-Datensynchronisierung (Vorschau) ist eine Funktion von SQL-Datenbank. Im Azure-Verwaltungsportal können Sie alle Aufgaben zum Erstellen, Bereitstellen und Ändern einer Synchronisierungsgruppe ausführen.

 

Erstellen einer Synchronisierungsgruppe

Die Erstellung einer Synchronisierungsgruppe im Azure-Verwaltungsportal umfasst sechs Schritte. Über die folgenden Links können Sie Details zu den einzelnen Schritten aufrufen.

  1. Die Option zur Anmeldung beim Verwaltungsportal für die Azure SQL-Datenbank
    SQL-Datensynchronisierung (Vorschau) wird erst als Registerkarte unter wird erst als Registerkarte unter SQL-DatenbankSQL-Datenbank angezeigt, nachdem Sie eine Synchronisierungsgruppe erstellt haben.

  2. Installieren eines Client-Agents für die SQL-Datensynchronisierung (Vorschau)

  3. Registrieren einer SQL Server-Datenbank bei einem Client-Agent

  4. Erstellen einer Synchronisierungsgruppe (SDS)

  5. Definieren der Synchronisierungsdaten (SDS)

  6. Konfigurieren einer Synchronisierungsgruppe (SDS)

Ändern einer Synchronisierungsgruppe

Sie können das Schema einer Synchronisierungsgruppe ändern, indem Sie in der Synchronisierungsgruppe Tabellen oder Spalten hinzufügen bzw. entfernen oder indem Sie die Breite bzw. den Datentyp einer Spalte ändern. Über die folgenden Links können Sie ausführliche Informationen aufrufen.

Siehe auch

Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft