jo: SQL Datenbank mit einer MySQL Datenbank synchronisieren

Hallo,

Wir haben ein neues Warenwirtschaftssytem (SQL) installiert mit dem man Artikel, Bestellungen usw. verwalten kann.

Ist es technisch möglich diese SQL Datenbank mit einer MySQL Datenbank zu synchronisieren, sprich wenn ich einen Artikel in die SQL DB einfüge, diese eine Verbindung aufbaut und diesen auch in die MySQL DB einfügt ?

Hat jemand mit sowas erfahrung ?

gruß

jo

  1. yo,

    Ist es technisch möglich diese SQL Datenbank mit einer MySQL Datenbank zu synchronisieren, sprich wenn ich einen Artikel in die SQL DB einfüge, diese eine Verbindung aufbaut und diesen auch in die MySQL DB einfügt ?

    es gibt keine SQL (structered query languages) datenbank, sondern das ist eine normierte sprache zum kommunizieren mit dem dbms. du meinst sicherlich mssql ?

    Ilja

    1. yo,

      Ist es technisch möglich diese SQL Datenbank mit einer MySQL Datenbank zu synchronisieren, sprich wenn ich einen Artikel in die SQL DB einfüge, diese eine Verbindung aufbaut und diesen auch in die MySQL DB einfügt ?

      es gibt keine SQL (structered query languages) datenbank, sondern das ist eine normierte sprache zum kommunizieren mit dem dbms. du meinst sicherlich mssql ?

      Ilja

      also ich meine SQL Server die eine Verbindung zum Internet aufbaut und dann die MySQL datenbank aktualisiert.

      Hast du da ne Idee ?

      gruß

      1. Hallo nochmal,

        ach, quer durchs Internet soll's auch noch gehen? Das macht den gesamten
        Use Case noch obstruser ;)

        Sicher, dass Daten (die evt. sogar vertraulich sind) aus einem Waren-
        Wirtschafts-System etwas im Internet zu suchen haben?

        Ciao, Frank

        1. Hallo Frank,

          Sicher, dass Daten (die evt. sogar vertraulich sind) aus einem Waren-
          Wirtschafts-System etwas im Internet zu suchen haben?

          Es geht darum Artikel in das WWS einzufügen, diese auch anschließend online in eine MySQL DB aktualisiert werden. Ich denke das sind keine vertrauliche Daten. Artikelname, Bezeichnung, Farbe, Größe...

          Wird sowas denn noch nicht gemacht, ich meine wie machen es andere ?
          Das bedeutet dann doppelte Arbeit. Es wäre doch eine Praktische Sache, oder ?

          Du scheinst nicht viel davon zu halten :-) !

          Wegen der Aktualisierung, kann man ein MySQL QUERY auf erfolgreicher Anfrage Prüfen ?

          gruß

          jo

          1. Hi,

            bestimmt wird ein Fehler bei einer Ausführung eines SQL Statements an
            den Aufrufenden propagiert.

            Bei deinem Szenarium stellen sich mir nur hauptsächlich folgende Fragen:

            • Muss sich MySQL beim MSDTC (Distributed Transaction Controller)
                registrieren (imho ja für die Einschließung in eine Transaktion
                innerhalb des MSSQL Servers und kann es das?
            • Funktioniert dies auch über das Internet?

            Was sicherlich auch noch ne Rolle spielt, ist denn der MySQL Server
            überhaupt durch das Internet zu erreichen und ich meine damit nicht
            irgendein Webinterface, was du aufrufst um MySQL zu bedienen

            Aber stellen wir doch einfach mal eine generelle Frage: Was willst du
            damit erreichen, warum sollen Daten in eine "Inderned"-Datenbank
            publiziert werden? Und warum muss es unbedingt auf Datenbankebene sein?

            Ciao Frank (der sich jetzt noch ne CSI Folge gönnt)

            1. Guten morgen,

              Wie war CSI :-)

              Aber stellen wir doch einfach mal eine generelle Frage: Was willst du
              damit erreichen, warum sollen Daten in eine "Inderned"-Datenbank
              publiziert werden? Und warum muss es unbedingt auf Datenbankebene sein?

              Das liegt doch auf der Hand, man spart sich doppelte Arbeit. Es ist doch Praktisch seinen Artikelstamm offline zu verwalten und diesen dann im Online-Shop verfügbar zu haben.

              Wird sowas denn noch nicht gemacht oder vielleicht nur bei großen Firmen die ihren eigenen Web-Sever Verwalten und alles Intern Regeln können.

              Eine andere Lösung wäre daß das WWS eine Textdatei generieren würde und man das Update anhand dieser Textdatei (XML bevorzugt oder ASCII) ein Update der Datenbank durchführt. Wiegesagt da würde mehr Arbeit anfallen.

              gruß

              jo

              1. Hallo,

                CSI ... hübscher Nikotin-Giftmord. :)

                Das Thema Online-Shop, Artikelstamm hatte ich jetzt schon fast
                vermutet gehabt. Und so wie es klingt, ist es eine fixe Shop-
                Implementierung die nur mit MySQL kann.

                Aus meiner praktischen Erfahrung kann ich sagen, dass, wenn Firmen
                irgendwie Daten für das Web (Onlineshops) publizieren wollen, diese
                das in den seltensten Fällen live mit intern laufenden System ver-
                kuppeln und dann entweder eine dauerhafte dedizierte und gesicherte
                Verbindung zum Provider haben (VPN o.ä.) oder es durch Datenaustausch
                pakete in Dateiform per Up/Download und zeitgesteuerten Jobs machen.

                In welchem Zyklus werden im WWS denn Produkte angelegt/modifiziert
                / entfernt? Und wie dringend muss die Änderung dann online sein?
                Könnte mir das im Moment lediglich dringlich in Bezug auf Preise
                vorstellen, die aus irgendwelchen Gründen stark fluktuierend sind.

                Öfters werden solche Szenarien auch über ASP (nicht der M$ Mist
                sondern "Application Service Providing") abgewickelt, mySAP zum
                Beispiel, so dass das eigentliche WWS bereits beim Provider gehostet
                ist. Und es wird auch Wert auf Homogenität der Systeme gelegt.

                Meine (unverbindliche) Empfehlung:

                • schreibe ein DTS Paket in SQL Server, welches eine Datei generiert
                    und per FTP zum Provider hochlädt, lass es durch den SQL Agent
                    mit einem Schedule ausführen
                • richte auf dem Server des Providers wo der Online-Shop läuft
                    einen CronJob ein, der das Upload-Verzeichnis abarbeitet und die
                    hochgeladenen Files in die Datenbank wieder einfügt

                Viele Grüße,
                Frank

                P.S. du darfst mich für diese Aufgabe auch gern geschäftlich
                engagieren :)

                1. hallo,

                  In welchem Zyklus werden im WWS denn Produkte angelegt/modifiziert
                  / entfernt? Und wie dringend muss die Änderung dann online sein?

                  Das sollte schon zumindest 30 - 60 min danach Online sein.

                  • schreibe ein DTS Paket in SQL Server, welches eine Datei generiert

                  Kannst du mir noch erklaeren was DTS Pakete sind ?

                  und per FTP zum Provider hochlädt, lass es durch den SQL Agent
                    mit einem Schedule ausführen

                  • richte auf dem Server des Providers wo der Online-Shop läuft
                      einen CronJob ein, der das Upload-Verzeichnis abarbeitet und die
                      hochgeladenen Files in die Datenbank wieder einfügt

                  Und noch eine Frage zu den den Cronjobs,

                  Diese cronjobs würden dann z.b. alle 30 Minuten ein PHP Dokument auf dem
                   Server aufrufen, welches nach neuen text Dokumenten in einem Ordner sucht, diese Analysiert und UPDATES oder INSERT in der MySQL DB ausführt.

                  Ist das Richtig so ?

                  gruß

                  jo

                  1. Hallo,

                    30-60 minuten, naja, das geht noch als Latenzzeit, real-time wäre um
                    einiges kritischer.

                    DTS ... Data Transformation Services, die Microsoft'sche Implementierung
                    von ETL (Extraction, Transformation and Loading) Prozessen auf MS SQL
                    Server. Der große Bruder nennt sich dann Biztalk Server. Vielleicht
                    schon mal gehört?

                    DTS Pakete sind quasi kleine Software-Progrämmchen, die einen Workflow
                    oder Dataflow abbilden, erlauben ein gewisses Level von Fehlerhandling
                    und sind transaktionell benutzbar. Zu DTS solltest du auf dem MSDN
                    einiges finden, bzw. auch in der Onlinehilfe vom SQL Server. Für die
                    Entwicklung von DTS Paketen bringt SQL Server Bordmittel mit, erreichbar
                    über den Enterprise Manager.

                    Cron-Jobs, soweit mir bekannt, kann man damit allerlei Code zur
                    Ausführung bringen, nicht nur PHP Seiten :) Es ist einfach ein
                    Systemdienst zur geplanten (auch wiederholten) Ausführung von
                    Aufgaben (Shell-Scripts usw.). Zu dem Thema solltest du genügend
                    Infos im Internet finden. Voraussetzung ist natürlich auch, dass
                    dein Provider soetwas unterstützt :)

                    Hoffe dir geholfen zu haben.

                    Ciao, Frank

                    1. hallo,

                      Hoffe dir geholfen zu haben.

                      ja ,das hast du auf jedenfall :-)
                      Und jetz ab in die Koje

                      danke

                      gruß

                      jo

  2. Hi,

    praktisch habe ich sowas nicht nicht gemacht, dieser Use Case ist mir
    nicht untergekommen aber sicher wird er bei dir seine Gründe haben.

    Potentielle Möglichkeiten wüsste ich jedoch mind. 2 oder 3

    • lass es deine Applikation machen, die Daten in MSSQL speichert,
        sie muss dann dasselbe INSERT an beide Datenquellen schicken,
        wenn es dabei reines ANSI-92 konformes SQL ist, sollte es durchaus
        funktionieren

    • Registriere die MySQL Instanz als Linked-Server (ODBC Treiber
        Installation für MySQL vorausgesetzt) mit dem MS SQL Enterprise
        Manager, erstelle dann auf den betroffenen MSSQL Tabellen z.b.
        INSERT-Trigger, die dann wiederum die gerade eingefügten Daten
        (virtuelle "inserted" tabelle) an den Linked Server propagieren
        Im Fehlerfall rollst du dann die gesamte Transaktion zurück ***

    • Leite DML Aktionen (INSERT / UPDATE / DELETE) über eine Stored
        Procedure im MS SQL, erzeuge darin eine Transaktion die wiederum
        ein entsprechendes INSERT SQL an den als LinkedServer registrierte
        MySQL Instanz schickt.

    Wenn es aber nicht real-time sein muss, dann empfiehlt sich vielleicht
    auch das Thema DTS (Data Transformation Services) mit dem man Pakete
    schnüren kann, die z.b. Daten an fremde Systeme exportieren. Man kann
    diese Pakete dann ihrer Ausführung mit dem SQL Agent "planen".

    *** was soll denn eigentlich passieren, wenn die Weitergabe der
    Daten-Aktualisierung an den MySQL Server schiefgeht, schon mal
    drüber Gedanken gemacht?

    Ciao, Frank