Laden...

Datenbanken synchronisieren

Erstellt von thomas.at vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.272 Views
T
thomas.at Themenstarter:in
111 Beiträge seit 2005
vor 15 Jahren
Datenbanken synchronisieren

verwendetes Datenbanksystem: <Oracle 9i und 10g>

Hallo Leute

ich habe hier zwei Orcaleserver (im Netz 9i und Lokal eine 10g-Express). Ich möchte jetzt aus dem Netzwerk einige Tabellen Lokal ablegen. Die Verbindung und das auslesen der Tabellen funktioniert einwandfrei, d.h. ich habe z.B. zwei DataTables mit den Tabellen im Programm. Wie kann ich jetzt diese beiden Tabellen vergleichen und die Änderungen dann lokal abspeichern. Im Moment löse ich dies so, dass ich die Tabelle lokal leere und alle Datensätze dann kopiere. Bei einigen wenigen und kleinen Tabellen geht dies ja noch, aber das muss doch besser gehen. Mit Merge habe ich es schon versucht, das liefert aber keine brauchbren Ergebnisse. Vielleicht weiß ja einer von den Datenbankspezialisten wie man das lösen kann.

mfG
Thomas

J
3.331 Beiträge seit 2006
vor 15 Jahren

Hallo Thomas,

Wie poste ich richtig? Punkt 1.1 Erst suchen

Wie kann ich jetzt diese beiden Tabellen vergleichen und die Änderungen dann lokal abspeichern.

Was für eine Überraschung: In der Forumssuche nach datenbank* synchron* sind eine ganze Reihe Treffer enthalten, die schon nach dem Titel passen sollten.

Das Hauptproblem wird sein, nach welchen Kriterien die Tabellen verglichen werden sollen. Das kannst nur Du wissen (zumal wenn Du dazu nichts sagst).

Gruß Jürgen

T
thomas.at Themenstarter:in
111 Beiträge seit 2005
vor 15 Jahren
Datenbanken synchronisieren

Hallo

also über die Suche habe ich nichts gefunden (ich arbeite jetzt schon seit einer Woche an dem Problem). Es soll halt am Schluss in der lokalen DB das gleiche stehn wie im Netz. Ich habe schon probiert, das händisch zu lösen, also
1.welche DS wurden gelöscht 1.welche DS sind neu 1.welche wurden geändert

Da das ganze aber für alle Rows und Columns gemacht werden muss, dauert das ganze genau so lange wie der erste Ansatz.

Gruß Thomas

M
221 Beiträge seit 2008
vor 15 Jahren

Ich kenne deine Datenbankstuktur nich, aber wenn ich dein Problem richtig verstehe, dann würde ich es so machen:

Je Tabelle ein neues Feld: Timestamp. In diesem hältst du die Zeit des Inserts Fest.
Dann frägst du bei der lokalen tabelle einfach max( timestampfeld ) ab, ob das das gleiche ist wie das von der auf dem Server.

Wenn "höhere" Timestamps verfügbar sind, dann frägst du die ab und inserts sie in die lokale tabelle!

Eventuell wäre auch noch sinnvoll je Zeile einen Hash einzuführen.
Hier könntest du prüfen ob sich was geändert hat!

Eine Andere Überlegung:

Regelung über die id.

T
thomas.at Themenstarter:in
111 Beiträge seit 2005
vor 15 Jahren

Hallo

leider ist der Server im Netz unser ERP-System (Baan), d.h. auf diesem Server kann ich keine Änderungen vornehmen. Ich möchte halt die benötigten Tabellen lokal halten, damit ich von zu Hause (Telearbeit) nicht immer online sein muss. Für den SQL-Server habe ich ein Tool "SQL-Diff" von Apex, mit dem ich diese synchron halten kann. Dieses wollte ich halt für Oracle nachprogrammieren. Daher sollte das ganze so neutral sein, das es mit beliebigen Tabellen arbeiten kann.

mfG Thomas

K
80 Beiträge seit 2006
vor 15 Jahren

Quick and Dirty: Alle Daten einer Tabelle aus dem Remote laden, checken ob der Identifier auch lokal schon liegt, wenn ja, daten vergleichen, wenn nicht anlegen. Dabei führst du buch über alle ID`s die du verglichen hast und am ende gehst du hin und löscht alle übrigen Zeilen mit den ID´s die nicht im Lokal system vorkommen.
Das machste für jede tabelle. Ich bin sicher auch in Oracle bekommst du aus dem Schema heraus, welche Tabellen es gibt.

Nachteil verbraucht viel Speicher

Wenn das nix is müssen wir uns was anderes überlegen.

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo zusammen,

bei solchen Aktionen wird mir immer wieder ein wenig übel. Wenn eine DB-Synchronisation erforderlich ist, dann mache ich das normalerweise über Datenbank-Tools, die auch direkt mit und in der Datenbank arbeiten. Alles andere ist in aller Regel gebastel.

Klar, eine Synchronisation mit 9i und Express10g kann nur gepfriemel werden.

In einem solchen Fall würde ich fast hergehen und auf das inkrementelle Update verzichten und einen Komplett Dump ziehen und diesen dann in der Express aufspielen.

Das kann aber nur dann einigermassen funktionieren, wenn es die Laufzeit auf dem Echtserver nicht zu sehr einschränkt und wenn die Gesamtdatenmenge sich im Rahmen hält.

Eine Eigenimplementierung ist normalerweise sehr aufwändig und fehlerlastig, wenn auf dem Server keine Modifikationen vorgenommen werden dürfen.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

T
thomas.at Themenstarter:in
111 Beiträge seit 2005
vor 15 Jahren

Hallo

ich habe das ganze so wie Krieger beschrieben hat gelöst. Für meine Zwecke reicht das ganze, auch die Geschwindigkeit geht so (250000 Datensätze in 1,5 Minuten, wobei das laden der Daten den größten Zeitanteil verbraucht).

@Norman-Timo

Kennst Du fertige Tools die auf beide Datenbanken zugreifen können?

Grüße Thomas

F
10.010 Beiträge seit 2004
vor 15 Jahren

Warum hat MS wohl einen "Synchronisation Service" erstellt?

T
thomas.at Themenstarter:in
111 Beiträge seit 2005
vor 15 Jahren

@FZelle

nach solchen Stichwörtern habe ich gesucht. Das mit dem "Synchronisation Service" sieht ganz gut aus (habe auch schon Beispiele für Oracle im Netz gefunden). Werde mir das mal in den nächsten Tagen ansehen und dann eventuell hier darüber berichten.

Thomas

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo thomas.at,

"Synchronisation Service" Yup, auf so etwas in der Art wollte ich hinaus.

Aber auch Oracle bietet mit seinen Datenbanken fertige Technologien an. Stichwörter wären hier "Cold/Warm/Hot Standby" und / oder "High Availibility" etc. All diese Technologien lassen sich auch Nutzen, wenn man eine Offline-DB haben möchte. Das ist quasi ja nichts anderes.

Siehe auch Oracle Dokus:
[PDF] Oracle - Hochverfügbarkeit (Übersicht)
[PDF] Oracle - Hochverfügbarkeit (komplettes Dokument ca. 1,5 MB)

Viele Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”