Jürgen: Datenbanken synchronisieren

Hallo zusammen,

kennt jemand eine einfache Möglichkeit ODBC Datenquellen laufend (ca. 1 -10 Sekunden) zu aktualisieren. Dabei ist zu beachten, das die struktur heterogen ist (z.B. 1. DB Oracle, 2. DB MSSQL).

Wichtig ist auch, dass die Tabellen nicht gleich benannt sind und unterschiedliche Felder haben.

Beispiel:

1. DB, Tabelle Aussen:

Name, wert, Fläche, Typ...
test1, 5.63, 687, lesen
test2, 6.55, 654, Schreiben

2. DB, Tabelle Innen:
name, Wert, Raumhöhe, ..
test1, 7.67, 2.45
test2, 6.56, 2.45

Die Datenbank 1 soll nun kontinuierlich die Daten aus Datenbank 2 bekommen.

Ich suche entweder eine SQL Code, in dem ich auch andere Tabellen aufrufen kann oder ein Programm (Tool) das diese Aufgabe für mich macht.

Ideal wäre, wenn in Abhänigkeit eines dritten Wertes auch noch die Richtung der Aktualisierung Definierbar wäre (Lesen, Schreiben)

Wäre super wenn jemand helfen kann

  1. »» Dabei ist zu beachten, das die struktur heterogen ist (z.B. 1. DB Oracle, 2. DB MSSQL).
    »» Wichtig ist auch, dass die Tabellen nicht gleich benannt sind und unterschiedliche Felder haben.

    Hier kann man schon nicht mehr von einer Syncronisation sprechen.

    »» Ich suche entweder eine SQL Code, in dem ich auch andere Tabellen aufrufen kann oder ein Programm (Tool) das diese Aufgabe für mich macht.

    Dieses Tool heisst Bibel. Konkret altes Testament. Konkret "Erschaffung der Welt". Konkret "Am Anfang war das Wort".

    Noch konkreter: Wurde planlos vorgegangen und die Entwicklung dem Zufall überlassen, dann stößt, ähnlich wie beim Neanderthaler die Entwicklungsmöglichkeit an Grenzen.

    Es ist dann besser einen ganz deutlichen Schnitt durchzuführen und sauber weiterzuarbeiten als mit dem weiteren Chaos weiterzumurksen.

    »» Ideal wäre, wenn in Abhänigkeit eines dritten Wertes auch noch die Richtung der Aktualisierung Definierbar wäre (Lesen, Schreiben)

    Wer nicht sauber entwickelt schreibt ein paar Skripte mehr. Dir hilft nur individuelles Skripting oder halt ein neuer Plan und damit ein Umwerfen der bestehenden Datenbanken- und Tabellen.

    »» Wäre super wenn jemand helfen kann
    Es ist nicht sinnvoll hier "irgendwie" durch ein Fertigskript zu helfen, dieses würde den Murks erhalten. Natürlich kann man Werte aus einer Tabelle in eine andere übertragen. Aber Du sprichts selbst von ODBC. Also muss da außenrum noch was sein- Wahrscheinlich irgendeine Anwendung oder Programmiersprache. Dir kann auch deshalb nicht geholfen werden, wenn Du diese Anwendung oder Programmiersprache nicht einmal benennst.
    Zudem ist ODBC hier wohl das langsamste, schlechteste Mittel der Wahl. Sind Deine Datenmengen so klein, dass Du eine Syncronisierung mit ODBC gut hinkommst, dann brauchst Du einfach keine Datenbanken.

    Meine Hilfe an Dich:

    Zuerst solltest Du Dich eines theoretischen Unterbaus versichern. Lerne die Begriffe "Datenbank", "Datenbankmanagementsystem", "Datentabelle", "Datentupel", "Datenfeld" und so weiter zu verstehen und zu benutzen. Lerne anschließend, was eine "Normalisierung" 1. Grades, 2. Grades und so weiter ist.

    Am Anfang steht das Lernen, damit man versteht und nicht das Messer als Hammer, den Hammer als Scheere und die Scheere als Messer benutzt.

    fastix®

    1. Hallo,

      Zuerst solltest Du Dich eines theoretischen Unterbaus versichern. Lerne die Begriffe "Datenbank", "Datenbankmanagementsystem", "Datentabelle", "Datentupel", "Datenfeld" und so weiter zu verstehen und zu benutzen. Lerne anschließend, was eine "Normalisierung" 1. Grades, 2. Grades und so weiter ist.

      Fakt: der OP hat eine heterogene Umgebung mit MS SQL zum einen und Oracle zum anderen (warum ist erstmal völlig nebensächlich - es ist einfach so)

      Fakt: der OP sucht nach einer Möglichkeit, in dieser Umgebung Inhalte zwischen den beiden Datenbanksystemen auszutauschen ... Tool, SQL Script was auch immer

      Und nun du (fastix), warum gehst du in deiner Antwort (als Hilfe möchte ich's noch nicht mal bezeichnen wollen) direkt davon aus, dass der Suchende sich mit dem Thema Datenbanken (Felder, Normalisierung) partout nicht auskennt? Du unterstellst ohne nähere Kenntnis der Sachlage "Planlosigkeit" und dergleichen?

      Dein Tipp mit Normalisierung und lernen und sauber entwickeln ist zwar ne tolle Generalpredigt, aber hier als Antwort nicht wirklich zu gebrauchen. Ist dasselbe, als wenn ich dich nach dem Rezept für Burgunderbraten fragen würde und du mir erklärst, wie das Rind hätte besser geschlachtet werden sollen. Aber, zum Glück hast du nicht noch "Jehova" gerufen.

      Adios, Frank

  2. Hallo Jürgen,

    mindestens MS SQL Server bietet verschiedene Möglichkeiten, sich mit anderen Datenbanken, auch heterogen zu synchronisieren. Das Feature heisst "Replikation".

    So wie ich dich verstanden habe, willst du sicherstellen, dass DB 2 (MS SQL) kontinuierlich an DB 1 (Oracle) Daten liefert? Je nach Version und Edition wird Oracle als Ziel (Subscriber) unterstützt. Wenn dem dann so ist, kannst du auf dem MS SQL Server eine "Publikation" einrichten, welche die entsprechenden "Artikel" (Tabellen/subsets) enthält. MS SQL kennt darüber hinaus mehrere Arten der Replikation:

    • Snapshot: es wird ein Schnappschuss der gesamten Daten beim Publisher gemacht und zum Subscriber geschickt und dort alles überschrieben
    • Transaktional: es wird jede Transaktion an das Ziel weiter gereicht, das verlängert u.U. die eigentliche Transaktion (Schreibvorgang)
    • Merge: es wird Datensatzweise repliziert, ein Distributor managt anhand von "Versionen" der Datensätze was in welche Richtung aktualisiert wird, !! das ist für SQL 2000 die einzige bi-direktionale Replikation

    Schau dir die Online-Hilfe von MS SQL an, wie Replikation implementiert wird, kaufe notfalls einen fähigen Consultant für das Thema ein, der nicht erstmal beim Urschleim anfängt :)

    Alternative 2: evt hat Oracle ebenso ein Feature? kann ich nicht sagen im Moment (zu wenig Praxis damit, welche Version wird benutzt?)

    Alternative 3: Oracle kann man über Linked Servers und den installierten Oracle Client / OLEDB Provider direkt in MS SQL Queries verwenden. Dazu muss die Oracle Instanz als Linked Server registriert werden, dann kannst du den Oracle Server über das Schema Server.Tablespace.Table in MS SQL Queries verwenden. Also kannst du dann Queries schreiben, die die Synchronisation von Hand vornehmen mittels CRUD nach ANSI-92 Standard (da sollte es die wenigstens Interoperabilitätsprobleme geben). Das Query oder die kannst du mittels SQL Agent auf dem MS SQL Server regelmässig als Job durchführen lassen.

    Alternative 4: du programmierst obiges in datenbankunabhängigen Code (C++, Java, .Net)

    Du solltest noch wissen, dass es unter Umständen zwischen MS SQL und Oracle zu Problemen kommen kann (Memory Leaks, usw.), je nach Konstellation von Oracle Client und MS SQL Service Pack.

    Cheers, so long
    Frank