PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : datenbanken abgleichen



horschi
18-01-2002, 14:45
hiho

habe folgendes problem:

Rechner Nr1 hat eine sql datenbank auf der pladde, die ich auf nen anderen Rechner (nennen wir ihn mal rechner Nr2 :-) ) uebertragen moechte.

liegt da auf rechna 1 vielleicht irgendwo (im /var verz. ?) ne datei die ich grad rueberkopieren kann ??

oder gibts ne moeglichkeit die direkt ueber netzwerk abzugleichen ??

mfg.
Christian

elrond
21-01-2002, 09:21
falls du eine mysql-db betreibst ist das einigermassen problemlos mittels mysqldump möglich. wenn du keine allzugrossen datenmengen zu bewegen hast

könnte ohne eine date zu schreiben so funktionieren (hab's nicht getestet...)<- ich hb' eben getestet, funxt genau so...

mysqldump -h rechner1 -u username -p password --add-drop-table datenbank|mysql datenbank

wenn du das auf dem rechner 2 ausführst und die datenbank "datenbank" vorhande ist sollte das gehen.:cool:

TheDodger
21-01-2002, 13:52
das kommt darauf an, was auf rechner a für eine sql-db läuft (mysql, postgresql, oracle, ingres, etc.) und welche du auf rechner b einsetzt.
zwischen 2 verschiedenen sql-db's daten auszutausen sollte imho nicht ganz so einfach sein, ansonsten, daß tun, was elrond sagt. :)

(sollte doch eigentlcih möglich sein, eine pipe zwischen 2 db's zu legen und nur die daten auszutauschen, ohne die tables ...)

elrond
21-01-2002, 14:01
Original geschrieben von TheDodger

(sollte doch eigentlcih möglich sein, eine pipe zwischen 2 db's zu legen und nur die daten auszutauschen, ohne die tables ...)

mysqldump produziert sql-statements;
insert into table values(bla,bla,bla);

d.h. du müsstest die daten aus den tabellen vorher löschen. genau das geschieht mittels drop table, da auch das neuanlegen der tab im dump geschieht. ;)

TheDodger
21-01-2002, 14:27
Original geschrieben von elrond


mysqldump produziert sql-statements;
insert into table values(bla,bla,bla);

das weiß ich :)



d.h. du müsstest die daten aus den tabellen vorher löschen. genau das geschieht mittels drop table, da auch das neuanlegen der tab im dump geschieht. ;)

so meinte ich das aber ned ...
vorrausgesetzt, die tabellen exestieren bereits in der 2. DB, wäre ein pipe zwischen 2 DB's schneller, als ein dump der einen und ein insert auf der anderen.
Zumal man mit dieser Methode der Austausch der Daten zwischen zwei unterschiedlichen DB's möglich ist.
(hmmm, IMHO unterstützt PowerBuilder so eine Art Pipeline'ning ... allerdins auf ODBC-Basis)

elrond
21-01-2002, 14:34
Original geschrieben von TheDodger


(hmmm, IMHO unterstützt PowerBuilder so eine Art Pipeline'ning ... allerdins auf ODBC-Basis)

ich weiss nicht was powerbuilder da macht...:rolleyes:

aber irgendwie erinnert das sehran M$-SQL-Server mit diesem replikationsschwachsinn. ich kenne keine anwendung wo das tatsächlich läuft...

alternativ könnte man selbst ein wenig basteln. die betroffenen tabellen bräuchten timespamps und dann könnte man zb mit erl ein script laufen lassen, das diesen abgleich zyklisch vornimmt. damit wäre man etwas unabhängiger von der datenbasis.

TheDodger
21-01-2002, 15:09
Original geschrieben von elrond


ich weiss nicht was powerbuilder da macht...:rolleyes:

aber irgendwie erinnert das sehran M$-SQL-Server mit diesem replikationsschwachsinn. ich kenne keine anwendung wo das tatsächlich läuft...

ich kenn den M$-SQL Server nicht, aber PowerBuilder :)

Er holt sich nur die Daten via 'select * ...' aus der Tabelle der 1. Datenbank und schiebt die mit 'insert ...' ind die 2. Datenbank.
Bei bedarf legt er die entsprechenden Tabellen an.
Die Daten dazu holt sich PB aus den entsprechenden Systemtabellen.
Eigentlich ein intelligentes Tool, wenn ein Kunde die Migration von einem alten ASE-Server auf 'ne Oracle9i verlangt ...
Da kriegt man die Daten u.U. innerhalb eines Tages in die neue DB ...



alternativ könnte man selbst ein wenig basteln. die betroffenen tabellen bräuchten timespamps und dann könnte man zb mit erl ein script laufen lassen, das diesen abgleich zyklisch vornimmt. damit wäre man etwas unabhängiger von der datenbasis.
was vorraussetzt, das man ein Linux-System läufen hat ... Aber in manchen Fällen trifft das (noch) nicht zu :-/

elrond
22-01-2002, 08:15
das eigentliche problem bei solchen abgleichen ist doch aber das inhaltliche. mit 'select * from..' und 'insert into...' ist das sehr hübsch, aber irgendwie muss man doch dafür sorgen, dass die daten konsistent bleiben. selbst bei nur einer tabelle müsste man entweder den betroffenen datensatz vor dem insert löschen oder ein 'update...' drüberjagen. das ist imho relativ schwierig das einigermassen db-unabhängig hinzukriegen, da man vor dem eigentlichen abgleich datenstrukturen bzgl. primary und forgin keys analysieren müsste...

Hut ab, wenn PB das ordentlich macht.;)

