Gunakan Data Transmission Service (DTS) untuk memigrasikan data dari database PostgreSQL yang dikelola sendiri ke kluster PolarDB untuk PostgreSQL (Kompatibel dengan Oracle). Kombinasi migrasi data penuh dan migrasi data inkremental menjaga aplikasi tetap berjalan selama proses migrasi sehingga meminimalkan downtime.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster PolarDB untuk PostgreSQL (Kompatibel dengan Oracle). Untuk informasi lebih lanjut, lihat Buat kluster PolarDB untuk PostgreSQL (Kompatibel dengan Oracle).
Ruang penyimpanan yang tersedia mencukupi di kluster tujuan (harus melebihi ukuran total data dari database sumber).
Akun dan izin database yang diperlukan (lihat Izin yang diperlukan).
Pilih jenis migrasi
Pilih jenis migrasi berdasarkan toleransi downtime Anda.
| Jenis migrasi | Apa yang dilakukan DTS | Downtime yang diperlukan | Biaya |
|---|---|---|---|
| Full data migration | Memigrasikan data yang ada pada suatu titik waktu. | Ya — hentikan semua operasi write ke sumber sebelum migrasi. | Gratis. |
| Full data migration + incremental data migration | Memigrasikan data yang ada, lalu terus-menerus menyinkronkan perubahan hingga Anda beralih | Minimal — layanan tetap berjalan selama migrasi. | Dikenai biaya untuk fase inkremental. |
Disarankan: Pilih kedua opsi Full Data Migration dan Incremental Data Migration agar aplikasi tetap berjalan selama migrasi. Jika hanya memilih migrasi penuh, hentikan semua operasi write ke database sumber sebelum memulai—jika tidak, akan terjadi ketidakkonsistenan data.
Izin yang diperlukan
| Database | Migrasi skema | Migrasi data penuh | Migrasi data inkremental |
|---|---|---|---|
| PostgreSQL yang dikelola sendiri | USAGE pada pg_catalog | SELECT pada objek yang akan dimigrasikan | superuser |
| PolarDB untuk PostgreSQL (Kompatibel dengan Oracle) | Database owner | Database owner | Database owner |
Tentukan database owner saat membuat database tujuan.
Untuk instruksi membuat akun dan memberikan izin, lihat:
PostgreSQL yang dikelola sendiri: CREATE USER dan GRANT.
PolarDB untuk PostgreSQL (Kompatibel dengan Oracle): Buat akun database.
Penagihan
| Jenis migrasi | Biaya konfigurasi instans | Biaya traffic Internet |
|---|---|---|
| Full data migration | Gratis | Dikenai biaya hanya jika data dimigrasikan dari Alibaba Cloud melalui Internet. Lihat Ikhtisar penagihan. |
| Incremental data migration | Dikenai biaya. Lihat Ikhtisar penagihan. | — |
Operasi SQL yang didukung untuk migrasi inkremental
| Jenis operasi | Pernyataan SQL |
|---|---|
| DML | INSERT, UPDATE, DELETE |
| DDL | CREATE TABLE, DROP TABLE, ALTER TABLE (RENAME TABLE, ADD COLUMN, ADD COLUMN DEFAULT, ALTER COLUMN TYPE, DROP COLUMN, ADD CONSTRAINT, ADD CONSTRAINT CHECK, ALTER COLUMN DROP DEFAULT), TRUNCATE TABLE (PostgreSQL 11 atau lebih baru), CREATE INDEX ON TABLE — hanya tersedia jika akun database sumber adalah akun istimewa |
Migrasi DDL hanya didukung untuk tugas yang dibuat setelah 1 Oktober 2020.
Untuk tugas yang dibuat sebelum 12 Mei 2023: buat trigger dan fungsi di database sumber sebelum mengonfigurasi tugas. Lihat Gunakan trigger dan fungsi untuk mengimplementasikan migrasi DDL inkremental untuk database PostgreSQL.
Migrasi data inkremental tidak mendukung tipe data BIT.
Pernyataan DDL tidak boleh mencakup CASCADE atau RESTRICT.
Pernyataan DDL dari sesi tempat
SET session_replication_role = replicadieksekusi tidak dimigrasikan.Jika sebuah batch yang dikirim ke database sumber berisi pernyataan DML dan DDL, DTS akan melewati pernyataan DDL tersebut.
Pernyataan DDL pada objek yang tidak dipilih untuk migrasi akan dilewati.
Pernyataan CREATE SEQUENCE tidak didukung.
Catatan penggunaan
Selama migrasi skema, DTS memigrasikan kunci asing dari database sumber ke database tujuan.
Selama migrasi data penuh dan inkremental, DTS menonaktifkan sementara pemeriksaan kendala kunci asing dan operasi kaskade pada tingkat sesi. Melakukan operasi CASCADE atau DELETE pada database sumber selama migrasi dapat menyebabkan ketidakkonsistenan data.
Source database limits
| Batas | Detail | Dampak dan solusi |
|---|---|---|
| Bandwidth | Server database sumber harus memiliki bandwidth keluar yang mencukupi. | Bandwidth yang tidak mencukupi mengurangi kecepatan migrasi. |
| Kunci primer atau kendala unik | Tabel yang akan dimigrasikan harus memiliki PRIMARY KEY atau UNIQUE constraint, dengan semua field bernilai unik. | Tabel tanpa kendala ini dapat menghasilkan catatan duplikat di database tujuan. Solusi: Tambahkan kunci primer atau kendala unik ke tabel sebelum migrasi, atau kecualikan tabel tersebut dari migrasi. |
| Nama database | Nama database sumber tidak boleh mengandung tanda hubung (-). Contoh nama yang tidak valid: dts-testdata. | Tugas migrasi gagal dimulai jika nama mengandung tanda hubung. Ganti nama database sebelum migrasi. |
| Batas jumlah tabel (saat mengedit objek) | Jika Anda memilih tabel dan perlu mengganti nama tabel atau kolom, satu tugas mendukung hingga 1.000 tabel. | Melebihi batas ini menyebabkan error permintaan. Solusi: Bagi migrasi menjadi beberapa tugas, atau migrasikan pada tingkat database alih-alih memilih tabel satu per satu. |
wal_level parameter | Untuk migrasi inkremental, atur wal_level ke logical di postgresql.conf. | wal_level yang salah mencegah DTS membaca perubahan inkremental. Lihat Persiapkan database sumber. |
| Retensi log WAL | Hanya untuk migrasi inkremental: simpan log WAL minimal selama 24 jam. Untuk migrasi penuh + inkremental: simpan log WAL minimal selama 7 hari. Setelah migrasi penuh selesai, berlaku minimum 24 jam. | Jika DTS tidak dapat memperoleh log WAL, tugas gagal dan ketidakkonsistenan data dapat terjadi. |
| Alih bencana primer/sekunder | Jangan lakukan alih bencana primer/sekunder pada database sumber selama migrasi. | Alih bencana menyebabkan tugas migrasi gagal. |
| DDL selama migrasi penuh | Jangan lakukan operasi DDL selama migrasi data penuh. | Operasi DDL selama migrasi penuh menyebabkan tugas gagal. |
| Transaksi jangka panjang | Jika database sumber memiliki transaksi jangka panjang selama migrasi inkremental, log WAL yang dihasilkan sebelum transaksi tersebut dikomit tidak akan dihapus. | Transaksi yang belum dikomit menyebabkan akumulasi log WAL, yang dapat menghabiskan ruang penyimpanan database sumber. Pantau dan komit atau rollback transaksi jangka panjang selama migrasi. |
Batasan lainnya
| Batas | Detail |
|---|---|
| Buat database dan tabel terlebih dahulu | Buat database dan tabel tujuan di kluster tujuan sebelum mengonfigurasi tugas migrasi. |
| Tabel baru atau berganti nama selama migrasi inkremental | Jika Anda membuat tabel atau menjalankan RENAME pada tabel dalam skema yang dipilih untuk migrasi, eksekusi ALTER TABLE schema.table REPLICA IDENTITY FULL; sebelum menulis data ke tabel tersebut. Ganti schema dan table dengan nama aktual. |
| Tabel temporary di database sumber | DTS membuat tabel temporary di database sumber: public.dts_pg_class, public.dts_pg_attribute, public.dts_pg_type, public.dts_pg_enum, public.dts_postgres_heartbeat, public.dts_ddl_command, dan public.dts_args_session. Jangan hapus tabel-tabel ini selama migrasi. Mereka akan dihapus otomatis saat instans DTS dilepas. |
| Tabel heartbeat | DTS membuat tabel heartbeat bernama dts_postgres_heartbeat di database sumber untuk melacak latensi migrasi inkremental. |
| Replication slot | DTS membuat replication slot dengan awalan dts_sync_ di database sumber, yang menyimpan log inkremental hingga 15 menit. Slot ini akan dihapus otomatis saat tugas dilepas atau gagal. Jika terjadi alih bencana primer/sekunder pada instans ApsaraDB for PostgreSQL sumber, masuk ke instans sekunder untuk menghapus replication slot secara manual. |
| Satu database per tugas | Satu tugas migrasi hanya memigrasikan data dari satu database. Untuk memigrasikan beberapa database, buat tugas terpisah untuk masing-masing. |
| Dampak performa | Migrasi data penuh menggunakan sumber daya baca dan tulis di database sumber dan tujuan, meningkatkan beban server. Jadwalkan migrasi pada jam sepi. |
| Pertumbuhan tablespace | Operasi INSERT bersamaan selama migrasi penuh menyebabkan fragmentasi tabel di database tujuan. Ukuran tablespace tujuan diperkirakan lebih besar daripada sumber setelah migrasi. |
| Presisi FLOAT/DOUBLE | DTS mengambil nilai FLOAT dan DOUBLE menggunakan ROUND(COLUMN, PRECISION). Presisi default: 38 digit untuk FLOAT, 308 digit untuk DOUBLE. Verifikasi apakah nilai default ini memenuhi kebutuhan Anda dan sesuaikan jika perlu. |
| Retry tugas gagal | DTS mencoba ulang tugas yang gagal hingga 7 hari. Sebelum mengalihkan beban kerja ke database tujuan, hentikan atau lepaskan tugas yang gagal. Atau, eksekusi REVOKE untuk mencabut izin tulis DTS pada database tujuan—jika tidak, data sumber dapat menimpa data tujuan saat tugas gagal dilanjutkan. |
| Metadata sequence | DTS tidak memvalidasi metadata sequence. Setelah mengalihkan beban kerja, sequence di database tujuan tidak otomatis dilanjutkan dari nilai maksimum di sumber. Sebelum alih bencana, kueri nilai maksimum sequence saat ini di database sumber dan tetapkan sebagai nilai awal di database tujuan. Gunakan SQL berikut untuk mendapatkan pernyataan setval: |
do language plpgsql $$
declare
nsp name;
rel name;
val int8;
begin
for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S'
loop
execute format($_$select last_value from %I.%I$_$, nsp, rel) into val;
raise notice '%',
format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1);
end loop;
end;
$$;Persiapkan database sumber
Ikuti langkah-langkah sesuai versi PostgreSQL Anda.
PostgreSQL 10.1 atau lebih baru
Langkah-langkah berikut menggunakan Linux.
Masuk ke server tempat database PostgreSQL sumber berjalan.
Atur
wal_levelkelogicaldipostgresql.conf.Setelah mengedit
postgresql.conf, jalankanSELECT pg_reload_conf();atau restart PostgreSQL agar perubahan berlaku.
Tambahkan Blok CIDR server DTS ke
pg_hba.conf. Tambahkan hanya Blok CIDR untuk wilayah tempat database tujuan berada. Lihat Tambahkan Blok CIDR server DTS ke pengaturan keamanan database on-premises untuk daftar Blok CIDR.Untuk sintaksis
pg_hba.conf, lihat File pg_hba.conf. Lewati langkah ini jika Anda telah mengatur alamat IP ke0.0.0.0/0.
Buat database dan skema yang sesuai di kluster tujuan agar sesuai dengan objek yang akan dimigrasikan.
PostgreSQL 9.4.8 hingga 10.0
Unduh dan instal PostgreSQL dari source.
Unduh kode sumber yang sesuai dengan versi PostgreSQL Anda dari situs resmi PostgreSQL.
Jalankan perintah berikut secara berurutan untuk mengonfigurasi, mengompilasi, dan menginstal:
sudo ./configure sudo make sudo make install
Penting- Kode sumber PostgreSQL harus dikompilasi dengan versi GCC yang sesuai dengan versi sistem operasi. - Jika
sudo ./configuregagal, sesuaikan perintah berdasarkan error. Misalnya, jika error-nya adalahreadline library not found, jalankansudo ./configure --without-readline. - Jika Anda menginstal PostgreSQL dengan cara lain, kompilasi pluginali_decodingdi lingkungan pengujian dengan versi OS dan GCC yang sama.Unduh, kompilasi, dan instal plugin
ali_decodingyang disediakan oleh DTS.Unduh ali_decoding.
Salin direktori
ali_decodingke direktoricontribinstalasi PostgreSQL Anda.
Di direktori
ali_decoding, ganti isiMakefiledengan berikut ini:# contrib/ali_decoding/Makefile MODULE_big = ali_decoding MODULES = ali_decoding OBJS = ali_decoding.o DATA = ali_decoding--0.0.1.sql ali_decoding--unpackaged--0.0.1.sql EXTENSION = ali_decoding NAME = ali_decoding #subdir = contrib/ali_decoding #top_builddir = ../.. #include $(top_builddir)/src/Makefile.global #include $(top_srcdir)/contrib/contrib-global.mk #PG_CONFIG = /usr/pgsql-9.6/bin/pg_config #pgsql_lib_dir := $(shell $(PG_CONFIG) --libdir) #PGXS := $(shell $(PG_CONFIG) --pgxs) #include $(PGXS) # Jalankan perintah berikut untuk menginstal kode sumber: ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else subdir = contrib/ali_decoding top_builddir = ../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk endifDi direktori
ali_decoding, kompilasi dan instal plugin:sudo make sudo make installSalin file output ke lokasi yang diperlukan.

