Das ist DasOliWiki – das persönliche, öffentliche Wiki von Oliver Jakoubek.

Daten zwischen Datenbanken transferieren

Worum geht's? Daten aus einer Datenbank exportieren und in eine andere importieren.

Wie geht's? Beide Datenbanken sind nicht durch irgendwelche Konnektoren verbunden. Die Daten werden zuerst aus der Quelldatenbank in ein Textfile exportiert. Ein Perl-Skript verarbeitet dieses File dann zeilenweise und erstellt ein SQL-File mit INSERT-Statements. Mit diesem File können dann in der Zieldatenbank die Datensätze erstellt werden.

Daten exportieren

Die Daten werden mit einem SQL-Frontend aus der Quelldatenbank ausgelesen und in eine Textdatei exportiert. Das hier abgebildete OUTPUT-Statement ist Sybase-spezifisch. Andere Datenbanken können davon abweichen. Die Datensätze werden hier zeilenweise in eine Textdatei geschrieben und die Felder durch Semikolons getrennt.

SELECT nachname, vorname, plz, ort FROM adressen;
OUTPUT TO C:\temp\adressen.csv FORMAT ASCII DELIMITED BY ';' QUOTE '';

So sieht die exportierte Datei dann aus:

Müller;Max;12345;Musterstadt
Huber;Frieda;54321;Sonstwohausen
Schmidt;Ursula;87654;Berlin

Zeilenweise verarbeiten

Die entstandene Exportdatei verarbeite ich mit einem Perl-Skript. Dem Skript übergibt man als Argument den Pfad zur Exportdatei. Das Skript verarbeitet diese Datei Zeile für Zeile. Es trennt die Felder eines Datensatzes an einem gegebenen Trennzeichen (hier: Semikolon) auf und generiert für jeden Datensatz ein INSERT-Statement. Das Skript druckt alle Statements einfach nacheinander auf die Konsole. Den Output kann man dann in eine Datei umleiten.

#!/usr/bin/env perl
 
use strict;
use warnings;
use diagnostics;
 
use feature qw(say);
 
my $cmd;
 
my $nachname;
my $vorname;
my $plz;
my $ort;
 
while (<>) {
  chomp;
 
  ($nachname, $vorname, $plz, $ort) = split(/;/, $_);
 
  $cmd  = "INSERT INTO adressen ( nachname, vorname, plz, ort ) ";
  $cmd .= "VALUES ( '$nachname', '$vorname', '$plz', '$ort' );";
  say $cmd;
 
}
 
0;

Beim Aufruf wird dem Skript skript.pl der Pfad zur Exportdatei adressen.csv übergeben. Der Output des Skripts - es druckt ja einfach nur auf die Konsole - wird in eine Datei (import.sql) umgeleitet.

skript.pl adressen.csv > import.sql

Daten importieren

Die aus dem oben gezeigten Beispiel entstandene SQL-Datei sieht dann so aus:

INSERT INTO adressen ( nachname, vorname, plz, ort ) VALUES ( 'Müller', 'Max', '12345', 'Musterstadt' );
INSERT INTO adressen ( nachname, vorname, plz, ort ) VALUES ( 'Huber', 'Frieda', '54321', 'Sonstwohausen' );
INSERT INTO adressen ( nachname, vorname, plz, ort ) VALUES ( 'Schmidt', 'Ursula', '87654', 'Berlin' );

Mit einem für die Zieldatenbank geeigneten SQL-Frontend kann man diese Datensätze dann in die Datenbank importieren.

sqlite3 neuedb.db3 import.sql

Siehe auch

Drucken/exportieren