MySQL dökümünden bu tablolara eklenecek tablolar, tanımlar ve veriler içeren bir .sql dosyam var. Döküm dosyasında temsil edilen bu veritabanını bir MS SQL Server veritabanına nasıl dönüştürebilirim?
MySQL dökümünden bu tablolara eklenecek tablolar, tanımlar ve veriler içeren bir .sql dosyam var. Döküm dosyasında temsil edilen bu veritabanını bir MS SQL Server veritabanına nasıl dönüştürebilirim?
Yanıtlar:
Kullanım SQL Server Migration Assistant (SSMA)
MySQL'e ek olarak Oracle, Sybase ve MS Access'i destekler.
Oldukça akıllı görünüyor ve önemsiz transferleri bile idare edebiliyor. Ayrıca bazı komut satırı arayüzüne de (GUI'ye ek olarak) sahiptir, bu nedenle teorik olarak bazı toplu yükleme işlemlerine entegre edilebilir.
Bu MySQL sürümü için mevcut indirme bağlantısı https://www.microsoft.com/en-us/download/details.aspx?id=54257
Mevcut (Haziran 2016) kararlı sürüm 6.0.1, veri aktarımı sırasında mevcut (5.3.6) MySQL ODBC sürücüsüyle çöküyor. Her şey 64 bit. 5.1.13 ODBC sürücüsüne sahip 5.3 sürümü iyi çalışıyor.
Mysqldump'ı şu şekilde kullanmanızı öneririm :
mysqldump --compatible=mssql
phpMyAdmin hala bir web uygulamasıdır ve büyük veritabanları için potansiyel olarak bazı sınırlamalara sahip olabilir (komut dosyası yürütme süresi, ayrılabilir bellek vb.).
İnternette bunun için bir yol buldum
Biraz çalışma gerektiriyor, çünkü masa masa yapılması gerekiyor. Ama yine de tabloları, verileri ve kısıtlamaları bir MS SQL veritabanına kopyalayabilirim.
Bağlantı burada
http://www.codeproject.com/KB/database/migrate-mysql-to-mssql.aspx
PhpMyAdmin ile bir dışa aktarma yaparsanız, sql uyumluluk modunu 'MSSQL' olarak değiştirebilirsiniz. Bu şekilde, dışa aktarılan komut dosyasını MS SQL veritabanınızda çalıştırırsınız ve bitirdiniz.
PhpMyAdmin'i kullanamazsanız veya kullanmak istemiyorsanız, mysqldump'ta da bir uyumluluk seçeneği vardır , ancak şahsen PhpMyAdmin'in bunu benim için yapmasını tercih ederim.
.Sql dosyalarını MS SQL'e içe aktarma yaklaşımım:
Tabloyu MySQL'den --compatible=mssql
ve --extended-insert=FALSE
seçenekleriyle dışa aktar :
mysqldump -u [username] -p --compatible=mssql --extended-insert=FALSE db_name table_name > table_backup.sql
Dışa aktarılan dosyayı PowerShell ile dosya başına 300000 satıra bölün:
$i=0; Get-Content exported.sql -ReadCount 300000 | %{$i++; $_ | Out-File out_$i.sql}
Her dosyayı MS SQL Server Management Studio'da çalıştırın
Eklerin nasıl hızlandırılacağı konusunda birkaç ipucu var .
Diğer bir yaklaşım mysqldump –where
seçeneğini kullanmaktır . Bu seçeneği kullanarak tablonuzu where
sql cümlesinin desteklediği herhangi bir koşula bölebilirsiniz .
--databases [db_name]
anahtar kelimeyi bu cevapta açıklandığı gibi deneyin : stackoverflow.com/a/26096339/155687
Bugün çok benzer bir sorunla karşılaştım - büyük bir tabloyu (5 milyon satır) MySql'den MS SQL'e kopyalamam gerekiyordu.
İşte yaptığım adımlar (Ubuntu Linux altında):
MS SQL'de MySql'deki kaynak tabloyla eşleşen yapıya sahip bir tablo oluşturuldu.
Yüklü MS SQL komut satırı: https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools#ubuntu
MySql'den bir dosyaya dökülmüş tablo:
mysqldump \ --compact \ --complete-insert \ --no-create-info \ --compatible = mssql \ --extended-insert = FALSE \ - ana bilgisayar "$ MYSQL_HOST" \ - kullanıcı "$ MYSQL_USER" \ -p "$ MYSQL_PASS" \ "$ MYSQL_DB" \ "$ TABLE"> "$ FILENAME"
Benim durumumda döküm dosyası oldukça büyüktü, bu yüzden onu birkaç küçük parçaya bölmeye karar verdim (her biri 1000 satır) - split --lines=1000 "$FILENAME" part-
Sonunda bu küçük dosyalar üzerinde yineledim, bazı metin değiştirmeleri yaptım ve parçaları tek tek MS SQL sunucusuna uyguladım:
dışa aktar SQLCMD = / opt / mssql-tools / bin / sqlcmd x = 0 kısmen dosya için * yapmak echo "[$ dosya] dosyası MS SQL'e aktarılıyor. $ x bin işlendi" #, \ 'ile' 'değiştirir sed -i "s / \\\ '/' '/ g" "$ dosya" # hepsini kaldırır " sed -i 's / "// g'" $ dosya " # belirtilen PK (id) ile kayıt eklemeye izin verir sed -i "1s / ^ / SET IDENTITY_INSERT $ TABLE ON; \ n /" "$ dosya" "$ SQLCMD" -S "$ AZURE_SERVER" -d "$ AZURE_DB" -U "$ AZURE_USER" -P "$ AZURE_PASS" -i "$ dosya" Eko "" Eko "" x = $ ((x + 1)) bitti echo "Bitti"
Tabii ki $AZURE_SERVER
, gibi değişkenlerimi $TABLE
sizinki ile değiştirmeniz gerekecek .
Umarım yardımcı olur.
Benim için tüm verileri bu komutla dışa aktarmak en iyisi oldu:
mysqldump -u USERNAME -p --all-databases --complete-insert --extended-insert=FALSE --compatible=mssql > backup.sql
--extended-insert = FALSE, mssql 1000 satır içe aktarma sınırını önlemek için gereklidir.
Tablolarımı taşıma aracımla oluşturdum, bu yüzden backup.sql dosyasından CREATE'in çalışıp çalışmayacağından emin değilim.
MSSQL'in SSMS'sinde, ID alanlarını yazmak için veri tablosunu IDENTITY_INSERT ON ile tabloya aktarmam gerekiyordu:
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
İlişkileriniz varsa, önce çocuğu sonra da yabancı anahtarın bulunduğu tabloyu içe aktarmanız gerekir.
Ayrıca 'ODBC' + 'SQL Server Alma ve Verme Sihirbazı'nı kullanabilirsiniz. Aşağıdaki bağlantı bunu açıklıyor: https://www.mssqltips.com/sqlservertutorial/2205/mysql-to-sql-server-data-migration/
Çalıştırmak:
mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
Bir işlem çubuğu görmek ister misiniz?
pv mysqldump -u root -p your_target_DB --compatible=mssql > MSSQL_Compatible_Data.sql
mysql'den sqlserver'a dönüştürmek için sqlie uygulamasını kullanabilirsiniz https://www.youtube.com/watch?v=iTVEqys_vTQ&t=108s bu videoyu izleyebilirsiniz