MySQL Blob zu DB2 Blob migrieren
- Dieses Thema hat 4 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 11 Jahre, 7 Monaten von
Anonym.
-
AuthorPosts
-
26. Januar 2012 um 11:20 Uhr #4144
AnonymInaktivHallo.
Ich stehe gerade vor dem Problem, einen BLOB-Datentyp, den ich mittels phpMyAdmin aus einer MySQL-Datenbank exportiert habe, in eine DB2-Datenbank zu importieren.
Beim Versuch, dies zu bewerkstelligen, bekomme ich allerdings eine Fehlermeldung.
Hier einmal der verwednete SQL-Befehl und die erhaltene Fehlermeldung:
[code sql]
INSERT INTO aufnahme (laenge, jahr, Audiofile, ort, promotion)
VALUES ('400', '1866', 0x4944330300000000761e505249560000200f00007777772e616d617a6f6e2e636f6d00000[...], 'hier', 'y');
[/code]
Fehlermeldung:
DB21034E Der Befehl wurde als SQL-Anweisung verarbeitet, da es sich um keinen gültigen Befehl des Befehlszeilenprozessors handelte. Während der
SQL-Verarbeitung wurde Folgendes ausgegeben:
SQL0103NÂ Das numerische Literal
"0x4944330300000000761e505249560000200f00007777772e616d617a6f6e2e636f6d" ist
ungültig. SQLSTATE=42604Leider habe ich auch nicht die Möglichkeit, ein Programm zu installieren, dass das Einfügen der im MySQL-Blob gespeicherten Dateien zu importieren.
Weiß jemand Rat?
Grüße, Antragon
31. Januar 2012 um 14:48 Uhr #4286
AnonymInaktivDa ich leider keine Lösung dafür gefunden habe, BLOBs per Konsole zu befülle, habe ich jetzt mittels Java versucht, die Musikdatei in die DB2 Datenbank einzufügen. Leider scheint auch dieser Lösungsansatz nicht zu funktionieren – ggf. weiß jemand von euch, woran es liegen könnte.
Als Hintergrundinformation sollte ich anmerken, dass ich zunächst mittels JSP versucht habe die Daten in die DB einzutragen. Die DB läuft lokal auf dem PC, auf dem ich arbeite ud wird per Konsole mittels DB2start gestartet.
Hier ein Teil des Java-Codes:
[code java]
private void insertData()
{
Connection connection = null;
PreparedStatement statement = null;
try
{
// Verbindung herstellen
connection = CConnectionHolder.getConnection();
if (connection != null)
{
File track01 = new File("music_track.mp3");
FileInputStream mp3FileInputStream;
try {
mp3FileInputStream = new FileInputStream(track01);
statement = connection.prepareStatement("INSERT INTO aufnahme (laenge, jahr, Audiofile, ort, promotion)"
+"VALUES (?, ?, ?, ?, ?)");statement.setInt(1, 355);
statement.setInt(2, 1991);
statement.setBinaryStream(3, mp3FileInputStream, (int)track01.length());
//statement.setBlob(3, );
statement.setString(4, "Some Location");
statement.setString(5, "y");statement.executeUpdate();
} catch (FileNotFoundException e) {
System.err.println(e.toString());
}
}
} catch (SQLException e) {
System.out.println("SQL_ERROR: " + e);
} finally
{
// Verbindung schlie�en
if (connection != null)
{
try
{
// Statement-Objekt schließen
statement.close();
// Datenbank-Verbindung schlie�en
connection.close ();
} catch (Exception e)
{
System.err.println(e.toString());
}
}
}
}
[/code]
Grüße, Antragon
31. Januar 2012 um 16:51 Uhr #4388
AnonymInaktivHi Antragon,
komme leider erst heute dazu zu antworten: XML-, BLOB- und CLOB-Daten sind "anders", aber das hast Du ja schon längst erkannt, was das letzte Code Sniplet zeigt.
Vermutlich triffst Du noch auf andere MySQL-Fragestellungen, weswegen ich Dir dringend folgendes Redbook der IBM empfehlen möchte: "MySQL to DB2 Conversion Guide" unter http://publib-b.boulder.ibm.com/abstracts/sg247093.html?Open.
Dort: "Binary Large Objects (BLOB data type) usually contain binary data. Exporting of binary data into text files is not possible. So, if your BLOBs contain binary data, you must convert them in a different way than exporting and loading. The IBM Data Movement tool handles the conversion BLOB data for you."
Wenn denn mal die BLOB’s separiert in einzelnen Files vorliegen, könntest Du den IMPORT Command verwenden:
Siehe http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.xml.doc/doc/r0024040.html sowie http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.admin.cmd.doc/doc/r0008304.html.Ich hoffe es hilft weiter. Ist halt jetzt eine "Fleißarbeit".  :-/
Gruß
GernotPS: Einen Visual Studio .net Plugin gibts auch noch.
31. Januar 2012 um 18:21 Uhr #4456
AnonymInaktivErst einmal vielen Danke für deine Antwort.
Das von dir verlinkte Dokument habe ich zuvor auch schon entdeckt, kam nur nicht so recht dazu, es durchzulesen, da ich neben dem Praktikum, bei dem ich DB2 verwenden muss, noch ein weiteres zum Thema Softwaretechnik habe und in beiden ist im Moment recht viel zu programmieren (JSP und Datenbankanbindung usw.).
Ich habe mir jetzt mal die Mühe gemacht, und DB2 auf meinem System installiert. Jetzt programmiere ich gerade an einer Datentransfer-Application in Java, die die Daten aus meiner MySQL-Datenbank ausliest und in die DB2-Datenbank schreibt – zumindest die Tabellen, in denen die Blobs enthalten sind.
Etwas enttäuscht bin ich von den Programmen, die im DB2 Paket enthalten waren, ich dachte, man könnte damit wenigstens relativ einfach Daten in die DB2 Datenbank einlesen, ähnlich phpMyAdmin für MySQL – aber da habe ich nichts brauchbares gefunden.Grüße, Antragon (der hofft, dass sein Vorhaben Früchte tragen wird)
2. Februar 2012 um 9:51 Uhr #4494
AnonymInaktivEs ist zum Mäuse melken… Ich habe es nun endlich geschafft, die Daten mittels Java aus meiner lokalen MySQL-Datenbank auszulesen und in meine lokale DB2-Datenbank zu übertragen – somit habe ich also mein erstes Etappenziel erreicht.
Als nächstes wollte ich dann die übertragenen Daten aus meiner lokalen DB2-Datenbank exportieren, um diese dann in die DB2-Datenbank an der Uni zu importieren. Dabei gibt es nun aber zwei Probleme:
[olist][*]Die Formate DEL und WSF kommen überhaupt nicht in Frage und IXF schneidet nach 32000 (was auch immer..) die Daten ab – was alles andere als brauchbar ist.
[*]Das Importieren auf der Uni-Datenbank funktioniert auch nicht, wie gewünscht.
[/olist]
Zu 2. habe ich mir die Versionsnummern der verwendeten Datenbanken angeschaut – meine lokale DB2 hat Version 9.7.500.4299 und die Uni DB2 verwendet 9.7.0.0. Liegt da ggf. eine Inkompatibilität der Daten vor?Auch mittels LOAD lassen sich die exportierten Daten nicht korrekt einfügen – hier einmal eine der LOAD-Anweisungen
[code sql]
connect to musik;
set schema dbp70;LOADÂ FROM
"/home/dbp70/Desktop/Block_3/DB_Exports/data/dbp70_kollektion.txt"
OF DEL
LOBS FROM "/home/dbp70/Desktop/Block_3/DB_Exports/data/dbp70_kollektion/"
MODIFIED BY LOBSINFILEÂ CODEPAGE=1208Â COLDEL~ ANYORDERÂ USEDEFAULTS CHARDEL"" DELPRIORITYCHARÂ DUMPFILE="/home/dbp70/Desktop/Block_3/DB_Exports/dump/dbp70_kollektion.txt"
METHOD P (1,2,3,4)
MESSAGES "/home/dbp70/Desktop/Block_3/DB_Exports/msg/dbp70_kollektion.txt"
REPLACE INTO "KOLLEKTION"
(
"KOID",
"NAME",
"PUBJAHR",
"COVER_IMAGE"
);
[/code]
Die benötigten Dateien zum Import sind vorhanden, auch die Dateien, in denen die binären Blob-Daten enthalten sind, sowie die DEL-Dateien, in denen aufgeführt ist, wo in diesen Blob-Dumps die Startpositionen der jeweiligen Blod-Daten wären.So langsam kann mir DB2 mal den Buckel runter rutschen! 😉
Grüße, Antragon
-
AuthorPosts
You must be logged in to reply to this topic.