Wie synchronisiert man SQL Server Datenbanken auf unterschiedliche Systeme?

Die Herausforderung

Außendienstmitarbeiter, egal ob Kurierfahrer oder Vertriebler, müssen Daten unterwegs erfassen und an die Zentrale zurücksenden. Sie müssen ebenfalls in der Lage sein, neue Daten von der Zentrale zu empfangen.

Als Beispiel: Eine Krankenschwester besucht Patienten und dokumentiert diese Besuche mittels mobilen Endgeräts. Am Ende des Arbeitstages müssen diese Informationen in die zentrale Datenbank des Krankenhauses hochgeladen werden. Im Anschluss können neue Termine und – bei Bedarf – Informationen über neue Patienten für den Folgetag von der Zentrale an das mobile Endgerät übermittelt werden.

In solchen Szenarien besteht ein konstanter Bedarf des Synchronisierens zwischen zwei örtlich getrennten Computersystemen.

Die Lösung

1. Nutzen Sie SQL Server Replikation. Sie synchronisiert Datenbanken, indem sie Datensätze und Datenänderungen von einer Datenbank in die nächste kopiert, selbst wenn das Zielsystem weit entfernt liegt.

Es gibt einige Einschränkungen, wenn man Replikation nutzen möchte:

  • Nur Standard Edition oder Enterprise Edition können Daten per Replikation “veröffentlichen”. Sollten Sie die kostenlose Express Edition einsetzen, müssten Sie die Edition hochstufen
  • Eine Publikation, bei der man von SQL 2005 nach SQL 2008 repliziert, wird bei “Web Replikation” nicht unterstützt.
  • Der “Verteiler” muss mindestens die gleiche Version von SQL Server haben wie der “Verleger”
  • Der “Abonnent” einer transaktionellen Replikation muss eine Version von SQL Server besitzen, die höchstens zwei Versionen hinter der des “Verleger” liegt. Z.B. kann ein “Verleger” auf SQL Server 2000 keinen “Abonnenten” mit SQL Server 2012 aufnehmen
  • Der “Abonnent” bei einer Merge-Replikation muss eine gleiche oder ältere Version von SQL Server als der “Verleger” haben. So kann z.B. ein “Verleger” auf SQL Server 2008 keinen “Abonnenten” mit SQL Server 2012 aufnehmen

2. Nutzen Sie das Sync Framework – ein API um Applikationen zu bauen, die Daten zwischen Datenbanken synchronisieren. Dieses Framework bietet viel Flexibilität, erfordert dafür aber sehr viele Entwicklerfähigkeiten und Entwicklungszeit

3. Nutzen Sie ApexSQL Data Diff, ein SQL Server Datenvergleichs- und Synchronisierungstool, welches Datenunterschiede erkennen und diese Unterschiede automatisch abgleichen kann. Das Tool kann sowohl mit Online-Datenbanken als auch mit Datenbanksicherungen arbeiten, um Berichte über Datenschiefstände zu generieren, Abgleichskripte zu erstellen und diese auch noch auszuführen.

Wie es funktioniert

Stellen Sie sich vor, Sie besitzen eine zentrale Patienten-Datenbank und eine weitere Datenbank über Patientenbesuche auf einem mobilen Endgerät. Die Besuchstermine werden zentral verwaltet und geplant und jeden Morgen auf die Endgeräte synchronisiert. Die Besuchsprotokolle werden in die Tabelle „Besuchsberichte“ gespeichert.

  1. Starten Sie ApexSQL Data Diff
  2. Für Source wählen Sie den zentralen Datenbankserver bei Server und die Patienten-Datenbank bei Database aus
  3. Für Destination wählen Sie das Endgerät und die Datenbank für Patientenbesuche aus.

    Datasources type and details selection in ApexSQL Data Diff

  4. Klicken Sie Compare

    Alle Tabellen aus den ausgewählten Datenbanken werden im Gridview angezeigt.

    Main grid after SQL Server database comparison

    Die eingefügten Datensätze in der “Patientenbesuche”-Tabelle werden nun im “Missing” Tab angezeigt (sie fehlen im Zielsystem).

  5. Überprüfen welche Tabellen Sie synchronisieren wollen

    Checking the tables for database synchronization

  6. Klicken Sie Synchronize

    Synchronize button in ApexSQL Data Diff

  7. Das Synchronization Wizard erscheint, klicken Sie nun Next
  8. Das Synchronization Wizard erscheint, klicken Sie nun Next

    Choosing output action in Synchronization wizard

  9. Klicken Sie Next
  10. Nun erscheint eine Übersicht der geplanten Schritte. Es werden bei Bedarf hier auch noch Warnungen angezeigt

    Summary of the actions and warnings preview

  11. Klicken Sie Synchronize
  12. Klicken Sie OK

    SQL Server database change notification dialogue

    Sobald die Synchronisierung abgeschlossen ist, wird ein Ergebnis der Aktion angezeigt:

    Script execution results message

  13. Klicken Sie auf Save um die Synchronisierungseinstellungen für eine weitere Ausführung zu speichern

Falls Sie am Ende des Tages die neuen Daten von den Krankenschwestern synchronisieren wollen, läuft es ähnlich ab:

  1. Wählen Sie das Endgerät als “Source” und die Zentrale als Destination aus

    Selecting the SQL Server database Source and Destination

  2. Klicken Sie Compare
  3. Wählen Sie die Tabellen aus die Tagsüber mit neuen Daten gefüllt wurden. Die neuen Daten werden unter Missing auftauchen (sie fehlen diese Mal in die Zentrale)

    Comparison and synchronization of the Source and Destination databases

  4. Klicken Sie Synchronize
  5. Folgen Sie die Synchronization Wizard Schritte
  6. Klicken Sie Save um dieses Synkronisierungsprojekt ebenfalls abzuspeichern.

Jetzt wo Sie die zwei Projekte gespeichert haben können Sie die Synkronisierung automatisieren.

    1. Speichern Sie folgende Befehle als E:\Test\Morning.bat ab:

      "C:\Program files 
      (x86)\ApexSQL\ApexSQLDataDiff2014\ApexSQLDataDiff.com" /
      pf:D: \Test\Morning_Central_Nurse.axdd /
      of:D: \Test\MorningSync.sql / sync / bu:D: \Test / v / f
      

      Daraus wird eine Datei unter D:\Test abgelegt um die Daten aus der Zentrale zu lesen, eine Sicherung der Krankenschwester Datenbank zu machen und anschließend die Daten auf das Endgerät zu kopieren

    2. Starten Sie SQL Server Management Studio
    3. Navigieren Sie zum SQL Server Agent und klicken erstellen Sie einen neuen Job:

    4. Geben Sie einen Titel ein

    5. Unter Steps klicken Sie New um einen neuen Schritt einzufügen
    6. Wählen Sie Operating System (CmdExec) aus und klicken Sie Open
    7. Suchen Sie nun die gespeicherte .bat Datei aus

      SQL Server job steps

    8. Klicken Sie OK
    9. Öffnen Sie Schedules und wählen Sie aus wann die Synchronisierung laufen soll

      Scheduling a SQL Server job

Wiederholen Sie Schritte 3 bis 9 für den zweiten Job der abends laufen soll.

Das abgleichen und synchronisieren von unterschiedlichen SQL Server Datenbanken, bis auf Zeilenebene und ganz ohne Programmierkenntnisse, ist mit ApexSQL Data Diff ein Kinderspiel. Dabei ist es egal welche Version bzw. Edition von SQL Server verwendet wird.

Übersetzer: William Durkin

July 29, 2015