Ich habe eine .sql-Datei aus einem MySQL-Dump, die Tabellen, Definitionen und Daten enthält, die in diese Tabellen eingefügt werden sollen. Wie kann ich diese in der Dump-Datei dargestellte Datenbank in eine MS SQL Server-Datenbank konvertieren?
Ich habe eine .sql-Datei aus einem MySQL-Dump, die Tabellen, Definitionen und Daten enthält, die in diese Tabellen eingefügt werden sollen. Wie kann ich diese in der Dump-Datei dargestellte Datenbank in eine MS SQL Server-Datenbank konvertieren?
Antworten:
Verwenden Sie den SQL Server-Migrationsassistenten (SSMA).
Zusätzlich zu MySQL unterstützt es Oracle, Sybase und MS Access.
Es scheint ziemlich klug zu sein und auch nicht triviale Übertragungen verarbeiten zu können. Es hat auch eine Befehlszeilenschnittstelle (zusätzlich zur GUI), so dass es theoretisch in einen Batch-Ladeprozess integriert werden kann.
Dies ist der aktuelle Download-Link für die MySQL-Version https://www.microsoft.com/en-us/download/details.aspx?id=54257
Die aktuelle (Juni 2016) stabile Version 6.0.1 stürzt beim Übertragen von Daten mit dem aktuellen (5.3.6) MySQL ODBC-Treiber ab. Alles 64 Bit. Die Version 5.3 mit dem ODBC-Treiber 5.1.13 funktioniert einwandfrei.
Ich schlage vor, dass Sie mysqldump wie folgt verwenden :
mysqldump --compatible=mssql
phpMyAdmin ist immer noch eine Web-App und kann möglicherweise einige Einschränkungen für große Datenbanken aufweisen (Skriptausführungszeit, zuweisbarer Speicher usw.).
Ich habe im Netz einen Weg dafür gefunden
Es erfordert ein wenig Arbeit, weil es Tisch für Tisch erledigt werden muss. Trotzdem konnte ich die Tabellen, Daten und Einschränkungen in eine MS SQL-Datenbank kopieren.
Hier ist der Link
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
Wenn Sie einen Export mit PhpMyAdmin durchführen , können Sie den SQL-Kompatibilitätsmodus auf "MSSQL" umschalten. Auf diese Weise führen Sie das exportierte Skript einfach für Ihre MS SQL-Datenbank aus und sind fertig.
Wenn Sie PhpMyAdmin nicht verwenden können oder möchten, gibt es auch eine Kompatibilitätsoption in mysqldump , aber ich persönlich möchte, dass PhpMyAdmin dies für mich erledigt.
Hier ist mein Ansatz zum Importieren von SQL-Dateien in MS SQL:
Exportieren Sie eine Tabelle aus MySQL mit --compatible=mssql
und --extended-insert=FALSE
Optionen:
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
Teilen Sie die exportierte Datei mit PowerShell durch 300000 Zeilen pro Datei:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
Führen Sie jede Datei in MS SQL Server Management Studio aus
Es gibt nur wenige Tipps, wie Sie die Einsätze beschleunigen können .
Ein anderer Ansatz ist die Verwendung der –where
Option mysqldump . Mit dieser Option können Sie Ihre Tabelle unter allen Bedingungen where
aufteilen, die von der SQL-Klausel unterstützt werden .
--databases [db_name]
Schlüsselwort, wie es in dieser Antwort erklärt wurde: stackoverflow.com/a/26096339/155687
Ich hatte heute ein sehr ähnliches Problem - ich musste eine große Tabelle (5 Millionen Zeilen) von MySql in MS SQL kopieren.
Hier sind die Schritte, die ich gemacht habe (unter Ubuntu Linux):
Erstellt eine Tabelle in MS SQL, deren Struktur mit der Quelltabelle in MySql übereinstimmt.
Installierte MS SQL-Befehlszeile: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
Tabelle von MySql in eine Datei geschrieben:
mysqldump \ --kompakt \ --complete-insert \ --no-create-info \ --compatible = mssql \ --extended-insert = FALSE \ --host "$ MYSQL_HOST" \ --user "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
In meinem Fall war die Dump-Datei ziemlich groß, daher habe ich beschlossen, sie in mehrere kleine Teile (jeweils 1000 Zeilen) aufzuteilen. split --lines=1000 "$FILENAME" part-
Schließlich habe ich diese kleinen Dateien durchlaufen, einige Texte ersetzt und die Teile einzeln gegen MS SQL Server ausgeführt:
export SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 für Datei in Teil- * machen echo "Exportieren der Datei [$ file] in MS SQL. $ x Tausend (e) verarbeitet" # ersetzt \ 'durch' ' sed -i "s / \\\ '/' '/ g" "$ file" # entfernt alle " sed -i 's / "// g'" $ file " # ermöglicht das Einfügen von Datensätzen mit der angegebenen PK (ID) sed -i "1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /" "$ file" "$ SQLCMD" -S - $ AZURE_SERVER "-d" $ AZURE_DB "-U" $ AZURE_USER "-P" $ AZURE_PASS "-i" $ file " Echo "" Echo "" x = $ ((x + 1)) getan Echo "Fertig"
Natürlich müssen Sie meine Variablen ersetzen , wie $AZURE_SERVER
, $TABLE
usw. mit Ihnen.
Hoffentlich hilft das.
Für mich hat es am besten funktioniert, alle Daten mit diesem Befehl zu exportieren:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE wird benötigt, um das Importlimit für 1000 mssql-Zeilen zu vermeiden.
Ich habe meine Tabellen mit meinem Migrationstool erstellt, daher bin ich mir nicht sicher, ob CREATE aus der Datei backup.sql funktioniert.
In MSSQLs SSMS musste ich die Daten Tabelle für Tabelle mit der IDENTITY_INSERT ON importieren, um die ID-Felder zu schreiben:
SET IDENTITY_INSERT dbo.app_warehouse ON;
GO
INSERT INTO "app_warehouse" ("id", "Name", "Standort", "Laenge", "Breite", "Notiz") VALUES (1,'01','Bremen',250,120,'');
SET IDENTITY_INSERT dbo.app_warehouse OFF;
GO
Wenn Sie Beziehungen haben, müssen Sie zuerst das untergeordnete Element und dann die Tabelle mit dem Fremdschlüssel importieren.
Sie können auch 'ODBC' + 'SQL Server-Import- und Export-Assistent' verwenden. Der folgende Link beschreibt es: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Lauf:
mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
Möchten Sie eine Prozessleiste sehen?
pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql