Menjalankan operasi bahasa definisi data (DDL) Online pada database sumber saat task penggabungan tabel sedang berjalan dapat menyebabkan kehilangan data di database tujuan. Untuk mencegah hal ini, Anda dapat mengecualikan operasi DDL Online dari konfigurasi task atau menghindari menjalankannya pada database sumber selama task berlangsung.
Cara kerja
Task penggabungan tabel mengonsolidasikan tabel dari beberapa database sumber dan menyinkronkan atau memigrasikan datanya ke satu tabel tujuan.
Sebagai contoh, jika Anda mengonfigurasi task untuk menggabungkan tabel dari dua database ApsaraDB RDS for MySQL (Database 1 dan Database 2) ke database tujuan, DTS memetakan data sebagai berikut:
Tabel A1 (Database 1) → Tabel A (tujuan)
Tabel A2 (Database 2) → Tabel A (tujuan)
Jika Tabel A1 memiliki 100 catatan dan Tabel A2 memiliki 200 catatan, Tabel A di database tujuan seharusnya berisi 300 catatan setelah penggabungan.
Mengapa operasi DDL Online menyebabkan kehilangan data
Operasi DDL Online bekerja dengan membuat tabel temporary, menerapkan perubahan skema ke tabel tersebut, lalu menggunakan RENAME TABLE untuk menukar posisi tabel temporary tersebut. Urutan operasinya adalah:
Buat tabel temporary:
CREATE TABLE tmp_table_table LIKE table_nameUbah skema tabel temporary:
ALTER TABLE tmp_table_table XXXXSalin data historis ke tabel temporary:
INSERT IGNORE INTO tmp_table_table (SELECT %s FROM table_name FORCE INDEX (%s) WHERE xxxSinkronkan data inkremental melalui log biner:
UPDATA/INSERT/DELETE tmp_table_namePindahkan beban kerja ke tabel temporary:
RENAME TABLE table_name to old_tmp_table_table, tmp_table_name to table_name
Setelah operasi-operasi ini dilakukan, data Tabel A1 di Database 1 menimpa data Tabel A di database tujuan. Akibatnya, data Tabel A2 di Database 2 hilang.
Solusi
Untuk menghindari kehilangan data, gunakan salah satu pendekatan berikut:
| Pendekatan | Deskripsi |
|---|---|
| Kecualikan DDL Online dari task | Saat mengonfigurasi task sinkronisasi data, jangan pilih opsi untuk menyinkronkan operasi DDL Online. |
| Hindari DDL Online pada database sumber | Jangan menjalankan operasi DDL Online pada database sumber apa pun selama task penggabungan tabel berjalan. |