Große Datenbanken mit unterschiedlicher Struktur

Ben

Registered User
Also, wie "vereine" ich denn am besten 2 Datenbanken die unterschiedliche Strukturen haben? Ich brauch aus der sourceDB auch nicht alle Felder und die die ich brauch müssen in die targetDB in die von mir benannten Felder eingefügt werden...

So, nun werden manche sagen nimm n PHP-Script... leider nicht so einfach...
Die DB´s haben mehrere Millionen Einträge und mit PHP ist das imho nicht zu realisieren.

Wie stell ich das denn am besten an!?

Dankeschön :>
 
So, nun werden manche sagen nimm n PHP-Script...
Richtig! :)

Die DB´s haben mehrere Millionen Einträge und mit PHP ist das imho nicht zu realisieren.
Warum nicht?
Falls Du an die Laufzeit-Beschränkung von PHP denkst:
Wenn Du das Script von der Console aus aufrufst (/usr/bin/php mein-converter.php) hast Du i.d.R. keine Beschränkungen.
Vom Speicherverbrauch dürfte es auch nicht wesentlich ist, da Du bestimmt nicht erst alle Datensätze einließt und dann erst schreibst, sondern schön brav einen "Cursor" nutzt.

huschi.
 
Also, wie "vereine" ich denn am besten 2 Datenbanken die unterschiedliche Strukturen haben? Ich brauch aus der sourceDB auch nicht alle Felder und die die ich brauch müssen in die targetDB in die von mir benannten Felder eingefügt werden...

Als erstes würde ichmit "select feldA, feldB, feldC from tabelle1 into tabelle1copy" die gewünschten Spalten extrahieren, dann dort mit "alter table" die Feldnamen ändern und schliesslich das ganze dann als File exportieren und in die 2. Datenbank einspielen.

Das geht aber sicherlich auch noch direkter und schneller.
 
Das ist wie der berühmte Schuss ins blaue. ;)
Welche Datenbank DB2, Postgres, Mysql, ... wird benutzt?
Wie sehen die Tabellen aus, die Du vereinen willst?
Willst Du nur zwei Datenbanken vereinen oder zwei unterschiedliche Tabellen aus zwei Datenbanken? Du sprichst da von Datenbanken vereinen.
Warum wird die alte Datenbank nicht weiter benutzt und angepaßt?

Wie Du siehst viele Fragen. :D

z.B. geht aus das:
Code:
INSERT INTO Tabelle1(zeile1, zeile2)
	SELECT A.zeile3,
		A.zeile2
	FROM Tabelle2 As A
 
Last edited by a moderator:
Ok. Zwischen zwei Datenbanken geht es nicht.
Man könnte allerdings so eine neue Tabelle befüllen, diese exportieren und dann in die neue Datenbank importieren.

Nachtrag:
Mal ein Link: Über Trigger auf andere DB zugreifen - Entwickler-Forum
Ich weiß nicht, ob das auch in MySql mit Trigger gehen könnte, so würde man sich das exportieren und importieren sparen. :/
 
Last edited by a moderator:
Sag mir mal, wie das funktionieren soll bei zwei unterschiedlichen Datenbanken in mySQL, daseddy.
Bin zwar kein Eddy, aber es geht schon (Berechtigung vorrausgesetzt):
Code:
insert into DB1.Tabelle1 (field1, field2) select field3, field4 from DB2.Tabelle2

Leider läßt uns Ben im leeren hängen, was er nun konkret will, etc.
Also warum sich weiter den Kopf zerbrechen?

huschi.
 
Ich weiß ja nicht was Du machst, aber bei mir funzt das. :D

PS: Hab mir extra die Mühe gemacht es zu testen!

huschi.
 
Hm, ich hab so ein Konstrukt gestern versucht und bei mir isses gescheitert. Naja, muss ja auch irgendein Unterschied zwischen Profi und Amateur vorhanden sein :)
 
So ok, danke erstmal an alle!

Es handelt sich um mysql Datenbanken, sorry hatte ich vergessen...

Es sind DB´s mit jeweils nur einem Table, habe nun beide Tables in eine Datenbank gespielt und die Struktur angepasst mit der möglichkeit von daseddy... nun habe ich 2 Tables mit exakt gleicher Struktur.

So, nun hab ich grad versuch alles vom sourceTable in den targetTable zu schieben - dort ist ein UNIQUE-Key gesetzt - und er bricht (logischerweise?) ab sobald etwas doppeltes ist... das ist schlecht, sehr schlecht...

Gibt es irgendwas das ich machen kann das er bei nem doppelten Eintrag nicht abbricht sondern einfach nicht einträgt und mit dem rest weitermacht?

Versteht ihr was ich mein? Komm mir grad so unfähig mich auszudrücken vor...

mfg


edit: ok hab die funktion ON DUPLICATE KEY entdeckt *g* läuft grade, ich denke ich hab mein Ziel erreicht! Danke euch!
 
Last edited by a moderator:
Back
Top