Buat database dan skema yang sesuai di kluster tujuan agar sesuai dengan objek yang akan dimigrasikan.
Konfigurasi tugas migrasi
Buka halaman Data Migration Tasks.
Masuk ke Konsol Data Management (DMS).
Di bilah navigasi atas, klik DTS.
Di panel navigasi kiri, pilih DTS (DTS) > Data Migration.
- Navigasi bervariasi tergantung mode konsol DMS. Lihat Simple mode dan Sesuaikan tata letak dan gaya konsol DMS. - Atau, langsung buka halaman Data Migration Tasks di konsol DTS baru.
Dari daftar drop-down di samping Data Migration Tasks, pilih wilayah tempat instans migrasi data berada.
Di konsol DTS baru, pilih wilayah di pojok kiri atas.
Klik Create Task. Konfigurasikan database sumber dan tujuan menggunakan parameter berikut.
PeringatanSetelah memilih instans sumber dan tujuan, baca limits yang ditampilkan di bagian atas halaman sebelum melanjutkan.
Source database
Parameter Deskripsi Database Type Pilih PostgreSQL. Access Method Pilih Express Connect, VPN Gateway, or Smart Access Gateway. Untuk persiapan jaringan, lihat Ikhtisar persiapan. Instance Region Wilayah tempat database sumber berada. Replicate Data Across Alibaba Cloud Accounts Pilih No untuk skenario ini. Connected VPC Virtual private cloud (VPC) yang terhubung ke database sumber. IP Address Alamat IP server database sumber. Port Number Port layanan database sumber. Default: 5432. Database Name Nama database sumber. Database Account Akun untuk database sumber. Lihat Izin yang diperlukan. Database Password Kata sandi untuk akun database. Destination database
Parameter Deskripsi Database Type Pilih PolarDB (Compatible with Oracle). Access Method Pilih Express Connect, VPN Gateway, or Smart Access Gateway. Instance Region Wilayah tempat kluster PolarDB tujuan berada. Connected VPC VPC yang terhubung ke kluster tujuan. Temukan ID VPC di halaman Ikhtisar kluster. Domain Name or IP Address Alamat IP node primer di kluster tujuan. Jalankan pingterhadap cluster endpoint untuk mendapatkan alamat IP.Port Number Port layanan database tujuan. Default: 1521. Database Name Nama database di kluster tujuan. Database Account Akun untuk kluster tujuan. Lihat Izin yang diperlukan. Database Password Kata sandi untuk akun database. Jika database sumber memiliki daftar putih alamat IP, tambahkan Blok CIDR server DTS ke dalamnya. Lalu klik Test Connectivity and Proceed.
PeringatanMenambahkan Blok CIDR server DTS ke daftar putih database atau grup keamanan ECS menimbulkan risiko keamanan. Sebelum melanjutkan, ambil langkah pencegahan: perkuat kata sandi akun, batasi port yang terbuka, autentikasi panggilan API, audit rutin daftar putih IP dan aturan grup keamanan, serta hapus Blok CIDR yang tidak sah. Gunakan Express Connect, VPN Gateway, atau Smart Access Gateway untuk menghubungkan database ke DTS bila memungkinkan.
Konfigurasikan objek migrasi dan pengaturan lanjutan.
Jenis dan objek migrasi
Parameter Deskripsi Migration Types Pilih Full Data Migration untuk migrasi satu kali dengan downtime. Pilih kedua opsi Full Data Migration dan Incremental Data Migration untuk meminimalkan downtime. Jika Anda tidak memilih Incremental Data Migration, hentikan operasi write ke database sumber selama migrasi untuk memastikan konsistensi data. Processing Mode of Conflicting Tables Precheck and Report Errors: memeriksa apakah tujuan berisi tabel dengan nama yang sama seperti sumber. Jika nama identik ada, pemeriksaan awal gagal dan tugas tidak dapat dimulai. Gunakan pemetaan nama objek untuk mengganti nama tabel tujuan jika diperlukan. Ignore Errors and Proceed: melewati pemeriksaan nama duplikat. PeringatanHal ini dapat menyebabkan ketidakkonsistenan data. Catatan dengan nilai kunci primer yang sama tidak dimigrasikan, dan perbedaan skema dapat menyebabkan migrasi parsial atau kegagalan tugas.
Source Objects Pilih objek dari bagian Source Objects dan klik ikon panah untuk memindahkannya ke Selected Objects. Granularitas yang dapat dipilih: kolom, tabel, atau skema. Memilih tabel atau kolom mengecualikan view, trigger, dan prosedur tersimpan. Selected Objects Untuk mengganti nama satu objek di tujuan, klik kanan objek tersebut di Selected Objects. Lihat Petakan nama satu objek. Untuk mengganti nama beberapa objek sekaligus, klik Batch Edit. Lihat Petakan beberapa nama objek sekaligus. CatatanMengganti nama objek dapat menyebabkan objek dependen gagal dimigrasikan. Untuk memfilter baris, klik kanan tabel dan tentukan kondisi WHERE. Lihat Gunakan kondisi SQL untuk memfilter data.
Klik Next: Advanced Settings dan konfigurasikan parameter berikut.
Parameter Deskripsi Set Alerts No: menonaktifkan peringatan. Yes: mengaktifkan peringatan. Tentukan ambang batas peringatan dan kontak peringatan. Lihat Konfigurasi pemantauan dan peringatan. Retry Time for Failed Connections Jendela retry untuk koneksi yang gagal. DTS mencoba ulang segera dalam jendela ini. Rentang: 10–1.440 menit. Default: 120 menit. Atur minimal 30 menit. Jika DTS terhubung kembali dalam jendela, tugas dilanjutkan; jika tidak, tugas gagal. CatatanJika beberapa tugas berbagi database sumber atau tujuan yang sama dan memiliki jendela retry berbeda, jendela terpendek yang berlaku. DTS mengenakan biaya untuk instans selama periode retry.
Retry time for other issues Jendela retry untuk operasi DML atau DDL yang gagal setelah tugas dimulai. Rentang: 1–1.440 menit. Default: 10 menit. Atur minimal 10 menit. PentingNilai ini harus kurang dari Retry Time for Failed Connections.
Configure ETL Yes: mengaktifkan fitur ekstrak, transformasi, dan muat (ETL). Masukkan pernyataan pemrosesan data di editor kode. Lihat Konfigurasi ETL dalam tugas migrasi data atau sinkronisasi data dan Apa itu ETL?. No: menonaktifkan ETL. Klik Next: Save Task Settings and Precheck.
- Untuk melihat pratinjau parameter OpenAPI untuk tugas ini, arahkan kursor ke Next: Save Task Settings and Precheck dan klik Preview OpenAPI parameters. - DTS menjalankan pemeriksaan awal sebelum memulai tugas. Tugas hanya dapat dimulai setelah lulus pemeriksaan awal. - Jika pemeriksaan awal gagal, klik View Details di samping setiap item yang gagal. Perbaiki masalah berdasarkan pesan error, lalu jalankan pemeriksaan awal lagi. - Jika pemeriksaan awal menampilkan peringatan: jika peringatan tidak dapat diabaikan, perbaiki masalah dan jalankan pemeriksaan awal lagi. Jika peringatan dapat diabaikan, klik Confirm Alert Details > Ignore > OK, lalu klik Precheck Again. Mengabaikan peringatan dapat menyebabkan ketidakkonsistenan data.
Tunggu hingga tingkat keberhasilan mencapai 100%, lalu klik Next: Purchase Instance.
Di halaman Purchase Instance, konfigurasikan kelas instans.
Parameter Deskripsi Resource Group Kelompok sumber daya untuk instans migrasi. Default: default resource group. Lihat Apa itu Resource Management?. Instance Class Kelas instans menentukan kecepatan migrasi. Pilih berdasarkan kebutuhan Anda. Lihat Spesifikasi instans migrasi data. Baca dan terima Syarat Layanan Data Transmission Service (Pay-as-you-go) dengan memilih kotak centang.
Klik Buy and Start. Pantau progres tugas di daftar tugas.
Verifikasi dan Peralihan
Sebelum mengalihkan traffic produksi ke kluster tujuan, selesaikan langkah-langkah berikut.
Verifikasi konsistensi data
Untuk migrasi inkremental, pastikan database sumber tidak memiliki perubahan masuk yang tertunda sebelum Anda beralih:
Di daftar tugas DTS, periksa bahwa tugas migrasi tidak menunjukkan error dan latensi migrasi inkremental mendekati nol.
Hentikan sementara operasi write baru ke database sumber.
Pastikan latensi migrasi inkremental turun ke nol dan tidak ada perubahan baru yang diterapkan.
Atur ulang nilai sequence
DTS tidak membawa metadata sequence. Setelah alih bencana, sequence di database tujuan dimulai dari nilai yang dimigrasikan, bukan dari nilai maksimum di sumber. Untuk mencegah konflik sequence:
Jalankan SQL berikut di database sumber untuk mendapatkan nilai maksimum sequence saat ini:
do language plpgsql $$ declare nsp name; rel name; val int8; begin for nsp,rel in select nspname,relname from pg_class t2 , pg_namespace t3 where t2.relnamespace=t3.oid and t2.relkind='S' loop execute format($_$select last_value from %I.%I$_$, nsp, rel) into val; raise notice '%', format($_$select setval('%I.%I'::regclass, %s);$_$, nsp, rel, val+1); end loop; end; $$;Jalankan pernyataan
setvalyang dihasilkan di database tujuan untuk mengatur setiap sequence ke nilai awal yang benar.
Hentikan atau lepaskan tugas yang gagal
DTS mencoba ulang tugas yang gagal hingga 7 hari. Sebelum mengalihkan beban kerja, hentikan atau lepaskan tugas yang gagal. Atau, eksekusi REVOKE untuk mencabut izin tulis DTS pada database tujuan—jika tidak, data sumber dapat menimpa data tujuan saat tugas gagal dilanjutkan.
Alihkan beban kerja
Perbarui string koneksi aplikasi Anda agar mengarah ke kluster PolarDB tujuan.