Gunakan metode migrasi ini jika aplikasi Anda memerlukan downtime dalam hitungan menit. Metode ini melibatkan staging cadangan penuh melalui Object Storage Service (OSS), memulihkannya ke ApsaraDB RDS for SQL Server, lalu menerapkan cadangan log atau diferensial untuk menutup celah data sebelum cutover. Karena migrasi ini menggunakan file backup fisik, database tujuan merupakan salinan persis dari sumber—termasuk fragmentasi indeks dan informasi statistik yang tidak dapat dipertahankan oleh migrasi logis.
Jika aplikasi Anda dapat mentoleransi downtime hingga 2 jam dan ukuran database kurang dari 100 GB, gunakan migrasi cadangan penuh sebagai gantinya. Metode ini hanya memigrasikan satu database dalam satu waktu.
Cara kerja
Migrasi berjalan dalam dua fase:
Migrasi data penuh: Backup database sumber, unggah file cadangan penuh ke bucket OSS, lalu pulihkan ke instans RDS melalui konsol ApsaraDB RDS.
Fase inkremental: Lakukan backup dan unggah berulang file cadangan log atau diferensial untuk mempersempit celah data. Saat cadangan log terakhir berukuran di bawah 500 MB, hentikan penulisan ke database sumber, unggah cadangan log terakhir, lalu buka database tujuan.
Database tujuan tetap berada dalam status In Recovery (Edisi Ketersediaan Tinggi RDS) atau status Restoring (Edisi Dasar RDS) selama proses migrasi. Database tersebut tidak dapat dibaca atau ditulis hingga Anda membukanya pada langkah terakhir.
Prasyarat
Instans SQL Server yang dikelola sendiri:
Menggunakan model pemulihan FULL. Model pemulihan SIMPLE tidak mendukung backup log transaksi, yang diperlukan untuk migrasi inkremental.
Jalankan
DBCC CHECKDBpada database sumber dan pastikan tidak ada error alokasi atau error konsistensi yang dilaporkan:CHECKDB found 0 allocation errors and 0 consistency errors in database 'xxx'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Instans RDS:
Menjalankan SQL Server 2012 atau versi lebih baru, atau SQL Server 2008 R2 dengan cloud disk.
Tidak ada database yang sudah ada di instans RDS yang memiliki nama sama dengan database sumber, dan tidak ada file database yang tidak terpasang dengan nama yang sama. Konflik penamaan menyebabkan proses restore gagal.
Kapasitas penyimpanan tersedia lebih besar dari ukuran file data yang akan dimigrasikan. Perluas kapasitas penyimpanan sebelum memulai jika diperlukan.
Authorization
Akun layanan ApsaraDB RDS harus memiliki akses ke bucket OSS Anda. Untuk memverifikasi dan memberikan otorisasi:
Pada halaman Backup and Restoration instans RDS Anda, klik Migrate OSS Backup Data to RDS.
Pada wizard Import Guide, klik Next dua kali hingga mencapai langkah 3. Import Data.
Periksa sudut kiri bawah halaman. Jika muncul pesan Anda telah mengizinkan akun layanan resmi RDS mengakses OSS Anda, berarti otorisasi telah selesai. Jika tidak, klik tautan Authorization URL untuk memberikan otorisasi.

