All Products
Search
Document Center

Data Transmission Service:Migrasikan data dari database PostgreSQL yang dikelola sendiri ke kluster PolarDB untuk PostgreSQL (Kompatibel dengan Oracle)

Last Updated:Mar 29, 2026

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:

Pilih jenis migrasi

Pilih jenis migrasi berdasarkan toleransi downtime Anda.

Jenis migrasiApa yang dilakukan DTSDowntime yang diperlukanBiaya
Full data migrationMemigrasikan data yang ada pada suatu titik waktu.Ya — hentikan semua operasi write ke sumber sebelum migrasi.Gratis.
Full data migration + incremental data migrationMemigrasikan data yang ada, lalu terus-menerus menyinkronkan perubahan hingga Anda beralihMinimal — 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

DatabaseMigrasi skemaMigrasi data penuhMigrasi data inkremental
PostgreSQL yang dikelola sendiriUSAGE pada pg_catalogSELECT pada objek yang akan dimigrasikansuperuser
PolarDB untuk PostgreSQL (Kompatibel dengan Oracle)Database ownerDatabase ownerDatabase owner
Tentukan database owner saat membuat database tujuan.

Untuk instruksi membuat akun dan memberikan izin, lihat:

Penagihan

Jenis migrasiBiaya konfigurasi instansBiaya traffic Internet
Full data migrationGratisDikenai biaya hanya jika data dimigrasikan dari Alibaba Cloud melalui Internet. Lihat Ikhtisar penagihan.
Incremental data migrationDikenai biaya. Lihat Ikhtisar penagihan.

Operasi SQL yang didukung untuk migrasi inkremental

Jenis operasiPernyataan SQL
DMLINSERT, UPDATE, DELETE
DDLCREATE 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
Penting
  • 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 = replica dieksekusi 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

BatasDetailDampak dan solusi
BandwidthServer database sumber harus memiliki bandwidth keluar yang mencukupi.Bandwidth yang tidak mencukupi mengurangi kecepatan migrasi.
Kunci primer atau kendala unikTabel 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 databaseNama 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 parameterUntuk 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 WALHanya 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/sekunderJangan lakukan alih bencana primer/sekunder pada database sumber selama migrasi.Alih bencana menyebabkan tugas migrasi gagal.
DDL selama migrasi penuhJangan lakukan operasi DDL selama migrasi data penuh.Operasi DDL selama migrasi penuh menyebabkan tugas gagal.
Transaksi jangka panjangJika 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

BatasDetail
Buat database dan tabel terlebih dahuluBuat database dan tabel tujuan di kluster tujuan sebelum mengonfigurasi tugas migrasi.
Tabel baru atau berganti nama selama migrasi inkrementalJika 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 sumberDTS 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 heartbeatDTS membuat tabel heartbeat bernama dts_postgres_heartbeat di database sumber untuk melacak latensi migrasi inkremental.
Replication slotDTS 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. Amazon slot查询信息
Satu database per tugasSatu tugas migrasi hanya memigrasikan data dari satu database. Untuk memigrasikan beberapa database, buat tugas terpisah untuk masing-masing.
Dampak performaMigrasi data penuh menggunakan sumber daya baca dan tulis di database sumber dan tujuan, meningkatkan beban server. Jadwalkan migrasi pada jam sepi.
Pertumbuhan tablespaceOperasi INSERT bersamaan selama migrasi penuh menyebabkan fragmentasi tabel di database tujuan. Ukuran tablespace tujuan diperkirakan lebih besar daripada sumber setelah migrasi.
Presisi FLOAT/DOUBLEDTS 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 gagalDTS 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 sequenceDTS 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.
  1. Masuk ke server tempat database PostgreSQL sumber berjalan.

  2. Atur wal_level ke logical di postgresql.conf.

    Setelah mengedit postgresql.conf, jalankan SELECT pg_reload_conf(); atau restart PostgreSQL agar perubahan berlaku.

    设置wal_level

  3. 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 ke 0.0.0.0/0.

    IP

  4. Buat database dan skema yang sesuai di kluster tujuan agar sesuai dengan objek yang akan dimigrasikan.

PostgreSQL 9.4.8 hingga 10.0

  1. Unduh dan instal PostgreSQL dari source.

    1. Unduh kode sumber yang sesuai dengan versi PostgreSQL Anda dari situs resmi PostgreSQL.

    2. 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 ./configure gagal, sesuaikan perintah berdasarkan error. Misalnya, jika error-nya adalah readline library not found, jalankan sudo ./configure --without-readline. - Jika Anda menginstal PostgreSQL dengan cara lain, kompilasi plugin ali_decoding di lingkungan pengujian dengan versi OS dan GCC yang sama.

  2. Unduh, kompilasi, dan instal plugin ali_decoding yang disediakan oleh DTS.

    1. Unduh ali_decoding.

    2. Salin direktori ali_decoding ke direktori contrib instalasi PostgreSQL Anda. contrib目录

    3. Di direktori ali_decoding, ganti isi Makefile dengan 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
      endif
    4. Di direktori ali_decoding, kompilasi dan instal plugin:

      sudo make
      sudo make install
    5. Salin file output ke lokasi yang diperlukan. 指定位置

  3. Buat database dan skema yang sesuai di kluster tujuan agar sesuai dengan objek yang akan dimigrasikan.

Konfigurasi tugas migrasi

  1. Buka halaman Data Migration Tasks.

    1. Masuk ke Konsol Data Management (DMS).

    2. Di bilah navigasi atas, klik DTS.

    3. 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.
  2. 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.
  3. Klik Create Task. Konfigurasikan database sumber dan tujuan menggunakan parameter berikut.

    Peringatan

    Setelah memilih instans sumber dan tujuan, baca limits yang ditampilkan di bagian atas halaman sebelum melanjutkan.

    Source database

    ParameterDeskripsi
    Database TypePilih PostgreSQL.
    Access MethodPilih Express Connect, VPN Gateway, or Smart Access Gateway. Untuk persiapan jaringan, lihat Ikhtisar persiapan.
    Instance RegionWilayah tempat database sumber berada.
    Replicate Data Across Alibaba Cloud AccountsPilih No untuk skenario ini.
    Connected VPCVirtual private cloud (VPC) yang terhubung ke database sumber.
    IP AddressAlamat IP server database sumber.
    Port NumberPort layanan database sumber. Default: 5432.
    Database NameNama database sumber.
    Database AccountAkun untuk database sumber. Lihat Izin yang diperlukan.
    Database PasswordKata sandi untuk akun database.

    Destination database

    ParameterDeskripsi
    Database TypePilih PolarDB (Compatible with Oracle).
    Access MethodPilih Express Connect, VPN Gateway, or Smart Access Gateway.
    Instance RegionWilayah tempat kluster PolarDB tujuan berada.
    Connected VPCVPC yang terhubung ke kluster tujuan. Temukan ID VPC di halaman Ikhtisar kluster.
    Domain Name or IP AddressAlamat IP node primer di kluster tujuan. Jalankan ping terhadap cluster endpoint untuk mendapatkan alamat IP.
    Port NumberPort layanan database tujuan. Default: 1521.
    Database NameNama database di kluster tujuan.
    Database AccountAkun untuk kluster tujuan. Lihat Izin yang diperlukan.
    Database PasswordKata sandi untuk akun database.
  4. Jika database sumber memiliki daftar putih alamat IP, tambahkan Blok CIDR server DTS ke dalamnya. Lalu klik Test Connectivity and Proceed.

    Peringatan

    Menambahkan 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.

  5. Konfigurasikan objek migrasi dan pengaturan lanjutan.

    Jenis dan objek migrasi

    ParameterDeskripsi
    Migration TypesPilih 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 TablesPrecheck 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.
    Peringatan

    Hal 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 ObjectsPilih 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 ObjectsUntuk 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.
    Catatan

    Mengganti 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.

  6. Klik Next: Advanced Settings dan konfigurasikan parameter berikut.

    ParameterDeskripsi
    Set AlertsNo: menonaktifkan peringatan. Yes: mengaktifkan peringatan. Tentukan ambang batas peringatan dan kontak peringatan. Lihat Konfigurasi pemantauan dan peringatan.
    Retry Time for Failed ConnectionsJendela 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.
    Catatan

    Jika 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 issuesJendela retry untuk operasi DML atau DDL yang gagal setelah tugas dimulai. Rentang: 1–1.440 menit. Default: 10 menit. Atur minimal 10 menit.
    Penting

    Nilai ini harus kurang dari Retry Time for Failed Connections.

    Configure ETLYes: 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.
  7. 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.
  8. Tunggu hingga tingkat keberhasilan mencapai 100%, lalu klik Next: Purchase Instance.

  9. Di halaman Purchase Instance, konfigurasikan kelas instans.

    ParameterDeskripsi
    Resource GroupKelompok sumber daya untuk instans migrasi. Default: default resource group. Lihat Apa itu Resource Management?.
    Instance ClassKelas instans menentukan kecepatan migrasi. Pilih berdasarkan kebutuhan Anda. Lihat Spesifikasi instans migrasi data.
  10. Baca dan terima Syarat Layanan Data Transmission Service (Pay-as-you-go) dengan memilih kotak centang.

  11. 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:

  1. Di daftar tugas DTS, periksa bahwa tugas migrasi tidak menunjukkan error dan latensi migrasi inkremental mendekati nol.

  2. Hentikan sementara operasi write baru ke database sumber.

  3. 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:

  1. 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;
    $$;
  2. Jalankan pernyataan setval yang 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.