Saya perlu menyinkronkan tabel besar ~ 500 juta baris tanpa kunci utama antara SQL Server dan MySQL. Tabel hanya memiliki indeks non-unik gabungan berkerumun.
Saya memang memiliki koneksi ODBC antara server, tetapi impor ~ 8 juta baris membutuhkan waktu sekitar 45 menit, jadi saya percaya impor tunggal yang lebih besar tidak masuk akal karena gangguan dapat terjadi pada titik mana pun. Saya tidak bisa mengubah struktur tabel yang ada, saya bisa menambahkan tabel lain. Setelah membaca lebih lanjut, offset / pengambilan bukan pilihan untuk tabel besar. "Pilih ... di mana x antara ... dan ..." bukan opsi karena saya tidak memiliki kunci unik.
Bagaimana saya bisa mengekspor tabel dalam batch yang dijamin mengandung semua baris? Masalah saya adalah karena kunci cluster tidak unik, memesan setelah itu tidak akan menjamin baris fisik memiliki urutan yang sama antara permintaan berturut-turut dan memesan setelah semua kolom akan memakan waktu terlalu lama. Dan bagaimana Anda akan merekomendasikan untuk memigrasi kumpulan, melalui file ODBC atau CSV?
sumber
Jawaban:
Dengan asumsi Anda tidak memiliki pembaruan atau penghapusan terhadap tabel sumber Anda dapat mencoba yang berikut:
1. Buat salinan tabel yang ada menggunakan sintaks CTAS (untuk SQLServer itu
SELECT * into source_table_copy FROM source_table
). Operasi seperti itu sangat cepat bahkan untuk meja besar.2. Tambahkan
after insert
pemicu padasource_table
salinan [s] rekaman baru itu kesource_table_copy
.3. Sekarang ketika semua catatan baru
source_table
masuksource_table_copy
juga, dan Anda dapat memindahkan data dari tabel yang disalin ke Mysql dalam batch. Misalnya, jika Anda memiliki tautan antara 2 server, semuanya dapat dilakukan di dalam tubuh prosedur tersimpan TSQL.Misalnya sepotong kode yang bergerak hingga 20 catatan ke server baru mungkin terlihat seperti
Dimungkinkan juga untuk menggunakan CURSOR untuk membaca data dan kemudian menghapus dengan
where current of
klausa.** Idealnya Anda perlu mencegah aplikasi memasukkan data ke
source_table
dalam langkah 1. Jika itu benar-benar mustahil, saya akan pergi denganafter insert
pemicu yang ditambahkan tepat sebelum langkah 1 dan dihapus tepat setelah itu dilakukan yang menyalin data ke beberapa tabel lain yang saya bisa kemudian bergabung dengansource_table_copy
.sumber