

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Fase 3: Migrasi
<a name="phase-3-migrate"></a>

Tugas utama migrasi database adalah menyelesaikan migrasi dengan waktu henti minimal. Karena kedua database harus menggunakan bahasa pemrograman dan protokol komunikasi yang sama, Anda mungkin perlu mengonversi kode dan skema untuk sintaks, prosedur, dan fungsi kueri yang serupa. Saat mengonversi skema, pertimbangkan aspek-aspek berikut:
+ Ubah koneksi database yang sesuai untuk mesin baru.
+ Perbaiki peringatan dan kesalahan apa pun dari konversi kode.
+ Ubah pemetaan tabel dan kode yang sesuai untuk skema yang dikonversi.
+ Identifikasi dan refactor fungsionalitas khusus vendor yang digunakan aplikasi Anda.

Anda dapat menggunakan alat migrasi pihak ketiga untuk konversi kode skema, seperti database SAP ASE dan Amazon RDS for SQL Server. Anda mungkin perlu mengonversi beberapa kode secara manual karena non-ANSI SQL tidak didukung di SQL Server.

Setelah Anda mengonversi kode, mengonversi kode aplikasi atau aplikasi Dynamic SQL, lalu lakukan pengujian unit dan fungsional. Untuk informasi selengkapnya, lihat [Menguji Objek Database Bermigrasi (SybaseToSQL](https://learn.microsoft.com/en-us/sql/ssma/sybase/testing-migrated-database-objects-sybasetosql?view=sql-server-ver15)).

## Mengonversi data
<a name="converting-the-data.08113c62-7c5a-5df1-abcf-462e3e9209f4"></a>

Ubah data mentah agar lebih berguna dengan membersihkan, menstandarisasi, memverifikasi, dan menyortirnya. Dalam migrasi database, proses ekstrak, transformasi, dan beban (ETL) digunakan dengan cara berikut:
+ Di dalam database
+ Dengan skrip eksternal
+ Menggunakan alat pihak ketiga

Contoh alat ETL termasuk AWS Glue, Informatica, dan Talend. Untuk migrasi dari SAP ASE ke SQL Server, beberapa alat gratis dapat mengonversi prosedur dan fungsi yang disimpan secara otomatis.

## Memvalidasi objek database
<a name="validating-database-objects"></a>

Memvalidasi database Anda membantu mencegah masalah pada tahap migrasi berikutnya. Setelah konversi kode, validasi skema database Anda dengan membandingkan elemen-elemen berikut antara SAP ASE dan RDS SQL Server:
+ Skema
+ Tabel
+ Tampilan
+ Fungsi
+ Indeks prosedur tersimpan
+ Pemicu
+ Kendala (misalnya, kunci utama, kunci asing, cek, dan default)

Periksa apakah setiap objek bermigrasi dengan benar. Jika Anda menemukan perbedaan, identifikasi alasan kegagalan tersebut. Anda mungkin perlu membuat objek yang hilang secara manual di database target atau mengonversi kode Transact-SQL. Untuk informasi selengkapnya, lihat [Memvalidasi objek database setelah bermigrasi dari SAP ASE ke Amazon RDS for SQL Server atau Microsoft SQL Server](https://aws.amazon.com/blogs/database/validate-database-objects-after-migrating-from-sap-ase-to-amazon-rds-for-sql-server-or-microsoft-sql-server/).

## Migrasi data menggunakan AWS DMS
<a name="migrating-data-using-dms"></a>

Jika Anda memiliki beberapa pengguna database, aplikasi Anda mungkin perlu dimigrasi sesuai jadwal. Bergantung pada ukuran database dan jendela migrasi, migrasi data tersebut memerlukan pengetahuan tentang beban penuh dan beban tambahan. Untuk alasan ini, AWS DMS dapat menghubungkan sumber dan target database untuk mereplikasi isi database sesuai dengan proses berikut:
+ Membuat server replikasi.
+ Buat titik akhir sumber dan target yang menggambarkan koneksi penyimpanan data.
+ Buat satu atau beberapa tugas migrasi untuk memigrasikan data antara penyimpanan data sumber dan target.
+ Replikasi yang sedang berlangsung dari SAP ASE ke SQL Server
+ (Opsional) Selesaikan migrasi data dari SAP ASE ke SQL Server dengan perubahan pengambilan data

Anda mungkin perlu mengoptimalkan AWS DMS untuk menangani tipe data tertentu. Untuk informasi selengkapnya, lihat [Menggunakan database SAP ASE sebagai sumber untuk AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SAP.html).

## Migrasi data offline
<a name="migrating-offline-data"></a>

Anda dapat menggunakannya AWS Storage Gateway untuk mengintegrasikan database SAP ASE Anda dengan Amazon Simple Storage Service (Amazon S3), yang menyediakan penyimpanan yang hemat biaya, terukur, dan aman untuk backup database SAP ASE lokal. Untuk informasi selengkapnya, lihat [Mengintegrasikan database SAP ASE ke Amazon AWS Storage Gateway S3 menggunakan](https://aws.amazon.com/blogs/storage/integrate-an-sap-ase-database-to-amazon-s3-using-aws-storage-gateway/).

## Menggunakan alat pihak ketiga
<a name="using-third-party-tools"></a>

Beberapa aplikasi berfungsi sebagai titik kontak tunggal (SPOC) yang berinteraksi dengan aplikasi lain. Saat bermigrasi ke platform database SQL Server, interkoneksi ini mungkin terpengaruh, dan pemantauan basis data mungkin memerlukan alat asli atau pihak ketiga yang menggunakan protokol komunikasi khusus server. Penting untuk menilai apakah aplikasi dan alat dependen ini sudah mendukung SQL Server atau jika mereka memerlukan modifikasi agar berfungsi dengan baik.

Untuk aplikasi yang dikemas, konsultasikan dengan vendor untuk menentukan apakah mereka mendukung Amazon RDS for SQL Server. Untuk aplikasi kustom, Anda mungkin perlu memodifikasi kode untuk memastikan kompatibilitas dengan database yang dimigrasi.

## Memantau database
<a name="monitoring-the-database"></a>

Terlepas dari jalur migrasi yang Anda pilih, Amazon CloudWatch berperan dalam mengumpulkan metrik, seperti jenis CPU, memori, dan I/O fungsi. Ini juga mampu mengatur ambang metrik dan memulai tindakan saat ambang batas dipicu.

Misalnya, Anda dapat membuat alarm untuk metrik, notifikasi, dan tindakan klaster Amazon RDS untuk mendeteksi dan mematikan instans pembaca yang tidak digunakan atau kurang dimanfaatkan. Menyetel alarm pada metrik dan peristiwa dapat membantu meminimalkan waktu henti dan dampak bisnis. Layanan AWS seperti Amazon S3, [Amazon RDS Performance Insights,](https://aws.amazon.com/rds/performance-insights/) Amazon CloudWatch, dan AWS CloudTrail sudah terintegrasi dengan platform database RDS, dan kami merekomendasikan mereka untuk memantau kinerja.

## Memvalidasi data
<a name="validating-the-data"></a>

Setelah migrasi data dari SAP ASE ke Amazon RDS for SQL Server selesai, validasi data untuk memastikan akurasi dan konsistensi. Gunakan kueri SQL berikut untuk menghasilkan pernyataan metadata untuk setiap tabel dalam database Anda.

### Langkah 1: Buat pernyataan metadata dan daftar kolom
<a name="step-1-generate-metadata-statements-and-column-lists"></a>

```
SELECT dt.schema_name, dt.table_name,
    STRING_AGG(dt.column_name, ',') AS column_name,
    STRING_AGG(dt.cname, ',') AS column_order
FROM (
    SELECT 
        object_name(a.id) AS table_name,
        a.name colname,
        c.name col_type,
        a.isnullable,
        a.name AS cname,
        schema_name(b.uid) AS schema_name,
        CASE 
            WHEN a.isnullable = 1 THEN
                CASE 
                    WHEN c.name LIKE '%char%' 
                        THEN 'coalesce(ltrim(rtrim('+a.name+')),''X'') as '+a.name
                    WHEN (c.name LIKE '%int%' OR c.name = 'numeric') 
                        THEN 'coalesce('+a.name+',0) as '+a.name
                    WHEN c.name IN ('decimal','float','money') 
                        THEN 'coalesce('+a.name+',0.0) as '+a.name
                    WHEN c.name LIKE 'datetime%' 
                        THEN 'coalesce(convert(nvarchar(30),'+a.name+',112),''99991231'') as '+a.name
                    ELSE a.name 
                END
            WHEN c.name LIKE 'datetime%' 
                THEN 'coalesce(convert(nvarchar(30),'+a.name+',112),''99991231'') as '+a.name
            WHEN c.name LIKE '%char%' 
                THEN 'coalesce(ltrim(rtrim('+a.name+')),''X'') as '+a.name
            ELSE a.name
        END AS column_name
    FROM syscolumns a
    INNER JOIN sysobjects b
        ON a.id = b.id 
        AND b.type = 'U'
    INNER JOIN systypes c
        ON a.usertype = c.usertype
        AND a.xusertype = c.xusertype
        AND c.name != 'varbinary'
    INNER JOIN (
        SELECT 
            OBJECT_NAME(ic.OBJECT_ID) AS table_name,
            COL_NAME(ic.OBJECT_ID, ic.column_id) AS column_name
        FROM sys.indexes AS i
        INNER JOIN sys.index_columns AS ic
            ON i.OBJECT_ID = ic.OBJECT_ID
            AND i.index_id = ic.index_id
            AND i.is_primary_key = 1
    ) pk
        ON pk.table_name = object_name(a.id)
        AND pk.column_name = a.name
) dt 
GROUP BY dt.schema_name, dt.table_name;
```

Tabel berikut mencantumkan contoh output:


| 
| 
| **Nama skema** | **Nama tabel** | **Nama kolom** | **Urutan kolom** | 
| --- |--- |--- |--- |
| Orang | Alamat | AlamatSid | AlamatSid | 
| Orang | AddressType | AddressTypeID | AddressTypeID | 
| Orang | BusinessEntity | BusinessEntityID | BusinessEntityID | 
| Orang | BusinessEntityAddress | BusinessEntityID, AlamatID, ID AddressType | BusinessEntityID, AlamatID, ID AddressType | 

### Langkah 2: Buat kueri perbandingan menggunakan hasil metadata dan buat pernyataan SELECT
<a name="step-2-generate-comparison-queries"></a>

```
SELECT <column_name>
FROM [schema_name].[table_name]
ORDER BY <column_order>;
```

Berikut ini adalah contoh dari query yang dihasilkan:

```
SELECT BusinessEntityID, AddressID, AddressTypeID
FROM [Person].[BusinessEntityAddress]
ORDER BY BusinessEntityID, AddressID, AddressTypeID;
```

### Langkah 3: Validasi
<a name="step-3-validation"></a>

1. Jalankan kueri metadata di kedua database.

1. Menghasilkan dan menjalankan `SELECT` pernyataan untuk setiap tabel.

1. Bandingkan hasil antara basis data sumber dan target:
   + Jumlah baris harus cocok.
   + Nilai data harus identik.
   + Periksa masalah konversi tipe data.

### Langkah 4: Validasi jumlah baris
<a name="step-4-validate-row-count"></a>

```
SELECT COUNT(1) AS total_rows
FROM [schema_name].[table_name];
```

### Langkah 5: Perbarui konfigurasi aplikasi Anda untuk menunjuk ke database baru
<a name="step-5-update-your-application-configuration"></a>

1. Perbarui grup keamanan.

1. Ubah string koneksi DNS sesuai kebutuhan untuk terhubung ke database target.

## Menguji migrasi
<a name="testing-the-migration"></a>

Proses pengujian dapat membantu Anda mengidentifikasi masalah yang diabaikan selama pengembangan, seperti kueri yang dikonversi secara tidak benar atau indeks yang hilang. Dan itu mungkin mengungkapkan perlunya penyetelan mesin database atau modifikasi kueri berdasarkan kinerja beban kerja.

Pengujian fungsional, yang mencakup pengujian unit untuk alur kerja aplikasi, membantu memastikan integrasi yang mulus dengan database baru Anda. Pengujian kinerja membantu mengoptimalkan database Anda dengan memverifikasi waktu respons yang dapat diterima dan mengidentifikasi kemacetan.

Meskipun ada metode pengujian manual dan otomatis, kami merekomendasikan metode otomatis karena lebih efisien, terutama untuk siklus pengujian tambahan.