TheDodger
22-01-2002, 12:27
Tut es ... mit allen DB-typischen Abhängigkeiten zwischen den einzelnen Tabellen.
Dafür liest PB ja auch extra die Systemtabellen aus, um das so hinzubekommen.
Ja, dafür kann man PB gut gebrauchen ... auch m´um relativ schnell funktionierende DB-Frontends zu erstellen, das aber nicht mittels C++ (oder einer ähnlichen Hochsprache), sondern einer eigenen Syntax ...

Aber ich denke, das hier geht jetzt massiv an der eigentlichen Fragestellung vorbei und ist Off-Topic :D

Sellew
22-01-2002, 12:37
trotzdem noch kleine frage an dich TheDodger.

ich kenne auch PowerBuilder, gibts das auch für linux?? habs bis jetzt nur für windose gesehen.

gruß.

TheDodger
22-01-2002, 12:50
nein, ich kenne auch nur die version für windows, für linux gibt es IMHO nicht's.
Aber du kannst ja mal bei sybase anfragen! ;)

Mattburger
23-01-2002, 16:29
Hallo Christian,

falls du dich fuer die Datenbank noch entscheiden kannst, so kann ich dir fuer deinen Fall den Interbase-Server empfehlen. Hier hast du tatsaechlich nur ein File z.B. mydb.gdb, welches du auf einen anderen Rechner uebertragen kannst.

Das ganze funktioniert natuerlich nur wenn dieses nicht im parallel-Betrieb erfolgen soll.

Die Datenbank sollte auch waehrend des Kopiervorgangs nicht geoeffnet sein.

:rolleyes:

horschi
23-01-2002, 20:16
ich benutze mysql

habe das problem inzwischen selbst loesen koennen, ein blick in die manpages hat geholfen, ich komm mir richtig bloed vor sowas hier gefragt zu haben :-)

in /var/lib/mysql/datenbankname liegt alles drin
auf dem zielrechner muss mann allerdings die datenbank erstmal per mysqladmin oder sowas aehnlichem erstellen, sonst geht das rueberkopieren nicht


naja, auf jeden fall vielen dank fuer eure zahlreichen postings

mfg.
Christian

elrond
24-01-2002, 09:16
wenn du mit der mysql arbeitest macht es dennoch sinn das eigens dazu entwickelte werkzeug "mysqldump" ,wie in meinem ersten posting beschrieben, zu benutzen. so kannst du vermeiden, dass es zu konkurrierenden zugriffen auf die datenbankfiles kommt. ;)