none
Synchronisation zwischen MS SQL Server und MySQL Datenbank(inkrementell) RRS feed

  • Frage

  • Hallo,

    wie kann ich alle 3 Stunden einen lokalen MS SQL Server auf Veränderungen prüfen und ggf. die Veränderungen auch in einer MySQL Datenbank ändern(natürlich automatisch)

    Gerne auch selber programmieren oder natürlich Tools

    Danke!

    Samstag, 9. November 2019 13:34

Antworten

  • Der direkte Abgleich ist in der Regel nur möglich, wenn es eine Möglichkeit vom SQL Server aus gibt, auf den MySQL Server zuzugreifen. In dem Fall könnte man bspw. einen Linked Server von MS SQL zu MySQL erstellen und dann damit arbeiten.

    Je nach Struktur ist der Abgleich dann ggfs. mit einfachen Mitteln über ein paar SQL Statements machbar. Hierfür müsste man aber genauer wissen, wie die Tabellen aufgebaut sind, ob es bspw. Datum/Uhrzeit Spalten gibt, die das letzte Änderungsdatum eines jeden Datensatzes enthalten bzw. wie man auf MS SQL Ebene die Datensatzmenge auf die, die zuletzt angelegt, geändert und gelöscht wurden, eingrenzen kann.

    Je nach Datenmenge kann man natürlich auch einfach einen vollständigen Abgleich durchführen. Aber auch hier: Poste bitte mal ein Beispiel für die Tabellen auf beiden Seiten und die Infos bzgl. Datenmengen.

    Tools gibt es mehrere, bspw.:

      Microsoft SQL Server to MySQL Conversion & Sync

      Attunity Replicate

    Ansonsten schau ggfs. auch mal hier:

      Synchronize data from MSSQL to MySQL


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 9. November 2019 21:26
    Moderator

Alle Antworten

  • Hallo René,

    was genau willst Du denn vergleichen? Struktur? Daten? Beides? In welche Richtung(en)?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 9. November 2019 14:55
    Moderator
  • Die Daten
    Samstag, 9. November 2019 15:20
  • Der direkte Abgleich ist in der Regel nur möglich, wenn es eine Möglichkeit vom SQL Server aus gibt, auf den MySQL Server zuzugreifen. In dem Fall könnte man bspw. einen Linked Server von MS SQL zu MySQL erstellen und dann damit arbeiten.

    Je nach Struktur ist der Abgleich dann ggfs. mit einfachen Mitteln über ein paar SQL Statements machbar. Hierfür müsste man aber genauer wissen, wie die Tabellen aufgebaut sind, ob es bspw. Datum/Uhrzeit Spalten gibt, die das letzte Änderungsdatum eines jeden Datensatzes enthalten bzw. wie man auf MS SQL Ebene die Datensatzmenge auf die, die zuletzt angelegt, geändert und gelöscht wurden, eingrenzen kann.

    Je nach Datenmenge kann man natürlich auch einfach einen vollständigen Abgleich durchführen. Aber auch hier: Poste bitte mal ein Beispiel für die Tabellen auf beiden Seiten und die Infos bzgl. Datenmengen.

    Tools gibt es mehrere, bspw.:

      Microsoft SQL Server to MySQL Conversion & Sync

      Attunity Replicate

    Ansonsten schau ggfs. auch mal hier:

      Synchronize data from MSSQL to MySQL


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Samstag, 9. November 2019 21:26
    Moderator
  • Der Zugriff über Linked-Server ist wohl die Voraussetzung.

    Zum Abgleich gibt es 2 Methoden:
    Man liest die Daten einer Zeile und macht einen Concat über alles und vergleicht dieses mit der Zieltabelle.
    Dies würde aber beide Tabellen komplett verarbeiten müssen.

    Oder man fügt den Tabellen Trigger hinzu (Insert/Update/Delete) um die ID's (Primary/UniqueKey) und Art (I/U/D) in einer Logtabelle zu protokollieren. Dies geht dann z.B. relativ einfach per "Insert into LogTable (Id, Art) select Id, 'I' from inserted".

    Der Syncprozess brauch dann nur noch die Logtabelle (per distinct, da Mehrfachänderungen auftraten können) abzuarbeiten und per Linkedserver zu übertragen.

    Sonntag, 10. November 2019 14:21