Supportnet / Forum / Datenbanken
2 Oracle Datenbanken abgleichen (online/offline)
Frage
Hallo!
Die Daten einer zentralen Oracle-Datenbank (10g) sollen für einen Zugriff "on the road" (d.h. Notebook ohne Netzwerkzugang) auch offline zur Verfügung stehen (Offlinedatenbank). Befindet sich das Notebook wieder im Netz sollen die beiden Datenbanken synchronisiert werden.
Wie geht man dieses Problem am besten an?
Im Moment steht für das Notebook Oracle Lite oder OracleXE (beta) zur Diskussion. Wie funktioniert der Abgleich? Kann man diesen so automatisieren, dass das Notebook eigentlich immer offline arbeitet und der Datenabgleich im Hintergrund automatisch erfolgt? Dies wäre für die Oberfläche, bei der es sich - noch(!) - um VBA handelt und Bedienung von Vorteil.
Danke für eure Tipps!
Antwort 1 von Ingolf
Hallo mike_kn:
Vorweg erst mal ein Dämpfer: Es gibt keine Möglichkeit (zumindest keine, die mit vertretbarem Aufwand umsetzbar ist), Oracle-Datenbanken zu synchronisieren.
Deine Idee mit der Offline-Datenbank ist theoretisch sehr reizvoll. Aber - was willst Du synchronisieren. Einzelne User, Instanzen, ...?
Wenn Du mal einen Blick in die Oracle-internen Strukturen und Objekte gemacht hast, dann wird Dir die Aussichtslosigkeit Deines Vorhabens vielleicht bewußt.
Du hast nicht nur Tabellen, Views, Indizes, Packages, ..., sondern noch eine ganze Reihe weiterer Oracle-Objekte zu beachten. Diesen Moloch zu synchronisieren - wenn Du es schaffst, dann kannst Du damit viel Geld verdienen.
Außer mit dem Import/Export-Utility Datenbanken auszutauschen, sehe ich keine Möglichkeit für Deine Wünsche. Wobei dann natürlich die auf der jeweils anderen DB gemachten Änderungen bei Import-Vorgängen überschrieben werden.
Wie gesagt, theoretisch möglich, aber Aufwand für die Umsetzung ist enorm (das Thema Laufzeit ist da noch nicht mal ansatzweise betrachtet. Denn Du kannst ja nicht tabellenbezogen arbeiten, sondern mußt wirklich jedes Objekt anfassen, abgleichen und ggf. - wie auch immer - im jeweils anderen System aktualisieren).
Tut mir leid, Dich nicht in Deinem Vorhaben bekräftigt zu haben,
Ingolf
P.S.: Arbeite nun seit über 10 Jahren auch im DB-Umfeld als Berater und Entwickler (Schwerpunkt Oracle), so daß ich mir doch ein wenig Erfahrung zutraue.
P.S.2: Wenn Du mal einen detaillierten Einblick in die Oracle-Strukturen gewinnen willst, dann rate ich Dir zur Verwendung eines Werkzeugs, das Dir diese Einblicke gewährt. Z.B. TORA (ehemals Open-Source, Entwickler ist aber mittlerweile bei QUEST gelandet. Vielleicht findest Du durch "googlen" aber noch eine Download-Möglichkeit) oder "Advanced Query Tool" (www.querytool.com, hat fast die Möglichkeiten des QUEST-Produkts TOAD, kostet aber deutlich weniger).
Vorweg erst mal ein Dämpfer: Es gibt keine Möglichkeit (zumindest keine, die mit vertretbarem Aufwand umsetzbar ist), Oracle-Datenbanken zu synchronisieren.
Deine Idee mit der Offline-Datenbank ist theoretisch sehr reizvoll. Aber - was willst Du synchronisieren. Einzelne User, Instanzen, ...?
Wenn Du mal einen Blick in die Oracle-internen Strukturen und Objekte gemacht hast, dann wird Dir die Aussichtslosigkeit Deines Vorhabens vielleicht bewußt.
Du hast nicht nur Tabellen, Views, Indizes, Packages, ..., sondern noch eine ganze Reihe weiterer Oracle-Objekte zu beachten. Diesen Moloch zu synchronisieren - wenn Du es schaffst, dann kannst Du damit viel Geld verdienen.
Außer mit dem Import/Export-Utility Datenbanken auszutauschen, sehe ich keine Möglichkeit für Deine Wünsche. Wobei dann natürlich die auf der jeweils anderen DB gemachten Änderungen bei Import-Vorgängen überschrieben werden.
Wie gesagt, theoretisch möglich, aber Aufwand für die Umsetzung ist enorm (das Thema Laufzeit ist da noch nicht mal ansatzweise betrachtet. Denn Du kannst ja nicht tabellenbezogen arbeiten, sondern mußt wirklich jedes Objekt anfassen, abgleichen und ggf. - wie auch immer - im jeweils anderen System aktualisieren).
Tut mir leid, Dich nicht in Deinem Vorhaben bekräftigt zu haben,
Ingolf
P.S.: Arbeite nun seit über 10 Jahren auch im DB-Umfeld als Berater und Entwickler (Schwerpunkt Oracle), so daß ich mir doch ein wenig Erfahrung zutraue.
P.S.2: Wenn Du mal einen detaillierten Einblick in die Oracle-Strukturen gewinnen willst, dann rate ich Dir zur Verwendung eines Werkzeugs, das Dir diese Einblicke gewährt. Z.B. TORA (ehemals Open-Source, Entwickler ist aber mittlerweile bei QUEST gelandet. Vielleicht findest Du durch "googlen" aber noch eine Download-Möglichkeit) oder "Advanced Query Tool" (www.querytool.com, hat fast die Möglichkeiten des QUEST-Produkts TOAD, kostet aber deutlich weniger).
Antwort 2 von Ingolf
mike_kn noch ein Nachtrag:
Sollte es sich bei Deinem Vorhaben "nur" darum handeln, daß Du bestimmte Tabellen(!) abgleichen willst, dann kannst Du dieses mit Hilfe der Mengenoperatoren INTERSECT, UNION und MINUS durchführen. Allerdings ist dazu Programmieraufwand (entweder SQL oder PL/SQL) notwendig. Bzgl. des Abgleichs der kompletten DB (User, Instanz, ...) bleibe ich bei meinen zuvor gemachten Aussagen.
Gruß, Ingolf.
Sollte es sich bei Deinem Vorhaben "nur" darum handeln, daß Du bestimmte Tabellen(!) abgleichen willst, dann kannst Du dieses mit Hilfe der Mengenoperatoren INTERSECT, UNION und MINUS durchführen. Allerdings ist dazu Programmieraufwand (entweder SQL oder PL/SQL) notwendig. Bzgl. des Abgleichs der kompletten DB (User, Instanz, ...) bleibe ich bei meinen zuvor gemachten Aussagen.
Gruß, Ingolf.
Antwort 3 von mike_kn
Danke zunächst für Deine Antwort, Ingolf.
Ich hätte ein wenig präziser beschreiben sollen, was benötigt wird. Es geht tatsächlich "nur" um Tabellen, die - möglichst komplett automatisiert - abgeglichen werden müssen.
Die Tabellen liegen auf dem zentralen Server im Netzwerk und werden - z.Zt.(!) - nur von einer Person geändert/erweitert. Andere Personen recherchieren im aktuellen Datenbestand. Die zuständige Person benötigt die Daten/Tabellen aber auch unterwegs, wenn kein Zugang zum zentralen Server zur Verfügung steht. Daher die Überlegung, für diesen "Offlinebetrieb" einere kleine, vergleichsweise leichte Datenbank einzusetzen, in der notwendigen Tabellen zugreifbar sind. Idealerweise sollten Änderungen an den Offlinedaten automatisch in den zentralen Bestand übernommen werden, wenn das Notebook wieder im Firmennetz ist. Die Änderungen beschränken sich dabei auf Tabellen. Auf etwas Anderes kann über das vorhandene UI nicht zugegriffen werden (und dem Benutzer fehlen zudem die Rechte und Kenntnisse, um weitergehende Änderungen durchzuführen).
Statt
Notebook <-> Netzwerk <-> zentrale Datenbank (DB)
sollte das ganze vermutlich so aussehen
Notebook <-> *lokale* DB auf Notebook <-> Netzwerk <-> zentrale DB,
wobei ein Abklemmen des Netzwerks und damit der zentralen DB ohne Problem möglich sein muss.
Die Frage und das Problem ist, welche lokale DB dafür in Frage kommt und wie sich der Abgleich automatisieren lässt. Bei der zentralen DB handelt es sich um Oracle 10g.
Bitte um (weitere) Tipps.
Ich hätte ein wenig präziser beschreiben sollen, was benötigt wird. Es geht tatsächlich "nur" um Tabellen, die - möglichst komplett automatisiert - abgeglichen werden müssen.
Die Tabellen liegen auf dem zentralen Server im Netzwerk und werden - z.Zt.(!) - nur von einer Person geändert/erweitert. Andere Personen recherchieren im aktuellen Datenbestand. Die zuständige Person benötigt die Daten/Tabellen aber auch unterwegs, wenn kein Zugang zum zentralen Server zur Verfügung steht. Daher die Überlegung, für diesen "Offlinebetrieb" einere kleine, vergleichsweise leichte Datenbank einzusetzen, in der notwendigen Tabellen zugreifbar sind. Idealerweise sollten Änderungen an den Offlinedaten automatisch in den zentralen Bestand übernommen werden, wenn das Notebook wieder im Firmennetz ist. Die Änderungen beschränken sich dabei auf Tabellen. Auf etwas Anderes kann über das vorhandene UI nicht zugegriffen werden (und dem Benutzer fehlen zudem die Rechte und Kenntnisse, um weitergehende Änderungen durchzuführen).
Statt
Notebook <-> Netzwerk <-> zentrale Datenbank (DB)
sollte das ganze vermutlich so aussehen
Notebook <-> *lokale* DB auf Notebook <-> Netzwerk <-> zentrale DB,
wobei ein Abklemmen des Netzwerks und damit der zentralen DB ohne Problem möglich sein muss.
Die Frage und das Problem ist, welche lokale DB dafür in Frage kommt und wie sich der Abgleich automatisieren lässt. Bei der zentralen DB handelt es sich um Oracle 10g.
Bitte um (weitere) Tipps.
Antwort 4 von Ingolf
Hallo mike_kn:
Ein wenig knifflig ist Dein Problem schon. Erst mal die Wahl der "kleinen" DB. Erst mal brauchst Du auch auf Deinem Notebook einen Oracle-Server, da Du die Daten ja auch "offline" ändern willst. Ggf. kann die Lite oder XE Version reichen (hab es selbst noch nicht probiert).
So, angenommen die Wahl der Notebook-DB ist geklärt (mit DB meine ich hier nicht die Tabellen, sondern das DB-System), dann brauchst Du zum Abgleich erst mal eine Möglichkeit, daß sich beide DBs miteinander unterhalten können. Üblicherweise wird dazu ein Datenbank-Link verwendet. Nehmen wir mal weiter an, der DB-Link ist auch OK, dann brauch es noch die entsprechenden Routinen (die Mengenoperationen von Oracle bieten sich da sicher an), um den Abgleich durchzuführen. D.h. jemand muß sich hinsetzen und ein Programm dafür schreiben (oder ein SQL-Script).
ABER: Zu klären ist auf jeden Fall, ob die Offline-Bearbeitung überhaupt möglich ist. Die betreffenden Tabellen der zentralen Datenbank sind sicher irgendwie in einen größeren Kontext eingebettet. D.h. die Daten dieser Tabellen haben sicher Relationen zu anderen Tabellen, ggf. laufen irgendwelche Trigger aufgrund von Datenänderungen in den Tabellen ab (und wirken auf andere Tabellen), Konsistenzprüfungen können laufen etc.. Damit ist es ein wenig problematisch nur einen Teil (nämlich den Teil der für Dich von Interesse ist) zu manipulieren, da ggf. die Gesamtkonsistenz der "großen" Datenbank beeinträchtigt werden kann.
Somit: Vor jeglicher Umsetzungsbemühungen würde ich Dir zu einer ausführlichen Analyse der Gesamt-DB raten. Dann eine Analyse der gewünschten "kleinen" DB. Erst dann macht es Sinn zu entscheiden, ob ein Programm zur Synchronisation möglich ist. Wie gesagt, mit den normalen Oracle-Tools sind Deine Möglichkeiten eher gering, sondern da ist Aufwand (Analyse + Programmierung = Kosten) notwendig. Das sollte Dein Unternehmen (wer-auch-immer) auf jeden Fall berücksichtigen. Analyse und Umsetzung im Forum durchzuführen ist da wohl auch ein wenig schwierig.
Gruß, Ingolf
Ein wenig knifflig ist Dein Problem schon. Erst mal die Wahl der "kleinen" DB. Erst mal brauchst Du auch auf Deinem Notebook einen Oracle-Server, da Du die Daten ja auch "offline" ändern willst. Ggf. kann die Lite oder XE Version reichen (hab es selbst noch nicht probiert).
So, angenommen die Wahl der Notebook-DB ist geklärt (mit DB meine ich hier nicht die Tabellen, sondern das DB-System), dann brauchst Du zum Abgleich erst mal eine Möglichkeit, daß sich beide DBs miteinander unterhalten können. Üblicherweise wird dazu ein Datenbank-Link verwendet. Nehmen wir mal weiter an, der DB-Link ist auch OK, dann brauch es noch die entsprechenden Routinen (die Mengenoperationen von Oracle bieten sich da sicher an), um den Abgleich durchzuführen. D.h. jemand muß sich hinsetzen und ein Programm dafür schreiben (oder ein SQL-Script).
ABER: Zu klären ist auf jeden Fall, ob die Offline-Bearbeitung überhaupt möglich ist. Die betreffenden Tabellen der zentralen Datenbank sind sicher irgendwie in einen größeren Kontext eingebettet. D.h. die Daten dieser Tabellen haben sicher Relationen zu anderen Tabellen, ggf. laufen irgendwelche Trigger aufgrund von Datenänderungen in den Tabellen ab (und wirken auf andere Tabellen), Konsistenzprüfungen können laufen etc.. Damit ist es ein wenig problematisch nur einen Teil (nämlich den Teil der für Dich von Interesse ist) zu manipulieren, da ggf. die Gesamtkonsistenz der "großen" Datenbank beeinträchtigt werden kann.
Somit: Vor jeglicher Umsetzungsbemühungen würde ich Dir zu einer ausführlichen Analyse der Gesamt-DB raten. Dann eine Analyse der gewünschten "kleinen" DB. Erst dann macht es Sinn zu entscheiden, ob ein Programm zur Synchronisation möglich ist. Wie gesagt, mit den normalen Oracle-Tools sind Deine Möglichkeiten eher gering, sondern da ist Aufwand (Analyse + Programmierung = Kosten) notwendig. Das sollte Dein Unternehmen (wer-auch-immer) auf jeden Fall berücksichtigen. Analyse und Umsetzung im Forum durchzuführen ist da wohl auch ein wenig schwierig.
Gruß, Ingolf
Antwort 5 von mike_kn
Danke für Deine kompetenten Tipps! Es hört sich so an, als sei das ganze zumindest nicht unmöglich.
Auf dem Notebook läuft nun OracleXE, die verwendeten Tabellen wurden bereits testweise eingerichtet und das ganze funktioniert auch.
Es gibt keine Einbettung in einen größeren Kontext und die Tabellenstruktur ist (somit), trotz zwei Dutzend Tabellen, vergleichsweise gut überschaubar. Es sind ein paar Sequences und Trigger eingerichtet, die aber nur als Autoincrement-Ersatz IDs hochzählen.
Ich werde nun mit Hora einen DB-Link einrichten und dann ist mir nicht ganz klar, wie ich am besten weitermache. Idealerweise sollte wohl eine der beiden DBs in regelmäßigen Abständen die Tabellen abgleichen bzw. dieses versuchen. Im Moment genügt hier one-way. D.h., der zentrale Server könnte seine Tabellen "einfach" alle x Minuten vom Notebook ziehen. (Wie) Lässt sich dies server-seitig automatisieren? Hier schwebt der Begriff "DB-Package" durch den Raum, aber ich muss mich erst in die Materie einarbeiten...
Kannst Du mir nochmals weiterhelfen?
Auf dem Notebook läuft nun OracleXE, die verwendeten Tabellen wurden bereits testweise eingerichtet und das ganze funktioniert auch.
Es gibt keine Einbettung in einen größeren Kontext und die Tabellenstruktur ist (somit), trotz zwei Dutzend Tabellen, vergleichsweise gut überschaubar. Es sind ein paar Sequences und Trigger eingerichtet, die aber nur als Autoincrement-Ersatz IDs hochzählen.
Ich werde nun mit Hora einen DB-Link einrichten und dann ist mir nicht ganz klar, wie ich am besten weitermache. Idealerweise sollte wohl eine der beiden DBs in regelmäßigen Abständen die Tabellen abgleichen bzw. dieses versuchen. Im Moment genügt hier one-way. D.h., der zentrale Server könnte seine Tabellen "einfach" alle x Minuten vom Notebook ziehen. (Wie) Lässt sich dies server-seitig automatisieren? Hier schwebt der Begriff "DB-Package" durch den Raum, aber ich muss mich erst in die Materie einarbeiten...
Kannst Du mir nochmals weiterhelfen?