Jika laporan penilaian migrasi cloud menampilkan status failure, klik View report pada kolom operation untuk melihat pemeriksaan mana yang gagal. Setiap pemeriksaan mencakup persyaratan kompatibilitas atau konfigurasi tertentu.
Tingkat keparahan laporan:
| Level | Makna | Tindakan yang diperlukan |
|---|---|---|
| Error | Masalah penghambat yang akan menyebabkan migrasi gagal | Perbaiki semua error sebelum mencoba kembali migrasi |
| Warning | Risiko potensial yang dapat menyebabkan perilaku tak terduga setelah migrasi | Tinjau dan atasi sebelum melakukan migrasi |
Penilaian menjalankan pemeriksaan berikut:
Untuk petunjuk menjalankan migrasi cloud, lihat Gunakan fitur migrasi cloud untuk instans ApsaraDB RDS for PostgreSQL.
Check rds empty
Check item: Check rds databases
Error message:
error:postgres not empty, check if any table exists
Dampak: Migrasi menulis data ke instans RDS tujuan dari awal. Jika tujuan sudah berisi database atau tabel, migrasi akan gagal atau menghasilkan data duplikat.
Solution:
Hapus semua database kecuali template0, template1, dan postgres dari instans ApsaraDB RDS for PostgreSQL. Kemudian, di database postgres, hapus semua tabel kecuali ha_health_check.
Check source connectivity
Pemeriksaan ini memvalidasi akses jaringan dan autentikasi antara instans PostgreSQL self-managed sumber dan instans ApsaraDB RDS for PostgreSQL tujuan. Pemeriksaan ini mencakup enam sub-pemeriksaan.
Check ip connectable
Error message:
error:XX.XX.XX.XX is unapproachable
Dampak: Layanan migrasi tidak dapat menjangkau host sumber. Cadangan penuh dan replikasi akan langsung gagal.
Solution:
-
Jika instans PostgreSQL self-managed berjalan pada instans Elastic Compute Service (ECS), masukkan private IP address instans ECS sebagai host sumber. Untuk menemukan alamat IP pribadi, lihat View IP addresses.
-
Jika instans PostgreSQL self-managed berjalan di pusat data, masukkan alamat IP server DNS sebagai host sumber.
Check port connectable
Error message:
error:5432 is unapproachable
Dampak: Layanan migrasi tidak dapat membuat koneksi TCP ke PostgreSQL. Migrasi tidak dapat dimulai.
Solution:
Atasi salah satu atau kedua penyebab berikut:
-
Koneksi remote tidak diaktifkan: Tambahkan
listen_addresses = '*'ke filepostgresql.confpada instans sumber. Untuk detailnya, lihat Configure the postgresql.conf file of a self-managed PostgreSQL instance. -
Firewall memblokir port 5432: Konfigurasikan firewall agar mengizinkan lalu lintas inbound pada port 5432, atau nonaktifkan firewall sebelum memulai migrasi. Untuk detailnya, lihat Configure the firewall of a server.
Check database connectable
Error message:
error:cannot connect to source database by migratetest:123456
Dampak: Layanan migrasi tidak dapat melakukan autentikasi terhadap database sumber. Migrasi tidak dapat dimulai.
Solution:
Atasi salah satu atau kedua penyebab berikut:
-
Password salah: Verifikasi bahwa kredensial berfungsi dengan menghubungkan secara manual. Untuk mengatur ulang password, jalankan:
ALTER USER migratetest WITH PASSWORD '123456'; -
pg_hba.conf tidak dikonfigurasi untuk mengizinkan koneksi dari VPC RDS: Tambahkan baris berikut ke
pg_hba.conf:host all migratetest <CIDR block of the VPC to which the ApsaraDB RDS for PostgreSQL instance belongs> md5Untuk detail pembaruan
pg_hba.conf, lihat Update the pg_hba.conf file.
Check account replication privilege
Error message:
error:migratetest has no replication privilege
Dampak: Layanan migrasi menggunakan streaming replication untuk menyinkronkan perubahan yang sedang berlangsung. Tanpa hak istimewa REPLICATION, replikasi inkremental akan gagal setelah cadangan penuh selesai.
Solution:
Atasi salah satu atau kedua penyebab berikut:
-
Akun tidak memiliki hak istimewa REPLICATION: Berikan hak istimewa tersebut:
ALTER ROLE migratetest REPLICATION; -
pg_hba.conf tidak mengizinkan koneksi replikasi dari VPC RDS: Tambahkan baris berikut ke
pg_hba.conf:host replication migratetest <CIDR block of the VPC to which the ApsaraDB RDS for PostgreSQL instance belongs> md5Untuk detail pembaruan
pg_hba.conf, lihat Update the pg_hba.conf file.
Check account createrole privilege
Error message:
error:migratetest has no createrole privilege
Dampak: Layanan migrasi perlu membuat ulang role pada instans tujuan. Tanpa CREATEROLE, migrasi role akan gagal.
Solution:
Berikan hak istimewa CREATEROLE:
ALTER ROLE migratetest CREATEROLE;
Check account monitor privilege
Error message:
error:migratetest should be a member of pg_monitor to monitor replication status
Dampak: Layanan migrasi melakukan kueri terhadap pg_stat_replication dan pg_stat_wal_receiver untuk melacak progres replikasi. Tanpa role pg_monitor, layanan tidak dapat memastikan replikasi berjalan lancar, yang dapat menyebabkan migrasi macet atau gagal diam-diam.
Solution:
Berikan role pg_monitor:
GRANT pg_monitor TO migratetest;
Check source version
Check item: Check major version consistent
Error message:
error:version mismatch, source version:10, current version:13.0
Dampak: Migrasi lintas versi utama tidak didukung. Migrasi akan gagal jika sumber dan tujuan menjalankan versi mesin utama yang berbeda.
Solution:
Beli instans ApsaraDB RDS for PostgreSQL yang menjalankan versi mesin utama yang sama dengan instans PostgreSQL self-managed.
Check source glibc version
Check item: Check source glibc version compatible
Warning message:
warning:source glibc version is not compatible with rds pg
Dampak: Versi GNU C Library (glibc) memengaruhi cara PostgreSQL mengurutkan karakter dalam encoding UTF-8. Versi 2.28 memperkenalkan urutan pengurutan yang berbeda. Jika sumber dan tujuan menggunakan versi glibc yang berbeda, indeks teks dengan aturan pengurutan non-C mungkin mengembalikan hasil dalam urutan yang tidak terduga setelah migrasi, menyebabkan masalah kebenaran kueri.
Solution:
Jalankan kueri diagnostik berikut untuk menilai risiko aktual terhadap data Anda.
-
Periksa apakah urutan pengurutan saat ini memengaruhi data Anda:
-
Jika hasilnya
true, urutan pengurutan tidak terpengaruh. Tidak diperlukan tindakan lebih lanjut. -
Jika hasilnya
false, lanjutkan ke langkah 2.
BEGIN; CREATE TEMP TABLE testcollation(id varchar(20) COLLATE "en_US.utf8") ON COMMIT DROP; INSERT INTO testcollation VALUES('-1'),('1'); SELECT id='1' FROM testcollation ORDER BY id LIMIT 1; ROLLBACK; -
-
Periksa apakah ada database yang menggunakan aturan pengurutan non-C:
-
Jika tidak ada baris yang dikembalikan, migrasi tidak memiliki risiko aturan pengurutan. Tidak diperlukan tindakan lebih lanjut.
-
Jika ada baris yang dikembalikan, lanjutkan ke langkah 3.
SELECT datname, datcollate FROM pg_database WHERE datcollate NOT IN ('C', 'POSIX'); -
-
Identifikasi semua indeks dengan aturan pengurutan non-C di seluruh database:
-
Jika tidak ada baris yang dikembalikan, migrasi tidak memiliki risiko aturan pengurutan.
-
Jika ada baris yang dikembalikan, indeks yang terpengaruh mungkin menghasilkan hasil pengurutan yang salah setelah migrasi. Evaluasi apakah indeks ini memengaruhi kueri aplikasi sebelum melanjutkan.
WITH result AS ( WITH defcoll AS ( SELECT datcollate AS coll FROM pg_database WHERE datname = current_database() ) SELECT indrelid::regclass::text relname, indexrelid::regclass::text indexname, CASE WHEN c.collname = 'default' THEN defcoll.coll ELSE c.collname END AS collation FROM (SELECT indexrelid, indrelid, indcollation[i] coll FROM pg_index, generate_subscripts(indcollation, 1) g(i)) s JOIN pg_collation c ON coll=c.oid CROSS JOIN defcoll WHERE collprovider IN ('d', 'c') AND collname NOT IN ('C', 'POSIX') ) SELECT result.relname, result.indexname, result.collation FROM result WHERE result.collation NOT IN ('C', 'POSIX'); -
Check disk size
Check item: Check disk size enough
Error message:
error:source_db_size > disk_size * 0.95
Dampak: Data sumber harus muat dalam 95% ruang penyimpanan tujuan yang tersedia. Jika penyimpanan tujuan terlalu kecil, transfer cadangan penuh akan gagal di tengah jalan, sehingga tujuan berada dalam keadaan tidak lengkap.
Solution:
-
Periksa ukuran total data pada instans sumber (hasil dalam MB):
SELECT SUM(pg_database_size(pg_database.datname))/1024/1024 AS size FROM pg_database; -
Hitung kapasitas penyimpanan yang dibutuhkan. Penyimpanan tujuan harus minimal 110% dari ukuran data sumber. Misalnya, jika sumber menggunakan 100 GB, tujuan harus memiliki minimal 110 GB ruang penyimpanan yang tersedia.
-
Perluas penyimpanan instans ApsaraDB RDS for PostgreSQL. Untuk petunjuknya, lihat Change instance specifications.
Check wal keep size
Check item: Check wal keep size large enough
Warning message:
warning:wal_keep_size X MB is too small. Try to set wal_keep_segments or wal_keep_size large enough ensure pg_basebackup success
Dampak: Selama migrasi, pg_basebackup mentransfer snapshot lengkap dari database sumber. Jika sumber menghasilkan WAL lebih cepat daripada pg_basebackup dapat menyalin data, dan sumber tidak menyimpan cukup segmen WAL, pg_basebackup akan gagal dengan error "WAL segment has been removed".
Solution:
Tingkatkan pengaturan retensi WAL pada instans ApsaraDB RDS for PostgreSQL untuk mengurangi risiko kegagalan pg_basebackup:
-
PostgreSQL 13 dan yang lebih baru: Tingkatkan nilai
wal_keep_size. -
Versi PostgreSQL sebelum 13: Tingkatkan nilai
wal_keep_segments.
Untuk versi PostgreSQL sebelum 13, hubungan antara kedua parameter tersebut adalah: wal_keep_size = wal_keep_segments × wal_segment_size.
Check spec params
Check item: Check if spec params too large
Error messages:
error:max_connections too large, value=XXX
error:max_prepared_transactions too large, value=XXX
Dampak: Jika max_connections atau max_prepared_transactions pada instans sumber lebih dari 100 kali nilai yang sesuai pada instans RDS tujuan, instans tujuan mungkin gagal memulai ketika layanan migrasi membuat tautan replikasi.
Solution:
Kurangi max_connections dan max_prepared_transactions pada instans sumber agar nilainya tidak melebihi 100 kali nilai tujuan.
Perubahan padamax_connectionsdanmax_prepared_transactionsmemerlukan restart instans PostgreSQL sumber agar berlaku.
Check rds user
Check item: Check if rds system user is occupied
Warning message:
warning:Check if rds system user is occupied ...XXX will be reused in rds
Dampak: ApsaraDB RDS for PostgreSQL mencadangkan akun aurora, replicator, dan pgxxx untuk penggunaan internal sistem. Jika akun ini ada di instans sumber, migrasi mungkin menimpa konfigurasinya di tujuan, menyebabkan fungsi manajemen rusak.
Solution:
Pastikan Anda tidak menggunakan akun aurora, replicator, dan pgxxx di instans PostgreSQL self-managed.
Check extensions
Pemeriksaan ini memvalidasi kompatibilitas ekstensi antara instans PostgreSQL self-managed sumber dan instans ApsaraDB RDS for PostgreSQL tujuan. Pemeriksaan ini mencakup tiga sub-pemeriksaan.
Check source supported extensions
Error message:
error:Check source supported extensions XXX not supported
Dampak: Ekstensi yang ada di sumber tetapi tidak didukung oleh ApsaraDB RDS for PostgreSQL tidak dapat dibuat di tujuan. Jika migrasi dilanjutkan, objek yang bergantung pada ekstensi ini tidak akan berfungsi.
Solution:
Hapus ekstensi yang tidak didukung dari instans sumber:
DROP EXTENSION <extension_name>;
Check source extensions with higher version
Error message:
error:Check source extensions with higher version XXX
Dampak: ApsaraDB RDS for PostgreSQL tidak dapat memuat ekstensi yang versinya lebih tinggi daripada versi yang disediakannya. Ekstensi akan gagal diinisialisasi di tujuan, menyebabkan objek dependen rusak.
Solution:
Pasang ulang ekstensi yang terpengaruh di instans sumber dengan versi yang sama seperti tujuan:
DROP EXTENSION <extension_name>;
CREATE EXTENSION <extension_name> VERSION '<destination_version>';
Check source extensions with lower version
Warning message:
warning:Check source extensions with lower version XXX
Dampak: Ekstensi pada instans sumber berada pada versi yang lebih lama daripada di tujuan. Hal ini normal dan aman — ekstensi akan ditingkatkan secara otomatis ke versi tujuan setelah migrasi.
Solution:
Tidak diperlukan tindakan.
Check Postgres system catalogs
Pemeriksaan ini memeriksa katalog sistem instans sumber untuk konfigurasi yang tidak kompatibel dengan ApsaraDB RDS for PostgreSQL. Pemeriksaan ini mencakup empat sub-pemeriksaan.
Unsupported procedural languages
Error message:
error: disallowed language exist in databases [xxx, xxx], the languages allowed are [c, internal, sql, plpgsql, pltcl, plperl].
Dampak: ApsaraDB RDS for PostgreSQL hanya mendukung C, internal, SQL, PL/pgSQL, PL/Tcl, dan PL/Perl. Fungsi yang ditulis dalam bahasa lain tidak dapat dimigrasikan dan akan gagal di tujuan.
Solution:
Hapus bahasa yang tidak didukung dari database yang terpengaruh di instans sumber:
DROP LANGUAGE <language_name>;
Large objects
Error message:
error: large object exist in databases [xxx, xxx].
Dampak: ApsaraDB RDS for PostgreSQL tidak mendukung large object PostgreSQL. Large object di instans sumber tidak dapat dimigrasikan dan tidak akan ada di tujuan.
Solution:
Hapus semua large object dari database yang terpengaruh di instans sumber sebelum migrasi.
Default ACL settings
Error message:
error: default acl settings exist in databases [xxx, xxx].
Dampak: Pernyataan ALTER DEFAULT PRIVILEGES mengisi pg_catalog.pg_default_acl, yang menyimpan pemberian izin default untuk objek di masa depan. Pengaturan ini tidak dapat dimigrasikan secara langsung dan akan menyebabkan pemeriksaan migrasi gagal.
Solution:
-
Di instans sumber, cabut semua hak istimewa default untuk membersihkan
pg_default_acl:ALTER DEFAULT PRIVILEGES ... REVOKE ...; -
Setelah migrasi selesai, terapkan kembali hak istimewa default di instans tujuan:
ALTER DEFAULT PRIVILEGES ... GRANT ...;
Non-empty system tables (pg_parameter_acl and pg_db_role_setting)
Warning message:
warning: Invalid system tables: [pg_parameter_acl, pg_db_role_setting], these system tables should be empty.
Dampak:
-
pg_parameter_aclmencatat izin akses per pengguna untuk parameter kernel. ApsaraDB RDS for PostgreSQL mengelola izin ini secara internal, sehingga entri sumber tidak dapat diterapkan ke tujuan. -
pg_db_role_settingmencatat nilai parameter default per database dan per role. Pengaturan ini tidak akan dipindahkan dengan benar jika tabel tidak dibersihkan sebelum migrasi.
Solution:
-
Bersihkan kedua tabel sistem di instans sumber:
DELETE FROM pg_parameter_acl; DELETE FROM pg_db_role_setting; -
Setelah penerapan DR selesai, konfigurasikan izin default pengguna pada berbagai database di instans tujuan.
Check reserved role permission
Check content: Periksa apakah izin role cadangan yang tidak diizinkan diberikan kepada akun di instans sumber.
Error message:
error: some disallowed reserved roles [pg_write_server_files] are granted to user. you should revoke these roles from their members
Dampak: ApsaraDB RDS for PostgreSQL membatasi role bawaan tertentu — seperti pg_write_server_files — karena memberikan akses ke operasi sistem file server yang tidak diizinkan di lingkungan terkelola. Jika role ini diberikan kepada akun di instans sumber, migrasi akan gagal.
Solution:
Cabut role cadangan yang tidak diizinkan dari semua akun di instans sumber. Contohnya:
REVOKE pg_write_server_files FROM "user";