Memecahkan masalah error migrasi
Proses tugas migrasi mungkin mengalami error selama runtime.
- Beberapa error, seperti sandi yang salah di database sumber, dapat dipulihkan, yang berarti error tersebut dapat diperbaiki dan tugas migrasi dilanjutkan secara otomatis.
- Beberapa error tidak dapat dipulihkan, seperti error dalam replikasi data, yang berarti tugas migrasi harus dimulai ulang dari awal.
Saat error terjadi, status tugas migrasi akan berubah menjadi Failed
, dan substatus mencerminkan status terakhir sebelum kegagalan.
Untuk memecahkan masalah error, buka tugas migrasi yang gagal untuk melihat error dan ikuti langkah-langkah yang diuraikan dalam pesan error.
Untuk melihat detail selengkapnya tentang error, buka Cloud Monitoring menggunakan link di tugas migrasi. Log difilter ke tugas migrasi tertentu.
Dalam tabel berikut, Anda dapat menemukan beberapa contoh masalah dan cara mengatasinya:
Gejala | Kemungkinan penyebab | Hal-hal yang sebaiknya dicoba |
---|---|---|
Gagal terhubung ke instance database sumber. | Terjadi masalah konektivitas antara instance database sumber dan instance tujuan. | Ikuti langkah-langkah di Men-debug konektivitas. |
Kegagalan menjalankan tugas migrasi karena versi database sumber dan tujuan tidak kompatibel. | Versi database sumber dan tujuan bukan merupakan kombinasi yang didukung. Secara khusus, versi database sumber yang diberikan tidak kompatibel dengan versi database tujuan. | Pastikan versi database tujuan sama atau satu versi utama di atas versi database sumber. Kemudian, buat tugas migrasi baru. |
Bahasa definisi data (DDL) atau bahasa manipulasi data (DML) diblokir di sumber. | DDL yang memerlukan kunci ACCESS EXCLUSIVE dan berjalan selama fase dump penuh akan diblokir. |
Selama proses sinkronisasi awal (dump penuh), DDL atau program yang memerlukan kunci Misalnya, jika tabel masih dalam proses sinkronisasi awal dan perintah |
Pesan Error: No pglogical extension installed on databases (X)
|
Satu atau beberapa database sumber tidak menginstal pglogical . |
Ikuti panduan ini untuk menginstal pglogical di database pada instance sumber. |
Pesan Error: Replication user 'x' doesn't have sufficient privileges.
|
Pengguna yang menggunakan Database Migration Service tidak memiliki hak istimewa yang diperlukan untuk melakukan operasi yang ditetapkan. | Ikuti panduan ini untuk memastikan bahwa pengguna ini memiliki hak istimewa yang diperlukan. |
Pesan Error: Unable to connect to source database server.
|
Layanan Migrasi Database tidak dapat membuat koneksi ke server database sumber. | Pastikan instance database sumber dan tujuan dapat berkomunikasi satu sama lain, dan Anda telah menyelesaikan semua prasyarat yang diperlukan yang muncul saat Anda menentukan setelan untuk tugas migrasi. |
Pesan Error: The source database 'wal_level' configuration must be equal to 'logical'.
|
wal_level untuk database sumber ditetapkan ke nilai selain logical . |
Tetapkan wal_level ke logical . |
Pesan Error: The source database 'max_replication_slots' configuration is not sufficient.
|
Parameter max_replication_slots tidak dikonfigurasi dengan benar. |
Ikuti panduan ini untuk menetapkan parameter ini dengan benar. |
Pesan Error: The source database 'max_wal_senders' configuration is not sufficient.
|
Parameter max_wal_senders tidak dikonfigurasi dengan benar. |
Ikuti panduan ini untuk menetapkan parameter ini dengan benar. |
Pesan Error: The source database 'max_worker_processes' configuration is not sufficient.
|
Parameter max_worker_processes tidak dikonfigurasi dengan benar. |
Ikuti panduan ini untuk menetapkan parameter ini dengan benar. |
Pesan Error: ATAU
Pesan Error: |
Setelan yang diperlukan untuk replikasi tidak dapat dihapus selama promosi tugas migrasi. | Untuk setiap database, jalankan perintah sebagai pengguna dengan hak istimewa Untuk informasi selengkapnya tentang perintah yang akan dijalankan, lihat Menghapus slot replikasi. |
Pesan Error: |
Sertifikat CA sumber yang diberikan ke Database Migration Service mungkin hanya berisi root certificate. Namun, sertifikat sumber memerlukan root certificate dan intermediate certificate. Misalnya, untuk Amazon Relational Database Service, penggunaan sertifikat rds-ca-2019-root.pem dapat menyebabkan masalah ini. |
Buat sertifikat CA sumber gabungan yang berisi root certificate dan semua intermediate certificate yang diperlukan. Untuk kasus penggunaan Amazon Relational Database Service, gunakan sertifikat rds-combined-ca-bundle.pem, bukan sertifikat rds-ca-2019-root.pem. |
Pesan Error: |
Nilai yang ditetapkan untuk parameter max_locks_per_transaction tidak memadai. |
Tetapkan nilai untuk parameter ini minimal {max_number_of_tables_per_database }/(max_connections + max_prepared_transactions ). |
Pesan Error: |
Paket pglogical tidak diinstal dengan benar di instance sumber. | Untuk informasi selengkapnya tentang cara menginstal paket ini dengan benar, lihat Menginstal paket pglogical di instance sumber. |
Pesan Error: |
Sumber yang dikonfigurasi berada dalam mode pemulihan. | Konfigurasikan sumber yang tidak dalam mode pemulihan. |
Dump lengkap lambat. | Tujuan AlloyDB mungkin lambat dalam mengimpor data besar dari database sumber. |
|
Pesan Error: subscriber {subscriber_name} initialization failed during nonrecoverable step (d), please try the setup again |
Tugas migrasi gagal selama fase dump penuh dan tugas tidak dapat dipulihkan. Instance database sumber dimulai ulang atau dalam mode pemulihan, atau koneksi replikasi berakhir karena nilai yang ditetapkan untuk parameter Untuk menemukan akar masalah:
|
|
Pesan Error: ERROR: unknown column name {column_name} |
Kolom ditambahkan ke tabel yang direplikasi di node utama, tetapi tidak di node replika. |
Hanya perubahan bahasa manipulasi data (DML) yang diperbarui secara otomatis selama migrasi berkelanjutan. Mengelola perubahan bahasa definisi data (DDL) agar database sumber dan tujuan tetap kompatibel adalah tanggung jawab pengguna, dan dapat dilakukan dengan dua cara:
Lihat Migrasi berkelanjutan untuk menemukan contoh penggunaan |
Pesan Error: ERROR: cannot truncate a table referenced in a foreign key constraint |
Pengguna mencoba memotong tabel yang memiliki batasan kunci asing. |
Hapus batasan kunci asing terlebih dahulu, lalu potong tabel. |
Pesan Error: ERROR: connection to other side has died |
Koneksi replikasi berakhir karena nilai yang ditetapkan untuk |
Pertimbangkan untuk menaikkan nilai parameter |
Membersihkan slot replikasi
Anda akan melihat salah satu pesan berikut:
Cleanup may have failed on source due to error: generic::unknown: failed to connect to on-premises database.
Error promoting EM replica: finished drop replication with errors.
Kemungkinan penyebab
Saat mempromosikan instance AlloyDB, jika instance sumber tidak dapat dijangkau dari instance AlloyDB (misalnya, instance sumber tidak berjalan, atau Anda menghapus instance AlloyDB dari daftar yang diizinkan untuk instance sumber), setelan yang diperlukan untuk replikasi tidak dapat dihapus selama promosi tugas migrasi. Anda harus membersihkan slot replikasi secara manual.
Hal-hal yang sebaiknya dicoba
Untuk setiap database, jalankan perintah berikut sebagai pengguna dengan hak istimewa superuser
:
Dapatkan nama slot replikasi dari pesan error, lalu jalankan perintah berikut untuk menghapus slot, satu per satu:
select pg_drop_replication_slot({slot_name});
-
Jika nama slot replikasi tidak tersedia dalam pesan error, jalankan perintah berikut untuk membuat kueri slot replikasi yang ada:
select pg_drop_replication_slot(slot_name) from pg_replication_slots where slot_name like '%alloydb%' and active = 'f';
-
Jika tidak ada replika AlloyDB yang menggunakan instance sumber, jalankan perintah berikut untuk membersihkan setelan
pglogical
:select pglogical.drop_node(node_name) from pglogical.node where node_name like
'alloydb';
-
Jika ekstensi
pglogical
tidak diperlukan lagi, jalankan perintah berikut untuk meng-uninstal ekstensi:DROP EXTENSION IF EXISTS pglogical;
Menghapus cluster AlloyDB yang tidak memiliki induk dalam mode bootstrap
Dalam kasus ekstrem yang jarang terjadi, Anda mungkin mendapati bahwa tugas migrasi telah dihapus, sementara cluster AlloyDB terkait belum dihapus, dan masih dalam mode bootstrap. Anda dapat menghapus cluster menggunakan perintah gcloud AlloyDB untuk menghapus cluster, yang digabungkan dengan opsi --force
.
Perhatikan bahwa menghapus cluster bootstrap saat sedang digunakan oleh tugas migrasi akan menghasilkan perilaku yang tidak ditentukan.
Mengelola pengguna dan peran
Memigrasikan pengguna yang ada
Saat ini, Database Migration Service tidak mendukung migrasi pengguna yang ada dari instance sumber ke instance AlloyDB tujuan. Anda dapat mengelola migrasi ini dengan membuat pengguna di AlloyDB secara manual.
Tentang pengguna alloydbexternalsync
Selama migrasi, semua objek di primary AlloyDB dimiliki oleh pengguna alloydbexternalsync
. Setelah data dimigrasikan, Anda dapat mengubah kepemilikan objek ke pengguna lain dengan menyelesaikan langkah-langkah berikut:
- Jalankan perintah
GRANT alloydbexternalsync to {USER}
. - Di setiap database, jalankan perintah
reassign owned by alloydbexternalsync to {USER};
. - Untuk menghapus pengguna
alloydbexternalsync
, jalankan perintahdrop role alloydbexternalsync
.