One-Way-Datenbanksynchronisation

Häufig müssen Daten aus Mastertabellen in einer Datenbank synchronisiert werden, um Tabellen in anderen Datenbanken zu klonen, häufig auf anderen Servern. Angenommen, ein Back-End-System verwaltet Inventardaten und diese Inventardaten müssen letztendlich in eine oder mehrere Datenbanken übertragen werden, die Teil einer Website-Anwendung sind.

Die Quelldaten im Backend-System sind stark normalisiert, mit Dutzenden von Tabellen und Fremdschlüsseleinschränkungen. Es ist ein gut konzipiertes OLTP-RDBMS-System. Viele der fraglichen Tabellen enthalten Millionen von Zeilen. Diese Daten müssen regelmäßig in die anderen Datenbanken übertragen werden. So oft wie möglich; Latenz kann toleriert werden. Vor allem die maximale Verfügbarkeit der Backend- und Remote-Datenbanken ist unerlässlich.

Ich verwende SQL Server und bin mit Änderungsnachverfolgung, Zeilenversion, Triggern usw. vertraut. Ich weiß, dass Microsoft Replikation, SyncFx und SSIS für diese Szenarien stark pusht. Es gibt jedoch einen großen Unterschied zwischen Whitepapers und Übersichten von Anbietern, in denen Technologien empfohlen werden, und der tatsächlichen Implementierung, Bereitstellung und Wartung der Lösung. In der SQL Server-Welt wird die Replikation oft als schlüsselfertige Lösung angesehen, aber ich versuche, alternative Lösungen zu finden. (Es besteht die Befürchtung, dass die Replikation schwierig zu verwalten ist, das Ändern des Schemas schwierig ist und für den Fall, dass jemals eine Neuinitialisierung erforderlich ist, erhebliche Ausfallzeiten für kritische Systeme entstehen.)

Es gibt viele Fallstricke. Aufgrund der komplexen Fremdschlüsselbeziehungen zwischen einer großen Anzahl von Tabellen ist es nicht einfach zu bestimmen, in welcher Reihenfolge Erfassungen durchgeführt oder Aktualisierungen angewendet werden sollen. Aufgrund eindeutiger Indizes können zwei Zeilen so ineinandergreifen, dass die zeilenweise Aktualisierung nicht funktioniert (vor der endgültigen Aktualisierung müssen für jede Zeile Zwischenaktualisierungen durchgeführt werden). Dies sind nicht unbedingt Show-Stopper, da eindeutige Indizes häufig in reguläre Indizes geändert und Fremdschlüssel deaktiviert werden können (obwohl das Deaktivieren der Fremdschlüssel äußerst unerwünscht ist). Oft werden Sie hören, "nur" SQL 2008 Change Tracking und SSIS oder SyncFx zu verwenden. Solche Antworten werden den praktischen Schwierigkeiten nicht gerecht. (Und natürlich fällt es Kunden wirklich schwer, sich darüber Gedanken zu machen, wie schwierig das Kopieren von Daten sein kann, was eine schwierige Situation noch schlimmer macht!)

Dieses Problem ist letztendlich sehr allgemein: Führen Sie eine einseitige Synchronisation vieler stark verwandter Datenbanktabellen mit vielen Zeilen durch. Fast jeder, der mit Datenbanken zu tun hat, muss sich mit solchen Problemen auseinandersetzen. Whitepapers sind weit verbreitet, praktisches Fachwissen schwer zu finden. Wir wissen, dass dies ein schwieriges Problem sein kann, aber die Arbeit muss erledigt werden. Lassen Sie uns hören, was für Sie funktioniert hat (und was Sie vermeiden sollten). Erzählen Sie von Ihren Erfahrungen mit Microsoft-Produkten oder Produkten anderer Anbieter. Wenn Sie die Lösung jedoch noch nicht mit einer großen Anzahl von stark verwandten Tabellen und Zeilen getestet haben, antworten Sie bitte nicht. Lassen Sie uns dies praktisch halten - nicht theoretisch.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage