"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

MySQL Server auf MSSQL linken

Umlüx 16.01.2014 - 09:57 6858 21
Posts

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8985
Folgendes Problem:
Ich hab hier einen MSSQL 2008 R2 Server und möchte dort einen MySQL (4.1.7) reinlinken um später eine Tabelle vom MSSQL nach MySQL zu synchronisieren. Leider komm ich nicht wirklich zurecht.

1. Schritt
MySQL Connector am MSSQL installiert und eine System-DSN einrichten. Die funktioniert auch, der Test ist erfolgreich.
click to enlarge

2.Schritt
Verbindungsserver am MSSQL einrichten.
click to enlarge
Die Verbindungsinformationen hab ich natürlich auch hinterlegt.

Der MySQL Server wird nun in der Baumstruktur angezeigt und ich kann mich auch durch die Datenbanken und Tabellen klicken. Nur seh ich keine Daten.. Eine Abfrage bringt nur folgendes zu tage:
Zitat
[DBVA].[WebPortal]..[SpringerINFX2] enthält keine Spalten, die ausgewählt werden können, oder der aktuelle Benutzer hat keine Berechtigungen für dieses Objekt.

Natürlich ist die Tabelle voll. und der User hat auch vollen Zugriff drauf. Auch remote, ich kann mit den Tabellen bequem von einer anderen Maschine mit PHPMyAdmin aus arbeiten.

Woran könnte es sonst noch liegen?

EDIT:
ein simples Select * bringt noch folgende meldung:
Zitat
Meldung 7399, Ebene 16, Status 1, Zeile 2
Der OLE DB-Anbieter 'MSDASQL' für den Verbindungsserver 'DBVA' hat einen Fehler gemeldet. Der Anbieter hat keine Informationen zu dem Fehler bereitgestellt.
Meldung 7312, Ebene 16, Status 1, Zeile 2
Ungültige Verwendung des Schemas oder Katalogs für den OLE DB-Anbieter 'MSDASQL' für den Verbindungsserver 'DBVA'. Ein vierteiliger Name wurde bereitgestellt, der Anbieter macht jedoch die Schnittstellen nicht verfügbar, die zum Verwenden eines Katalogs oder Schemas erforderlich sind.

But my GoogleFu seems too weak.. :(

EDIT2:
oder sollte jemand eine andere/leichtere möglichkeit kennen, eine MSSQL Tabelle nach MySQL zu synchen.. bin offen für alles!
Bearbeitet von Umlüx am 16.01.2014, 10:10

mr.nice.

differential image maker
Avatar
Registered: Jun 2004
Location: Wien
Posts: 6529
GoogleFu:
This “four-part name” error is due to a limitation in the MySQL ODBC driver. You cannot switch catalogs/schemas using dotted notation. Instead, you will have to register another DSN and Linked Server for the different catalogs you want to access. Be sure and follow the three-dot notation noted in the example query.

http://www.ideaexcursion.com/2009/0...erver-to-mysql/

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8985
Zitat von mr.nice.
Zitat von davebastard
http://geekaphone.com/compare/Motor...ung-Galaxy-S-II

:bash:
so funktionierts... ich komm an die daten.
DANKE!

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8985
irgendwie ist das alles nicht praktikabel.. vielleicht kann mir nochmal jemand helfen..

ich will (muss) täglich eine tabelle mit ca 1,5mio datensätzen von der MSSQL in eine MySQL tabelle kopieren. Die DBs befinden sich auf getrennten Servern.

Ich dachte am einfachsten wäre es, die MySQL ins MSSQL zu linken und dort einfach per Aufgabe alle datensätze zu kopieren. leider dauert das STUNDEN...
ich kann kein truncate auf die MySQL absetzen und muss erst zeilenweise löschen. der Import danach dauert ebenfalls ewig. so lang ist mein Zeitfenster nicht.

momentan versuch ich gerade mit einem simplen powershell script die daten zu kopieren. dauert ebenfalls um die 1,5h.

manuell bin ich da noch schneller... (export der tabelle in eine csv und import über die MxSQL workbench)

wie würdet ihr das lösen?

Punisher

Bukanier
Avatar
Registered: Sep 2002
Location: Disneyland
Posts: 1868
automatisierung der schnellsten lösung? gescriptet die daten exportieren und wieder importieren? mysql bietet da verschiedenste lösungen des exportierens (mysqldump etc). bei mssql weiß ich leider nicht ob du automatisiert importieren kannst

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8985
naja es sollte eh in die andere richtung. MS->My

Punisher

Bukanier
Avatar
Registered: Sep 2002
Location: Disneyland
Posts: 1868
ah sry, falsche richtung

http://stackoverflow.com/questions/...sql-server-data

als flat file exportieren (scheduled job) und in mysql wieder importieren. sollte die einfachste lösung sein. ob es performanter kann ich dir leider nicht sagen

Obermotz

Fünfzylindernazi
Avatar
Registered: Nov 2002
Location: OÖ/RI
Posts: 5262

Smut

takeover & ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16867
mit SSIS kannst den flat-file export/import automatisieren aus der MSSQL datenbank.

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8985
genau das mach ich momentan per powershell. export in ein csv, danach import ins MySQL.
immer noch verdammt langsam... 2 stunden für 1mio datensätze

SSIS schau ich mir mal an. danke.

userohnenamen

leider kein name
Avatar
Registered: Feb 2004
Location: -
Posts: 15859
interessant wär aber sicher mal was wie lange dauert?
export 10 minuten und import 110 minuten, genau umgekehrt, jeweils 60 minuten, etc?

Smut

takeover & ether
Avatar
Registered: Feb 2003
Location: VIE
Posts: 16867
SSIS wird nicht schneller sein, damit bildest du den workflow einfach sauber ab und hast error handling, scheduler etc.

bsox

Schwarze Socke
Avatar
Registered: Jun 2009
Location: Dschibuti
Posts: 1086
Die Frage von Uon ist berechtigt. Meine SQL skills sind 13+ Jahre verstaubt, aber gibt es nicht die Möglichkeit eines bulk imports? Sodass nicht bei jedem zeilenweisen import ein commit gemacht wird?

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8985
das ist die nächste sache.. eigentlich sollte man ein flatfile ja mit load data ins mysql importieren. das hab ich in verbindung mit PS aber noch nie erfolgreich geschafft..
ich lade das file momentan ins powershell und insert dann zeilenweise..

der export von 10k datensätzen aus der MSSQL dauert in etwa 40sek.
der import ins MySQL dann ebenfalls.

direkt am MSSQL server ausgeführt ist der export etwas schneller, dafür der import in die MY langsamer.

XXXprod

I'm gonna be made!
Avatar
Registered: Jan 2003
Location: Vienna
Posts: 945
Was beim herumschieben von vielen Daten ein Problem ist, ist mMn. das Transaction-Logfile. Probier mal die Daten in einer Schleife zu zB. 50k Datensätzen zu kopieren und nicht alle auf einmal. (Rede von der Direktverbindung)

//Edit: Was auch zu beachten ist, ist das auf der Zieltabelle jegliche Indexes deaktiviert sind.

Die Zieltabelle sollte ausserdem leer sein und keinerleir Constraints haben die sonst während dem Insert überprüft werden müssen.

//Edit²: Es ist auch darauf zu achten, dass Quell und Zieltabelle möglichst identische Datentypen haben um unnötige Konvertierungen zu vermeiden. (Wird aber auf Grund unterschiedlicher DB-System ned ganz möglich sein)

//Edit³: Hier sind noch ein paar nützliche Tipps zum Einfügen in MySQL Insert Speed
Bearbeitet von XXXprod am 23.01.2014, 11:15
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz