Layanan Transmisi Data (DTS) mendukung migrasi data dari database PostgreSQL, seperti database PostgreSQL yang dikelola sendiri atau instans ApsaraDB RDS for PostgreSQL, ke ApsaraDB for SelectDB untuk analitik data skala besar. Topik ini memandu Anda melalui seluruh alur kerja migrasi, mencakup migrasi skema, migrasi data penuh, dan migrasi data inkremental opsional.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Memiliki instans ApsaraDB for SelectDB tujuan dengan ruang penyimpanan lebih besar daripada instans RDS PostgreSQL sumber. Lihat Buat instans.
Memiliki akun database dengan hak istimewa pada instans RDS PostgreSQL sumber yang memiliki kepemilikan atas database yang akan dimigrasikan. Lihat Buat akun dan Buat database.
Memiliki akun database pada instans SelectDB tujuan dengan izin berikut: Usage_priv, Select_priv, Load_priv, Alter_priv, Create_priv, dan Drop_priv. Lihat Manajemen Izin Kluster dan Manajemen Izin Dasar.
Pilih jenis migrasi
DTS mendukung dua strategi migrasi. Gunakan panduan berikut untuk memilih strategi yang tepat sebelum mengonfigurasi tugas.
| Jenis migrasi | Kapan digunakan | Penagihan |
|---|---|---|
| Migrasi skema + migrasi data penuh | Migrasi satu kali dengan downtime yang dapat diterima. Hentikan penulisan ke sumber sebelum migrasi. | Gratis |
| Migrasi skema + migrasi penuh + migrasi inkremental | Migrasi tanpa downtime. DTS menjaga sinkronisasi tujuan sementara sumber terus menerima penulisan. | Migrasi inkremental dikenai biaya. Lihat Ikhtisar penagihan. |
Jika Anda memilih migrasi data inkremental, jangan menulis data baru ke instans sumber selama periode migrasi karena hal ini dapat menyebabkan ketidakkonsistenan data.
Batasan
Tinjau semua batasan yang berlaku untuk skenario Anda sebelum memulai.
Persyaratan database sumber
Bandwidth: Server yang menghosting database sumber harus memiliki bandwidth keluar yang cukup. Jika tidak, kecepatan migrasi data akan terpengaruh.
Tabel dengan primary key atau kendala UNIQUE: Pastikan bidang tabel bersifat unik. Jika tidak, data duplikat mungkin ada di database tujuan.
Jika tabel tujuan yang menerima data tidak dibuat oleh DTS (yaitu, Schema Migration tidak dipilih), pastikan tabel tujuan memiliki primary key atau kendala UNIQUE non-null yang sama dengan tabel sumber. Jika tidak, data duplikat mungkin muncul di database tujuan.
Tabel tanpa primary key atau kendala UNIQUE: Pilih Schema Migration saat mengonfigurasi tugas dan atur mesin tabel ke duplicate.
Nama database: Nama database tidak boleh mengandung tanda hubung (-). Misalnya,
dts-testdatatidak didukung.Jumlah tabel: Saat melakukan migrasi tingkat tabel dengan pemetaan nama kolom, satu tugas mendukung maksimal 1.000 tabel. Untuk migrasi yang lebih besar, bagi tabel menjadi beberapa tugas atau migrasikan seluruh database.
Operasi DDL: Jangan lakukan operasi DDL pada database sumber selama migrasi data penuh.
Ukuran data: Jika satu baris data perubahan inkremental melebihi 256 MB, instans migrasi gagal dan tidak dapat dipulihkan. Anda harus mengonfigurasi ulang instans migrasi.
Write-Ahead Logging (WAL):
Atur
wal_levelkelogical.Untuk migrasi hanya inkremental: simpan log WAL lebih dari 24 jam.
Untuk migrasi penuh + inkremental: simpan log WAL minimal 7 hari. Anda dapat mengubah periode retensi log menjadi lebih dari 24 jam setelah migrasi penuh selesai.
PentingJika retensi log WAL lebih pendek dari yang disyaratkan oleh DTS dan tugas gagal karena log hilang, hal ini tidak dicakup oleh Perjanjian Tingkat Layanan (SLA) DTS.
Failover Slot Replikasi Logis: Instans RDS PostgreSQL harus mendukung dan telah mengaktifkan Logical Replication Slot Failover. Lihat Logical Replication Slot Failover.
Transaksi jangka panjang: Jika database sumber memiliki transaksi jangka panjang dan tugas mencakup migrasi inkremental, data WAL menumpuk hingga transaksi dikomit. Pantau ruang disk sumber untuk menghindari kehabisan ruang.
Peningkatan versi utama: Jangan lakukan peningkatan versi utama database sumber selama instans migrasi sedang berjalan. Melakukannya menyebabkan instans gagal secara permanen.
Persyaratan SelectDB tujuan
Tabel harus menggunakan mesin Unique atau duplicate. Lihat Model Data untuk panduan.
Jika tabel tujuan menggunakan mesin Unique, semua kunci unik tabel tujuan juga harus ada di tabel sumber dan termasuk dalam objek migrasi.
Nama database dan tabel harus dimulai dengan huruf. Gunakan fitur pemetaan nama objek untuk mengganti nama objek yang tidak memenuhi persyaratan ini.
Objek yang namanya mengandung karakter Tionghoa harus diganti namanya menjadi padanan ASCII menggunakan pemetaan nama objek. Jika tidak, tugas mungkin gagal.
Satu instans migrasi hanya dapat memigrasikan satu database. Untuk memigrasikan beberapa database, konfigurasikan instans migrasi terpisah untuk masing-masing.
Jangan tambahkan node backend (BE) ke database SelectDB selama migrasi. Jika tugas gagal karena hal ini, restart instans migrasi untuk melanjutkan.
Jangan buat kluster di instans SelectDB tujuan selama migrasi. Jika tugas gagal karena hal ini, restart instans migrasi untuk melanjutkan.
DTS memvalidasi konten data tetapi tidak memvalidasi metadata seperti Sequences. Validasi metadata ini secara manual.
Persyaratan migrasi inkremental
Jalankan perintah berikut pada setiap tabel yang akan dimigrasikan sebelum menulis data ke sumber:
ALTER TABLE schema.table REPLICA IDENTITY FULL;Ganti
schemadantabledengan nama skema dan nama tabel yang sebenarnya. Jalankan perintah ini pada jam sepi dan jangan mengunci tabel saat menjalankannya untuk menghindari deadlock.Jika Anda melewati item pemeriksaan awal terkait, DTS secara otomatis menjalankan perintah ini selama inisialisasi instans. Hal ini berlaku ketika instans dijalankan pertama kali, atau ketika granularitas objek migrasi diatur ke Skema dan tabel baru dibuat atau tabel yang ada dibangun ulang menggunakan perintah RENAME.
Operasi SQL yang didukung untuk migrasi inkremental adalah:
Jenis operasi Pernyataan SQL DML INSERT, UPDATE, DELETE DDL ADD COLUMN, DROP COLUMN DTS mengonversi pernyataan UPDATE dan DELETE menjadi pernyataan INSERT untuk tabel yang menggunakan mesin Duplicate.
DTS tidak dapat memigrasikan tabel ekstensi TimescaleDB atau tabel dengan pewarisan lintas-skema.
Saat memigrasikan tabel partisi, sertakan tabel induk dan semua tabel anak dalam objek migrasi. Tabel induk itu sendiri tidak menyimpan data, tetapi mengecualikannya menyebabkan ketidakkonsistenan data.
Untuk skenario penggabungan multi-tabel (beberapa tabel sumber ke satu tabel tujuan), semua tabel sumber harus memiliki skema yang identik.
Kasus khusus
| Skenario | Persyaratan |
|---|---|
| Sumber adalah ApsaraDB RDS for PostgreSQL | Jangan ubah endpoint atau zona instans selama migrasi. |
| Sumber adalah instans PostgreSQL yang dikelola sendiri | Alih bencana primer/sekunder menyebabkan tugas migrasi data gagal. Selain itu, pastikan max_wal_senders dan max_replication_slots masing-masing lebih besar dari total slot replikasi yang digunakan ditambah jumlah instans DTS yang akan Anda buat. |
| Sumber adalah Google Cloud Platform Cloud SQL for PostgreSQL | Gunakan akun dengan izin cloudsqlsuperuser. Migrasikan hanya objek yang dapat dikelola akun ini, atau berikan kepemilikan dengan: GRANT <owner_of_object_to_migrate> TO <source_database_account_for_task> |
Perilaku internal DTS
Selama migrasi, DTS membuat objek berikut di database sumber. Jangan hapus objek tersebut — mereka akan dihapus secara otomatis saat instans DTS dilepas:
Tabel sementara:
public.dts_pg_class,public.dts_pg_attribute,public.dts_pg_type,public.dts_pg_enum,public.dts_postgres_heartbeat,public.dts_ddl_command,public.dts_args_session,public.aliyun_dts_instanceSlot replikasi (awalan:
dts_sync_): Digunakan untuk mengambil log inkremental dari 15 menit terakhir. DTS membersihkan slot ini saat migrasi gagal atau instans dilepas.Jika Anda mengubah kata sandi akun database sumber atau menghapus alamat IP DTS dari daftar putih selama migrasi, slot replikasi tidak dapat dibersihkan secara otomatis. Bersihkan secara manual untuk mencegah akumulasi disk. Jika terjadi failover primer/sekunder, login ke database sekunder untuk melakukan pembersihan.
Buat tugas migrasi
Langkah 1: Buka halaman Migrasi Data
Gunakan salah satu konsol berikut untuk mengakses halaman Migrasi Data.
Konsol DTS
Login ke Konsol DTS
Di panel navigasi kiri, klik Data Migration.
Di pojok kiri atas, pilih wilayah tempat instans migrasi akan berada.
Konsol DMS
Langkah-langkah aktual dapat berbeda tergantung pada mode dan tata letak konsol DMS. Lihat Mode simple dan Sesuaikan tata letak dan gaya konsol DMS.
Login ke Konsol DMS
Di bilah navigasi atas, arahkan pointer ke Data + AI > DTS (DTS) > Data Migration.
Dari daftar drop-down di sebelah kanan Data Migration Tasks, pilih wilayah tempat instans migrasi akan berada.
Langkah 2: Konfigurasi database sumber dan tujuan
Klik Create Task untuk membuka halaman konfigurasi tugas, lalu konfigurasikan parameter berikut.
Nama tugas
| Parameter | Deskripsi |
|---|---|
| Task Name | DTS menghasilkan nama secara otomatis. Tentukan nama deskriptif untuk mengidentifikasi tugas. Nama tidak perlu unik. |
Database sumber
| Parameter | Deskripsi |
|---|---|
| Select Existing Connection | Jika instans sumber sudah terdaftar di DTS, pilih dari daftar. DTS mengisi parameter lainnya secara otomatis. Jika tidak, konfigurasikan parameter di bawah ini. |
| Database Type | Pilih PostgreSQL. |
| Access Method | Pilih Alibaba Cloud Instance. |
| Instance Region | Pilih wilayah tempat instans RDS PostgreSQL sumber berada. |
| Replicate Data Across Alibaba Cloud Accounts | Pilih No jika instans sumber dan tujuan milik Akun Alibaba Cloud yang sama. |
| Instance ID | Pilih ID instans RDS PostgreSQL sumber. |
| Database Name | Masukkan nama database yang berisi objek untuk dimigrasikan. |
| Database Account | Masukkan akun database instans sumber. Lihat Prasyarat untuk izin yang diperlukan. |
| Database Password | Masukkan kata sandi untuk akun database. |
Database tujuan
| Parameter | Deskripsi |
|---|---|
| Select Existing Connection | Jika instans tujuan sudah terdaftar di DTS, pilih dari daftar. DTS mengisi parameter lainnya secara otomatis. Jika tidak, konfigurasikan parameter di bawah ini. |
| Database Type | Pilih SelectDB. |
| Access Method | Pilih Alibaba Cloud Instance. |
| Instance Region | Pilih wilayah tempat instans SelectDB tujuan berada. |
| Replicate Data Across Alibaba Cloud Accounts | Pilih No jika kedua instans milik Akun Alibaba Cloud yang sama. |
| Instance ID | Pilih ID instans SelectDB tujuan. |
| Database Account | Masukkan akun database instans tujuan. Lihat Prasyarat untuk izin yang diperlukan. |
| Database Password | Masukkan kata sandi untuk akun database. |
Langkah 3: Uji konektivitas dan konfigurasi objek
Klik Test Connectivity and Proceed.
Pastikan blok CIDR server DTS telah ditambahkan ke pengaturan keamanan database sumber dan tujuan. Lihat Tambahkan alamat IP server DTS ke daftar putih.
Di halaman Configure Objects, atur parameter berikut:
Parameter Deskripsi Migration Types Pilih berdasarkan strategi migrasi Anda. Lihat Pilih jenis migrasi. Untuk migrasi tanpa downtime, pilih Schema Migration, Full Data Migration, dan Incremental Data Migration. Untuk migrasi satu kali, pilih Schema Migration dan Full Data Migration. Processing Mode of Conflicting Tables Precheck and Report Errors (default): Tugas gagal selama pemeriksaan awal jika tabel dengan nama yang sama ada di tujuan. Ignore Errors and Proceed: DTS melewati pemeriksaan. Gunakan dengan hati-hati — ketidakkonsistenan data mungkin terjadi jika skema berbeda. Capitalization of Object Names in Destination Instance Menentukan bagaimana kapitalisasi nama database, tabel, dan kolom di tujuan. DTS default policy dipilih secara default. Lihat Tentukan kapitalisasi nama objek di instans tujuan. Source Objects Pilih objek untuk dimigrasikan pada tingkat skema atau tabel, lalu klik ikon untuk menambahkannya ke Selected Objects. Selected Objects Klik kanan objek untuk mengganti namanya, mengatur kondisi filter, atau memilih operasi SQL untuk migrasi inkremental. Untuk mengatur parameter bucket_count, klik kanan tabel, buka Parameter Settings, aktifkan pengaturan, dan tentukan nilai. Untuk menghapus objek, klik objek tersebut lalu klik ikon hapus.- Parameter
bucket_countharus berupa bilangan bulat positif. Nilai default adalah auto. - Jika Anda mengganti nama objek menggunakan pemetaan nama objek, objek lain yang bergantung padanya mungkin gagal dimigrasikan. - Untuk memfilter baris, klik kanan tabel di Selected Objects dan tentukan kondisi WHERE. Lihat Tentukan kondisi filter.Klik Next: Advanced Settings dan konfigurasikan parameter opsional berikut:
Parameter Deskripsi Dedicated Cluster for Task Scheduling Secara default, tugas berjalan di kluster bersama. Untuk stabilitas lebih tinggi, beli kluster khusus. Lihat Apa itu kluster khusus DTS. Retry Time for Failed Connections Berapa lama DTS mencoba ulang sebelum menandai tugas gagal karena masalah koneksi. Rentang: 10–1.440 menit. Default: 720 menit. Atur minimal 30 menit. Retry Time for Other Issues Berapa lama DTS mencoba ulang sebelum gagal karena kesalahan DDL atau DML. Rentang: 1–1.440 menit. Default: 10 menit. Harus kurang dari Retry Time for Failed Connections. Enable Throttling for Full Data Migration Membatasi throughput baca/tulis selama migrasi penuh untuk mengurangi beban database. Konfigurasikan Queries per second (QPS) to the source database, RPS of Full Data Migration, dan Data migration speed for full migration (MB/s). Enable Throttling for Incremental Data Migration Membatasi throughput selama migrasi inkremental. Konfigurasikan RPS of Incremental Data Migration dan Data migration speed for incremental migration (MB/s). Environment Tag Opsional. Beri tag instans untuk identifikasi lingkungan. Configure ETL Pilih Yesalert notification settings untuk mengaktifkan fitur ekstrak, transformasi, dan muat (ETL). Lihat Konfigurasi ETL dalam tugas migrasi data atau sinkronisasi data. Monitoring and Alerting Pilih Yes untuk menerima peringatan saat tugas gagal atau latensi migrasi melebihi ambang batas. Lihat Konfigurasi pemantauan dan peringatan. (Opsional) Klik Next: Configure Database and Table Fields untuk mengatur Primary Key Column, Distribution Key, dan Engine untuk tabel tujuan.
- Langkah ini tersedia hanya jika Anda memilih Schema Migration untuk Migration Types. Atur Definition Status ke All untuk mengedit semua tabel. - Primary Key Column dapat berupa kunci primer komposit. Pilih satu atau beberapa kolom dari Primary Key Column sebagai Distribution Key. - Untuk tabel tanpa primary key atau kendala UNIQUE, atur Engine ke duplicate. Jika tidak, instans migrasi mungkin gagal atau data hilang.
Langkah 4: Jalankan pemeriksaan awal
Klik Next: Save Task Settings and Precheck.
Untuk melihat pratinjau parameter API untuk konfigurasi tugas ini, arahkan pointer ke Next: Save Task Settings and Precheck lalu klik Preview OpenAPI parameters.
Tunggu hingga pemeriksaan awal selesai. Jika ada item yang gagal:
Klik View Details di samping setiap item yang gagal, atasi masalahnya, lalu klik Precheck Again.
Untuk item peringatan yang dapat diabaikan, klik Confirm Alert Details, lalu klik Ignore > OK > Precheck Again.
PentingMengabaikan item peringatan dapat menyebabkan ketidakkonsistenan data. Lanjutkan dengan hati-hati.
Langkah 5: Beli instans dan mulai migrasi
Tunggu hingga Success Rate 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 Manajemen Sumber Daya? Instance Class Mengontrol kecepatan migrasi. Lihat Kelas instans migrasi data. Baca dan terima Data Transmission Service (Pay-as-you-go) Service Terms, lalu klik Buy and Start > OK.
Verifikasi status migrasi
Setelah tugas dimulai, buka halaman Data Migration untuk memantau progres:
Hanya migrasi penuh: Tugas berhenti otomatis saat selesai. Status berubah menjadi Completed.
Migrasi penuh + inkremental: Fase inkremental berjalan terus-menerus. Status menunjukkan Running. Hentikan tugas secara manual saat Anda siap beralih ke tujuan.
Pertimbangan performa
Selama migrasi penuh, jalankan tugas saat beban CPU baik di sumber maupun tujuan berada di bawah 30%.
DTS menggunakan sinkronisasi batch untuk migrasi inkremental. Secara default, DTS menulis ke setiap objek paling banyak sekali setiap 5 detik, menghasilkan latensi sinkronisasi khas dalam waktu 10 detik. Untuk mengurangi latensi, sesuaikan parameter
selectdb.reservoir.timeout.millisecondsdi konsol DTS. Rentang valid: 1.000–10.000 milidetik.Mengurangi interval batch meningkatkan frekuensi penulisan ke tujuan, yang dapat meningkatkan beban tujuan dan waktu respons penulisan. Sesuaikan berdasarkan kapasitas tujuan Anda.
Jika instans migrasi gagal, tim bantuan DTS berusaha memulihkannya dalam waktu 8 jam. Pemulihan mungkin melibatkan restart instans atau penyesuaian parameternya. Hanya parameter instans DTS yang dimodifikasi — parameter database tidak diubah.
Pemetaan tipe data
Tabel berikut menunjukkan bagaimana tipe data PostgreSQL dipetakan ke tipe data SelectDB setelah migrasi.
| Kategori | Tipe data PostgreSQL | Tipe data SelectDB | Catatan |
|---|---|---|---|
| Numerik | SMALLINT | SMALLINT | |
| INTEGER | INT | ||
| BIGINT | BIGINT | ||
| DECIMAL | DECIMAL | ||
| NUMERIC | DECIMAL | ||
| REAL | DOUBLE | ||
| DOUBLE | DOUBLE | ||
| SMALLSERIAL | SMALLINT | ||
| SERIAL | INT | ||
| BIGSERIAL | BIGINT | ||
| Moneter | MONEY | STRING | |
| Karakter | CHAR(n), VARCHAR(n) | VARCHAR | Dikonversi ke VARCHAR(4*n) untuk mencegah kehilangan data. Jika tidak ada panjang yang ditentukan, default ke VARCHAR(65533). Jika panjang melebihi 65533, dikonversi ke STRING. |
| TEXT | STRING | ||
| Biner | BYTEA | STRING | |
| Tanggal dan waktu | TIMESTAMP [(P)] WITHOUT TIME ZONE | DATETIMEV2 | |
| TIMESTAMP [(P)] WITH TIME ZONE | DATETIMEV2 | ||
| DATE | DATEV2 | ||
| TIME [(P)] WITHOUT TIME ZONE | VARCHAR(50) | ||
| TIME [(P)] WITH TIME ZONE | VARCHAR(50) | ||
| INTERVAL [FIELDS] [(P)] | STRING | ||
| Boolean | BOOLEAN | BOOLEAN | |
| Geometris | POINT, LINE, LSEG, BOX, PATH, POLYGON, CIRCLE | STRING | |
| Alamat jaringan | CIDR, INET, MACADDR, MACADDR8 | STRING | |
| Pencarian teks | TSVECTOR | STRING | |
| XML | XML | STRING | |
| JSON | JSON | JSON |
Kolom tambahan untuk model Duplicate
Untuk tabel tujuan yang menggunakan model Duplicate, DTS secara otomatis menambahkan kolom berikut. Gunakan kolom ini untuk mengidentifikasi dan menghapus data duplikat setelah percobaan ulang atau restart.
| Kolom | Tipe data | Nilai default | Deskripsi |
|---|---|---|---|
_is_deleted | Int | 0 | 0 untuk operasi INSERT dan UPDATE; 1 untuk operasi DELETE. |
_version | Bigint | 0 | 0 untuk migrasi penuh. Untuk migrasi inkremental, timestamp dalam detik dari log biner sumber. |
_record_id | Bigint | 0 | 0 untuk migrasi penuh. Untuk migrasi inkremental, ID auto-increment unik yang mengidentifikasi setiap entri log. |
Data duplikat mungkin muncul dalam kasus berikut:
Operasi percobaan ulang terjadi di instans migrasi.
Instans migrasi di-restart.
Dua atau lebih operasi DML dilakukan pada baris yang sama setelah migrasi dimulai.
Untuk tabel yang menggunakan mesin Duplicate, DTS mengonversi pernyataan UPDATE dan DELETE menjadi pernyataan INSERT.
Langkah selanjutnya
Untuk memetakan nama objek antara sumber dan tujuan, lihat Petakan nama objek.
Untuk mengelola koneksi database yang terdaftar di DTS, lihat Kelola koneksi database.
Untuk memodifikasi parameter instans setelah tugas dimulai, lihat Modifikasi parameter instans.