Jika menggunakan Pengguna Resource Access Management (RAM), persyaratan tambahan berikut berlaku:
Pengguna RAM memiliki izin AliyunOSSFullAccess dan AliyunRDSFullAccess. Lihat Kelola izin OSS menggunakan RAM dan Kelola izin ApsaraDB RDS menggunakan RAM.
Akun Alibaba Cloud Anda telah membuat kebijakan akses kustom dan melampirkannya ke pengguna RAM:
import com.aliyun.oss.*; import com.aliyun.oss.common.auth.*; import com.aliyun.oss.common.comm.SignVersion; import com.aliyun.oss.internal.Mimetypes; import com.aliyun.oss.model.*; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class Demo { public static void main(String[] args) throws Exception { // Ganti dengan titik akhir untuk wilayah bucket Anda. String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // Kredensial dibaca dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET. EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); String bucketName = "examplebucket"; // Jalur objek lengkap di dalam bucket, tidak termasuk nama bucket. String objectName = "exampledir/exampleobject.txt"; // Jalur lokal lengkap dari file cadangan yang akan diunggah. String filePath = "D:\\localpath\\examplefile.txt"; // Pengidentifikasi wilayah untuk bucket, misalnya "cn-hangzhou". String region = "cn-hangzhou"; ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); clientBuilderConfiguration.setSignatureVersion(SignVersion.V4); OSS ossClient = OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(credentialsProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { // Mulai unggah multi-bagian. InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName); ObjectMetadata metadata = new ObjectMetadata(); if (metadata.getContentType() == null) { metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName)); } request.setObjectMetadata(metadata); InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request); String uploadId = upresult.getUploadId(); List<PartETag> partETags = new ArrayList<PartETag>(); // Setiap bagian berukuran 1 MB; sesuaikan berdasarkan ukuran file dan kondisi jaringan Anda. final long partSize = 1 * 1024 * 1024L; final File sampleFile = new File(filePath); long fileLength = sampleFile.length(); int partCount = (int) (fileLength / partSize); if (fileLength % partSize != 0) { partCount++; } // Unggah setiap bagian secara berurutan. for (int i = 0; i < partCount; i++) { long startPos = i * partSize; long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize; UploadPartRequest uploadPartRequest = new UploadPartRequest(); uploadPartRequest.setBucketName(bucketName); uploadPartRequest.setKey(objectName); uploadPartRequest.setUploadId(uploadId); InputStream instream = new FileInputStream(sampleFile); instream.skip(startPos); uploadPartRequest.setInputStream(instream); // Bagian terakhir bisa lebih kecil dari 100 KB; semua bagian lainnya harus berukuran minimal 100 KB. uploadPartRequest.setPartSize(curPartSize); // Nomor bagian berkisar dari 1 hingga 10.000. uploadPartRequest.setPartNumber(i + 1); UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest); partETags.add(uploadPartResult.getPartETag()); instream.close(); } // Selesaikan unggahan. OSS merakit semua bagian secara berurutan. CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags); CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest); System.out.println("Unggahan berhasil, ETag: " + completeMultipartUploadResult.getETag()); } catch (OSSException oe) { System.out.println("OSS menolak permintaan: " + oe.getErrorMessage() + " (Kode: " + oe.getErrorCode() + ", ID Permintaan: " + oe.getRequestId() + ")"); } catch (ClientException ce) { System.out.println("Kesalahan klien saat berkomunikasi dengan OSS: " + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } } } }
Catatan penggunaan
| Item | Detail |
|---|---|
| Scope | Satu database per tugas migrasi. Untuk memigrasikan beberapa database, lihat Migrasi data dari instans SQL Server yang dikelola sendiri ke instans ApsaraDB RDS for SQL Server. |
| Version compatibility | Migrasi dari versi SQL Server yang lebih baru ke versi yang lebih lama tidak didukung. |
| RAM role | Setelah otorisasi, sebuah peran bernama AliyunRDSImportRole dibuat di RAM. Jangan ubah atau hapus peran ini. Jika Anda melakukannya, lakukan otorisasi ulang menggunakan wizard migrasi. |
| Accounts | Setelah migrasi, akun dari instans yang dikelola sendiri tidak ikut terbawa. Buat akun baru di konsol ApsaraDB RDS. |
| OSS files | Jangan hapus file backup dari bucket OSS sebelum migrasi selesai. |
| Backup filenames | Tidak boleh mengandung karakter khusus seperti !@#$%^&*()_+-=. |
| Backup file suffixes | .bak (cadangan penuh), .diff (cadangan diferensial), .trn atau .log (cadangan log). Jenis file lain tidak dikenali. File .bak dapat berisi cadangan penuh, diferensial, atau log — ekstensi tidak menentukan jenis backup. |
| Converting `.lbak` files | Jika Anda mengunduh cadangan log dari konsol ApsaraDB RDS (format: .zip.log), ubah namanya menjadi .zip, ekstrak isinya, lalu ubah nama file hasil ekstraksi database_name.lbak menjadi .bak, kemudian unggah sebagai cadangan log inkremental. |
Contoh timeline migrasi
Contoh berikut menunjukkan cara menyelesaikan migrasi dengan downtime aplikasi kurang dari 5 menit.
| Fase | Langkah | Waktu | Detail |
|---|---|---|---|
| Migrasi data penuh | Persiapan | Sebelum 00:00 | Jalankan DBCC CHECKDB, matikan sistem backup untuk database sumber, dan atur model pemulihan ke FULL. |
| Langkah 1 | 00:01 | Lakukan backup penuh. Perkiraan durasi: ~1 jam. | |
| Langkah 2 | 02:00 | Unggah file backup penuh ke OSS. Perkiraan durasi: ~1 jam. | |
| Langkah 3 | 03:00 | Pulihkan dari backup penuh di konsol ApsaraDB RDS. Perkiraan durasi: ~19 jam. | |
| Fase inkremental | Langkah 4 | 22:00 | Lakukan backup log pada database sumber. Perkiraan durasi: ~20 menit. |
| Langkah 5 | 22:20 | Unggah file backup log ke OSS. Perkiraan durasi: ~10 menit. | |
| Langkah 6 | 22:30 | Ulangi Langkah 4–5 hingga backup log terakhir berukuran di bawah 500 MB. Hentikan semua penulisan ke database sumber, lakukan backup log terakhir, lalu unggah. | |
| Open the database | Langkah 7 | 22:34 | Unggahan inkremental terakhir selesai (~4 menit). |
| Langkah 8 | 22:35 | Buka database tujuan. Dengan mode Asynchronous DBCC, database online dalam waktu 1 menit. |
Langkah 1: Backup database sumber
Unduh skrip backup dan buka di SQL Server Management Studio (SSMS).
Atur parameter berikut:
Parameter Deskripsi @backup_databases_listNama database sumber. Pisahkan beberapa nama database dengan titik koma ( ;) atau koma (,).@backup_typeJenis backup: FULL(backup penuh),DIFF(backup diferensial), atauLOG(backup log).@backup_folderDirektori pada instans yang dikelola sendiri untuk menyimpan file backup. Direktori ini dibuat otomatis jika belum ada. @is_run1untuk menjalankan backup;0hanya untuk pemeriksaan.Jalankan skrip backup. File
.bakakan dihasilkan terlepas dari jenis backup yang dipilih.
Langkah 2: Unggah file backup ke OSS
File backup harus berada di bucket OSS yang berada di wilayah yang sama dengan instans RDS Anda. Transfer antar wilayah yang sama menggunakan jaringan internal, sehingga menghindari biaya egress internet dan meningkatkan kecepatan unggah.
Siapkan bucket OSS
Jika bucket sudah ada, pastikan memenuhi persyaratan berikut:
Jenis penyimpanan adalah Standard (Infrequent Access, Archive, Cold Archive, dan Deep Cold Archive tidak didukung).
Enkripsi data tidak diaktifkan.
Jika belum ada bucket, buat bucket baru:
Bucket ini hanya digunakan untuk migrasi. Setelah migrasi selesai, hapus bucket untuk menghindari biaya yang tidak perlu dan potensi eksposur data. Jangan aktifkan enkripsi data.
Login ke konsol OSS, klik Buckets, lalu klik Create Bucket.
Konfigurasikan parameter kunci:
Parameter Deskripsi Contoh Bucket name Unik secara global; 3–63 karakter; hanya huruf kecil, angka, dan tanda hubung; harus diawali dan diakhiri dengan huruf kecil atau angka. migratetestRegion Harus sesuai dengan wilayah instans RDS Anda (dan instans Elastic Compute Service (ECS) jika Anda mengunggah melalui jaringan internal). China (Hangzhou) Storage class Pilih Standard. Standard Pertahankan nilai default untuk semua parameter lainnya dan selesaikan pembuatan.
Unggah file backup
Pilih metode unggah berdasarkan ukuran file:
Metode 1: ossbrowser (direkomendasikan untuk sebagian besar kasus)
Unduh ossbrowser.
Ekstrak paket yang diunduh dan jalankan aplikasi (misalnya,
oss-browser.exepada Windows x64).Pilih AK sebagai metode login, masukkan AccessKeyId dan AccessKeySecret Anda, lalu klik Log On.
Jaga kerahasiaan kredensial AccessKey Anda. Lihat Buat Pasangan Kunci Akses.

Klik bucket target untuk membukanya.

Klik
, pilih file backup, lalu klik Open untuk mengunggah.
Metode 2: Konsol OSS (file di bawah 5 GB)
Login ke konsol OSS.
Klik Buckets, lalu klik nama bucket target.

Pada bagian Objects, klik Upload Object.

Seret dan lepas file backup ke area Files to Upload, atau klik Select Files untuk menelusuri.

Klik Upload Object di bagian bawah halaman.
Metode 3: Unggah multipart OSS API (file di atas 5 GB)
Untuk file backup besar, gunakan OSS Java SDK dengan unggah multipart. Contoh berikut membaca kredensial dari variabel lingkungan. Atur OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET sebelum menjalankan. Untuk dokumentasi lengkap, lihat Unggah multi-bagian.
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.internal.Mimetypes;
import com.aliyun.oss.model.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) throws Exception {
// Ganti dengan endpoint wilayah bucket Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Kredensial dibaca dari variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
String bucketName = "examplebucket";
// Jalur objek lengkap dalam bucket, tanpa nama bucket.
String objectName = "exampledir/exampleobject.txt";
// Jalur lokal lengkap file backup yang akan diunggah.
String filePath = "D:\\localpath\\examplefile.txt";
// Identifikasi wilayah bucket, misalnya "cn-hangzhou".
String region = "cn-hangzhou";
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Mulai unggah multipart.
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);
ObjectMetadata metadata = new ObjectMetadata();
if (metadata.getContentType() == null) {
metadata.setContentType(Mimetypes.getInstance().getMimetype(new File(filePath), objectName));
}
request.setObjectMetadata(metadata);
InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
String uploadId = upresult.getUploadId();
List<PartETag> partETags = new ArrayList<PartETag>();
// Setiap bagian berukuran 1 MB; sesuaikan berdasarkan ukuran file dan kondisi jaringan.
final long partSize = 1 * 1024 * 1024L;
final File sampleFile = new File(filePath);
long fileLength = sampleFile.length();
int partCount = (int) (fileLength / partSize);
if (fileLength % partSize != 0) {
partCount++;
}
// Unggah setiap bagian secara berurutan.
for (int i = 0; i < partCount; i++) {
long startPos = i * partSize;
long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(bucketName);
uploadPartRequest.setKey(objectName);
uploadPartRequest.setUploadId(uploadId);
InputStream instream = new FileInputStream(sampleFile);
instream.skip(startPos);
uploadPartRequest.setInputStream(instream);
// Bagian terakhir bisa lebih kecil dari 100 KB; bagian lain minimal 100 KB.
uploadPartRequest.setPartSize(curPartSize);
// Nomor bagian berkisar dari 1 hingga 10.000.
uploadPartRequest.setPartNumber(i + 1);
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
partETags.add(uploadPartResult.getPartETag());
instream.close();
}
// Selesaikan unggah. OSS merakit semua bagian secara berurutan.
CompleteMultipartUploadRequest completeMultipartUploadRequest =
new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);
CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
System.out.println("Unggah berhasil, ETag: " + completeMultipartUploadResult.getETag());
} catch (OSSException oe) {
System.out.println("Permintaan ditolak OSS: " + oe.getErrorMessage()
+ " (Kode: " + oe.getErrorCode() + ", ID Permintaan: " + oe.getRequestId() + ")");
} catch (ClientException ce) {
System.out.println("Error klien saat berkomunikasi dengan OSS: " + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Langkah 3: Buat tugas migrasi
Buka halaman Instances. Di bilah navigasi atas, pilih wilayah instans RDS Anda, lalu klik ID instans.
Di panel navigasi kiri, klik Backup and Restoration.
Di bagian atas halaman, klik Migrate OSS Backup Data to RDS.
Pada wizard Import Guide, klik Next dua kali hingga mencapai langkah Import Data.
Jika ini pertama kalinya Anda menggunakan wizard migrasi, klik Authorization dan selesaikan proses otorisasi. Tanpa otorisasi, daftar drop-down OSS Bucket akan tetap kosong.
Konfigurasi parameter berikut, lalu klik OK.
Parameter Deskripsi Database name Nama database tujuan pada instans RDS Anda. Tidak boleh bertabrakan dengan database yang sudah ada atau file database yang tidak terpasang pada instans tersebut. OSS bucket Bucket OSS yang berisi file backup penuh Anda. OSS file Klik ikon kaca pembesar untuk mencari file backup berdasarkan awalan nama file. Hasil menampilkan nama file, ukuran, dan waktu modifikasi terakhir. Cloud migration method Pilih Access Pending (Incremental Backup). Opsi ini menjaga database dalam status restoring sehingga backup inkremental dapat diterapkan ( BackupMode = UPDF,IsOnlineDB = False). Jangan pilih Immediate Access (Full Backup) — opsi ini membuka database segera setelah backup penuh dan tidak menerima backup inkremental (BackupMode = FULL,IsOnlineDB = True).Klik Refresh untuk memantau status tugas. Jika tugas gagal, lihat Pemecahan Masalah.
Langkah 4: Impor file backup log atau diferensial
Setelah backup penuh dipulihkan, terapkan backup inkremental untuk menutup celah data.
Buka halaman Instances, pilih wilayah Anda, lalu klik ID instans.
Di panel navigasi kiri, klik Backup and Restoration, lalu klik tab Cloud Migration Records of Backup Data.
Temukan database tujuan dan klik Upload Incremental Files di kolom Task actions. Pilih file inkremental dan klik OK.
Ulangi langkah ini untuk setiap file backup log, unggah secara berurutan sesuai kronologis.
Pastikan file backup log atau diferensial terakhir berukuran di bawah 500 MB. Hentikan semua penulisan ke database sumber sebelum membuat backup terakhir untuk memastikan konsistensi data.
Langkah 5: Buka database
Setelah semua file backup diimpor, buka database tujuan agar tersedia untuk operasi baca dan tulis.
Buka halaman Instances, pilih wilayah Anda, lalu klik ID instans.
Di panel navigasi kiri, klik Backup and Restoration, lalu klik tab Cloud Migration Records of Backup Data.
Temukan database tujuan dan klik Open Database di kolom Task actions.
Pilih mode pemeriksaan konsistensi dan klik OK.
Mode Perilaku Gunakan saat Asynchronous DBCC Membuka database segera, lalu menjalankan DBCC CHECKDBdi latar belakang. Meminimalkan downtime. (CheckDBMode = AsyncExecuteDBCheck)Aplikasi sensitif terhadap downtime tetapi hasil pemeriksaan konsistensi tidak segera kritis. Synchronous DBCC Menjalankan DBCC CHECKDBsebelum membuka database. Memperpanjang waktu pembukaan. (CheckDBMode = SyncExecuteDBCheck)Hasil pemeriksaan konsistensi diperlukan sebelum database aktif.
Langkah 6: Lihat catatan migrasi
Buka Backup and Restoration > Cloud Migration Records of Backup Data untuk meninjau semua tugas migrasi. Klik View File Details di kolom Task actions untuk melihat status dan detail setiap file backup yang terkait dengan tugas.
Setelah migrasi selesai, ApsaraDB RDS secara otomatis melakukan backup database sesuai kebijakan backup otomatis yang dikonfigurasi untuk instans Anda. Untuk memicu backup segera, jalankan backup manual.
Pemecahan Masalah
Untuk error yang terjadi selama migrasi backup penuh, lihat Pemecahan Masalah dalam topik ini.
Error berikut khusus terjadi pada migrasi backup inkremental.
Database tujuan gagal dibuka
*Apakah edisi SQL Server sumber lebih tinggi daripada edisi RDS tujuan?*
Pesan error: Failed to open database xxx.
Instans SQL Server yang dikelola sendiri menggunakan fitur (seperti kompresi data atau partisi tabel) yang tidak didukung oleh edisi RDS SQL Server tujuan. Misalnya, jika sumber menjalankan Edisi Perusahaan dan tujuan menjalankan Edisi Web, fitur khusus Edisi Perusahaan menyebabkan error ini.
Solusi:
Nonaktifkan fitur yang tidak didukung pada instans yang dikelola sendiri, backup database lagi, lalu coba ulang migrasi.
Beralih ke instans RDS yang menjalankan edisi SQL Server yang sama dengan sumber. Lihat Buat dan gunakan instans ApsaraDB RDS for SQL Server dan Fitur yang didukung oleh berbagai versi dan edisi SQL Server.
Ketidaksesuaian LSN dalam rantai backup
*Apakah backup inkremental diunggah tidak sesuai urutan kronologis?*
Pesan error: The log in this backup set begins at LSN XXX, which is too recent to apply to the database. RESTORE LOG is terminating abnormally.
Nomor urutan log (LSN) dalam file backup inkremental tidak berlanjut dari backup sebelumnya. Hal ini terjadi ketika file inkremental diterapkan ke backup dasar yang salah atau diunggah tidak berurutan.
Solusi: Unggah file backup inkremental secara ketat sesuai urutan kronologis, sesuai urutan pembuatannya.
Error konsistensi ditemukan setelah Asynchronous DBCC
*Apakah DBCC CHECKDB melaporkan error konsistensi pada database tujuan?*
Pesan error: asynchronously DBCC checkdb failed: CHECKDB found 0 allocation errors and 2 consistency errors in table 'XXX' (object ID XXX).
Pemeriksaan konsistensi latar belakang menemukan error pada database tujuan, mengindikasikan adanya korupsi pada data sumber.
Solusi:
Jalankan pernyataan berikut pada database tujuan untuk memperbaiki error (hal ini dapat menyebabkan kehilangan data):
PentingPernyataan ini dapat menyebabkan kehilangan data. Gunakan hanya jika dapat diterima.
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS)Atau, perbaiki database sumber terlebih dahulu, lalu migrasi ulang:
DBCC CHECKDB (DBName, REPAIR_ALLOW_DATA_LOSS)
File backup penuh dipilih saat file inkremental yang diharapkan
*Apakah Anda memilih file backup penuh pada langkah Upload Incremental Files?*
Pesan kesalahan: Set backup (xxx) merupakan backup FULL Database; kami hanya menerima log transaksi atau backup diferensial.
Setelah backup penuh dipulihkan, hanya file backup log atau diferensial yang diterima pada langkah Upload Incremental Files.
Solusi: Pilih file backup log atau diferensial.
Batas jumlah database terlampaui
*Apakah instans RDS telah mencapai jumlah maksimum database?*
Pesan kesalahan: Migrasi database (xxx) gagal karena melebihi batas jumlah database yang diizinkan.
Solusi: Migrasi ke instans RDS lain, atau hapus database yang tidak lagi diperlukan.
Masalah izin pengguna RAM
*Apakah tombol OK tampak redup saat mengonfigurasi tugas migrasi?*
Pengguna RAM kemungkinan tidak memiliki izin yang diperlukan. Verifikasi bahwa izin AliyunOSSFullAccess, AliyunRDSFullAccess, dan kebijakan kustom AliyunRDSImportRole telah diberikan (lihat Prasyarat).
*Apakah pengguna RAM mendapat error no permission saat memberikan izin AliyunRDSImportRole?*
Berikan sementara izin AliyunRAMFullAccess kepada pengguna RAM menggunakan akun Alibaba Cloud. Lihat Gunakan RAM untuk mengelola izin ApsaraDB RDS. Hapus izin ini setelah penyiapan selesai.
Referensi API
| API | Deskripsi |
|---|---|
| CreateMigrateTask | Membuat tugas migrasi yang memulihkan file backup dari OSS ke instans ApsaraDB RDS for SQL Server. |
| CreateOnlineDatabaseTask | Membuka database tujuan setelah semua file backup diimpor. |
| DescribeMigrateTasks | Menampilkan daftar tugas migrasi untuk instans ApsaraDB RDS for SQL Server. |
| DescribeOssDownloads | Mengambil detail file untuk tugas migrasi. |