

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

# Menggunakan database Microsoft SQL Server sebagai sumber AWS DMS
<a name="CHAP_Source.SQLServer"></a>

Migrasikan data dari satu atau banyak database Microsoft SQL Server menggunakan. AWS DMS Dengan database SQL Server sebagai sumber, Anda dapat memigrasikan data ke database SQL Server lain, atau ke salah satu database lain AWS DMS yang didukung. 

Untuk informasi tentang versi SQL Server yang AWS DMS mendukung sebagai sumber, lihat[Sumber untuk AWS DMS](CHAP_Introduction.Sources.md).

Basis data sumber SQL Server dapat dipasang pada setiap komputer dalam jaringan Anda. Akun SQL Server dengan hak istimewa akses yang sesuai untuk basis data sumber untuk jenis tugas yang Anda pilih diperlukan untuk digunakan dengan AWS DMS. Untuk informasi selengkapnya, lihat [Izin untuk tugas SQL Server](#CHAP_Source.SQLServer.Permissions).

AWS DMS mendukung migrasi data dari contoh bernama SQL Server. Anda dapat menggunakan notasi berikut dalam nama server ketika Anda membuat titik akhir sumber.

```
IPAddress\InstanceName
```

Sebagai contoh, berikut ini adalah nama server titik akhir sumber yang benar. Di sini, bagian pertama dari nama adalah alamat IP server, dan bagian kedua adalah nama instance SQL Server (dalam contoh ini, SQLTest).

```
10.0.0.25\SQLTest
```

Juga, dapatkan nomor port yang instance bernama SQL Server Anda mendengarkan, dan menggunakannya untuk mengkonfigurasi titik akhir AWS DMS sumber Anda. 

**catatan**  
Port 1433 adalah default untuk SQL Server. Tapi port dinamis yang berubah setiap kali SQL Server dimulai, dan nomor port statis tertentu yang digunakan untuk menyambung ke SQL Server melalui firewall juga sering digunakan. Jadi, Anda ingin mengetahui nomor port sebenarnya dari instance bernama SQL Server saat Anda membuat titik akhir AWS DMS sumber.

Anda dapat menggunakan SSL untuk mengenkripsi sambungan antara titik akhir SQL Server dan instans replikasi. Untuk informasi selengkapnya tentang menggunakan titik akhir SSL dengan SQL Server, lihat [Menggunakan SSL dengan AWS Database Migration Service](CHAP_Security.SSL.md).

Anda dapat menggunakan CDC untuk migrasi berkelanjutan dari database SQL Server. Untuk informasi tentang mengonfigurasi database server SQL sumber Anda untuk CDC, lihat. [Menangkap perubahan data untuk replikasi berkelanjutan dari SQL Server](CHAP_Source.SQLServer.CDC.md)

Untuk detail tambahan tentang bekerja dengan database sumber SQL Server dan AWS DMS, lihat berikut ini.

**Topics**
+ [Keterbatasan dalam menggunakan SQL Server sebagai sumber AWS DMS](#CHAP_Source.SQLServer.Limitations)
+ [Izin untuk tugas SQL Server](#CHAP_Source.SQLServer.Permissions)
+ [Prasyarat untuk menggunakan replikasi berkelanjutan (CDC) dari sumber SQL Server](#CHAP_Source.SQLServer.Prerequisites)
+ [Metode kompresi yang didukung untuk SQL Server](#CHAP_Source.SQLServer.Compression)
+ [Bekerja dengan grup ketersediaan SQL Server AlwaysOn yang dikelola sendiri](#CHAP_Source.SQLServer.AlwaysOn)
+ [Pengaturan titik akhir saat menggunakan SQL Server sebagai sumber AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib)
+ [Jenis sumber data untuk SQL Server](#CHAP_Source.SQLServer.DataTypes)
+ [Menangkap perubahan data untuk replikasi berkelanjutan dari SQL Server](CHAP_Source.SQLServer.CDC.md)

## Keterbatasan dalam menggunakan SQL Server sebagai sumber AWS DMS
<a name="CHAP_Source.SQLServer.Limitations"></a>

Keterbatasan berikut berlaku saat menggunakan basis data SQL Server sebagai sumber untuk AWS DMS:
+ Properti identitas untuk kolom tidak bermigrasi ke kolom basis data target.
+ Titik akhir SQL Server tidak mendukung penggunaan tabel dengan kolom jarang.
+ Autentikasi Windows tidak didukung.
+ Perubahan bidang terhitung di SQL Server tidak direplikasi.
+ Tabel temporal tidak didukung.
+ Penggantian partisi SQL Server tidak didukung.
+ Saat menggunakan utilitas WRITETEXT dan UPDATETEXT, AWS DMS tidak menangkap peristiwa yang diterapkan pada database sumber.
+ Pola data manipulation language (DML) berikut ini tidak didukung. 

  ```
  SELECT * INTO new_table FROM existing_table
  ```
+ Ketika menggunakan SQL Server sebagai sumber, enkripsi tingkat kolom tidak didukung.
+ AWS DMS tidak mendukung audit tingkat server pada SQL Server 2008 atau SQL Server 2008 R2 sebagai sumber. Ini karena masalah yang diketahui dengan SQL Server 2008 dan 2008 R2. Misalnya, menjalankan perintah berikut AWS DMS menyebabkan kegagalan.

  ```
  USE [master]
  GO 
  ALTER SERVER AUDIT [my_audit_test-20140710] WITH (STATE=on)
  GO
  ```
+ Kolom Geometri dan Geografi tidak didukung dalam mode lob penuh saat menggunakan SQL Server sebagai sumber. Sebaliknya, gunakan modus lob terbatas atau atur pengaturan tugas `InlineLobMaxSize` untuk menggunakan mode lob inline.
+ Saat menggunakan database sumber Microsoft SQL Server dalam tugas replikasi, definisi SQL Server Replication Publisher tidak dihapus jika Anda menghapus tugas. Administrator sistem Microsoft SQL Server harus menghapus definisi tersebut dari Microsoft SQL Server.
+ Migrasi data dari terikat skema dan non-schema-bound tampilan didukung untuk tugas yang hanya memuat penuh. 
+ Mengganti nama tabel menggunakan sp\$1rename tidak didukung (misalnya, `sp_rename 'Sales.SalesRegion', 'SalesReg;)`
+ Mengganti nama kolom menggunakan sp\$1rename tidak didukung (misalnya,`sp_rename 'Sales.Sales.Region', 'RegID', 'COLUMN';`)
+ AWS DMS tidak mendukung pemrosesan perubahan untuk mengatur dan menghapus nilai default kolom (menggunakan `ALTER COLUMN SET DEFAULT` klausa dengan `ALTER TABLE` pernyataan).
+ AWS DMS tidak mendukung pemrosesan perubahan untuk mengatur nullabilitas kolom (menggunakan `ALTER COLUMN [SET|DROP] NOT NULL` klausa dengan pernyataan). `ALTER TABLE`
+ Dengan SQL Server 2012 dan SQL Server 2014, saat menggunakan replikasi DMS dengan Availability Groups, basis data distribusi tidak dapat ditempatkan dalam grup ketersediaan. SQL 2016 mendukung penempatan database distribusi ke dalam grup ketersediaan, kecuali untuk database distribusi yang digunakan dalam topologi gabungan, dua arah, atau replikasi. peer-to-peer
+ Untuk tabel yang dipartisi, AWS DMS tidak mendukung pengaturan kompresi data yang berbeda untuk setiap partisi.
+ Saat memasukkan nilai ke jenis data spasial SQL Server (GEOGRAPHY dan GEOMETRY), Anda dapat mengabaikan properti spatial reference system identifier (SRID) atau menentukan angka yang berbeda. Saat mereplikasi tabel dengan tipe data spasial, AWS DMS ganti SRID dengan SRID default (0 untuk GEOMETRI dan 4326 untuk GEOGRAFI).
+ Jika database Anda tidak dikonfigurasi untuk MS-REPLICATION atau MS-CDC, Anda masih dapat menangkap tabel yang tidak memiliki Kunci Utama, tetapi hanya peristiwa DHTML yang ditangkap. INSERT/DELETE Peristiwa UPDATE dan TRUNCATE TABLE diabaikan.
+ Indeks Columnstore tidak didukung.
+ Tabel yang memorinya dioptimalkan (menggunakan In-Memory OLTP) tidak didukung.
+ Ketika mereplikasi tabel dengan kunci primer yang terdiri dari beberapa kolom, memperbarui kolom kunci primer selama beban penuh tidak didukung.
+ Ketahanan tertunda tidak didukung.
+ Pengaturan `readBackupOnly=true` titik akhir (atribut koneksi tambahan) tidak berfungsi pada RDS untuk instance sumber SQL Server karena cara RDS melakukan pencadangan.
+ `EXCLUSIVE_AUTOMATIC_TRUNCATION`tidak berfungsi pada instance sumber Amazon RDS SQL Server karena pengguna RDS tidak memiliki akses untuk menjalankan prosedur tersimpan SQL Server,. `sp_repldone`
+ AWS DMS tidak menangkap perintah memotong.
+ AWS DMS tidak mendukung replikasi dari database dengan percepatan pemulihan database (ADR) diaktifkan.
+ AWS DMS tidak mendukung pengambilan pernyataan bahasa definisi data (DDL) dan bahasa manipulasi data (DML/bahasa manipulasi data) dalam satu transaksi.
+ AWS DMS tidak mendukung replikasi paket aplikasi tingkat data (DACPAC).
+ Pernyataan UPDATE yang melibatkan kunci primer atau indeks unik dan memperbarui beberapa baris data, dapat menyebabkan konflik saat Anda menerapkan perubahan pada database target. Ini mungkin terjadi, misalnya, ketika database target menerapkan pembaruan sebagai pernyataan INSERT dan DELETE, bukan pernyataan UPDATE tunggal. Dengan mode penerapan yang dioptimalkan batch, tabel mungkin diabaikan. Dengan mode penerapan transaksional, operasi UPDATE dapat mengakibatkan pelanggaran kendala. Untuk menghindari masalah ini, muat ulang tabel yang relevan. Atau, cari catatan bermasalah di tabel kontrol Apply Exceptions (`dmslogs.awsdms_apply_exceptions`) dan edit secara manual di database target. Untuk informasi selengkapnya, lihat [Mengubah pengaturan penyetelan pemrosesan](CHAP_Tasks.CustomizingTasks.TaskSettings.ChangeProcessingTuning.md).
+ AWS DMS tidak mendukung replikasi tabel dan skema, di mana nama menyertakan karakter khusus dari set berikut.

  `\\ -- \n \" \b \r ' \t ;` 
+ Masking data tidak didukung. AWS DMS memigrasikan data bertopeng tanpa masking.
+ AWS DMS mereplikasi hingga 32.767 tabel dengan kunci utama dan hingga 1.000 kolom untuk setiap tabel. Ini karena AWS DMS membuat artikel replikasi SQL Server untuk setiap tabel yang direplikasi, dan artikel replikasi SQL Server memiliki keterbatasan ini.
+ Saat menggunakan Change Data Capture (CDC), Anda harus menentukan semua kolom yang membentuk indeks unik sebagai`NOT NULL`. Jika persyaratan ini tidak terpenuhi, kesalahan sistem SQL Server 22838 akan terjadi. 
+ Anda mungkin kehilangan peristiwa jika SQL Server mengarsipkan dari log transaksi aktif ke log cadangan, atau memotongnya dari log transaksi aktif.

Keterbatasan berikut berlaku saat mengakses log transaksi backup:
+ Backup terenkripsi tidak didukung.
+ Backup yang disimpan di URL atau Windows Azure tidak didukung.
+ AWS DMS doe snot mendukung pemrosesan langsung cadangan log transaksi di tingkat file dari folder bersama alternatif.
+ Untuk sumber Cloud SQL Server selain Amazon RDS untuk Microsoft SQL AWS DMS Server, mendukung replikasi berkelanjutan (CDC) dengan log transaksi aktif saja. Anda tidak dapat menggunakan log cadangan dengan CDC. Anda mungkin kehilangan peristiwa jika SQL server mengarsipkannya dari log transaksi aktif ke log cadangan, atau memotongnya dari log transaksi aktif sebelum DMS dapat membacanya. 
+ Untuk sumber Amazon RDS for Microsoft SQL Server AWS DMS , 3.5.2 dan di bawahnya mendukung replikasi berkelanjutan (CDC) dengan log transaksi aktif saja, karena DMS tidak dapat mengakses log cadangan dengan CDC. Anda mungkin kehilangan peristiwa jika RDS untuk SQL Server mengarsipkannya dari log transaksi aktif ke log cadangan, atau memotongnya dari log transaksi aktif sebelum DMS dapat membacanya. Batasan ini tidak berlaku untuk AWS DMS versi 3.5.3 ke atas.
+ AWS DMS tidak mendukung CDC untuk Amazon RDS Proxy untuk SQL Server sebagai sumber.
+ Jika sumber SQL Server menjadi tidak tersedia selama tugas pemuatan penuh, AWS DMS mungkin menandai tugas sebagai selesai setelah beberapa upaya penyambungan ulang, meskipun migrasi data tetap tidak lengkap. Dalam skenario ini, tabel target hanya berisi catatan yang dimigrasi sebelum koneksi hilang, berpotensi menciptakan inkonsistensi data antara sumber dan sistem target. Untuk memastikan kelengkapan data, Anda harus memulai ulang tugas pemuatan penuh sepenuhnya atau memuat ulang tabel tertentu yang terpengaruh oleh gangguan koneksi.

## Izin untuk tugas SQL Server
<a name="CHAP_Source.SQLServer.Permissions"></a>

**Topics**
+ [Izin untuk tugas beban penuh saja](#CHAP_Source.SQLServer.Permissions.FullLoad)
+ [Izin untuk tugas dengan replikasi yang sedang berlangsung](#CHAP_Source.SQLServer.Permissions.Ongoing)

### Izin untuk tugas beban penuh saja
<a name="CHAP_Source.SQLServer.Permissions.FullLoad"></a>

Izin berikut diperlukan untuk melakukan tugas beban penuh saja. Perhatikan bahwa AWS DMS tidak membuat `dms_user` login. Untuk informasi tentang membuat login untuk SQL Server, lihat [Membuat topik pengguna database](https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-database-user?view=sql-server-ver16) dalam *dokumentasi Microsoft*.

```
USE db_name;
                
                CREATE USER dms_user FOR LOGIN dms_user; 
                ALTER ROLE [db_datareader] ADD MEMBER dms_user; 
                GRANT VIEW DATABASE STATE to dms_user;
                GRANT VIEW DEFINITION to dms_user;
                
                USE master;
                
                GRANT VIEW SERVER STATE TO dms_user;
```

### Izin untuk tugas dengan replikasi yang sedang berlangsung
<a name="CHAP_Source.SQLServer.Permissions.Ongoing"></a>

Instans SQL Server yang dikelola sendiri dapat dikonfigurasi untuk replikasi berkelanjutan menggunakan DMS dengan atau tanpa menggunakan peran. `sysadmin` Untuk instance SQL Server, di mana Anda tidak dapat memberikan `sysadmin` peran, pastikan bahwa pengguna DMS memiliki hak istimewa yang dijelaskan sebagai berikut.

**Menyiapkan izin untuk replikasi berkelanjutan dari database SQL Server yang dikelola sendiri**

1. Buat akun SQL Server baru dengan otentikasi kata sandi menggunakan SQL Server Management Studio (SSMS) atau seperti yang dijelaskan sebelumnya dalam[Izin untuk tugas beban penuh saja](#CHAP_Source.SQLServer.Permissions.FullLoad), misalnya,. `self_managed_user`

1. Jalankan `GRANT` perintah berikut: 

   ```
   GRANT VIEW SERVER STATE TO self_managed_user;
   
   USE msdb;
       GRANT SELECT ON msdb.dbo.backupset TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupmediafamily TO self_managed_user;
       GRANT SELECT ON msdb.dbo.backupfile TO self_managed_user;
       
   USE db_name;
       CREATE USER self_managed_user FOR LOGIN self_managed_user;
       ALTER ROLE [db_owner] ADD MEMBER self_managed_user;
       GRANT VIEW DEFINITION to self_managed_user;
   ```

1. Selain izin sebelumnya, pengguna memerlukan salah satu dari yang berikut:
   + Pengguna harus menjadi anggota dari peran server `sysadmin` tetap
   + Konfigurasi dan izin seperti yang dijelaskan dalam [Menyiapkan replikasi yang sedang berlangsung di SQL Server di lingkungan grup ketersediaan: Tanpa peran sysadmin](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.ag) atau[Menyiapkan replikasi yang sedang berlangsung pada SQL Server mandiri: Tanpa peran sysadmin](CHAP_Source.SQLServer.CDC.md#CHAP_SupportScripts.SQLServer.standalone), tergantung pada konfigurasi sumber Anda.

#### Menyiapkan izin untuk replikasi berkelanjutan dari database SQL Server cloud
<a name="CHAP_Source.SQLServer.Permissions.Cloud"></a>

Instance SQL server yang dihosting cloud adalah instance yang berjalan di Amazon RDS untuk Amazon RDS for Microsoft SQL Server, Instans Terkelola Azure SQL, atau instans SQL Server cloud terkelola lainnya yang didukung oleh DMS.

Buat akun SQL Server baru dengan otentikasi kata sandi menggunakan SQL Server Management Studio (SSMS) atau seperti yang dijelaskan sebelumnya dalam[Izin untuk tugas beban penuh saja](#CHAP_Source.SQLServer.Permissions.FullLoad), misalnya,. `rds_user`

Jalankan perintah memberikan hak istimewa berikut.

```
GRANT VIEW SERVER STATE TO rds_user;
```

Untuk sumber Amazon RDS for Microsoft SQL Server, DMS versi 3.5.3 dan di atasnya mendukung pembacaan dari backup log transaksi. Untuk memastikan bahwa DMS dapat mengakses backup log, selain di atas, baik memberikan hak `master` pengguna, atau hak istimewa berikut pada sumber RDS SQL Server:

```
USE msdb;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_download TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_read TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_dms_tlog_list_current_lsn TO rds_user;
    GRANT EXEC ON msdb.dbo.rds_task_status TO rds_user;
    
USE db_name;
    CREATE USER rds_user FOR LOGIN rds_user;
    ALTER ROLE [db_owner] ADD MEMBER rds_user;
    GRANT VIEW DEFINITION to rds_user;
```

Untuk Amazon Azure SQL Managed Instances berikan hak istimewa berikut:

```
GRANT SELECT ON msdb.dbo.backupset TO rds_user;
GRANT SELECT ON msdb.dbo.backupmediafamily TO rds_user;
GRANT SELECT ON msdb.dbo.backupfile TO rds_user;
```

## Prasyarat untuk menggunakan replikasi berkelanjutan (CDC) dari sumber SQL Server
<a name="CHAP_Source.SQLServer.Prerequisites"></a>

Anda dapat menggunakan replikasi berkelanjutan (mengubah pengambilan data, atau CDC) untuk database SQL Server yang dikelola sendiri di tempat atau di Amazon EC2, atau database cloud seperti Amazon RDS atau instans yang dikelola Microsoft Azure SQL.

Persyaratan berikut berlaku secara khusus saat menggunakan replikasi yang sedang berlangsung dengan database SQL Server sebagai sumber untuk: AWS DMS
+ SQL Server harus dikonfigurasi untuk backup penuh, dan Anda harus menjalankan backup sebelum mulai mereplikasi data.
+ Model pemulihan harus diatur menjadi **Bulk logged** atau **Full**.
+ Backup SQL Server untuk beberapa disk tidak didukung. Jika cadangan didefinisikan untuk menulis cadangan database ke beberapa file melalui disk yang berbeda, tidak AWS DMS dapat membaca data dan AWS DMS tugas gagal.
+ Untuk sumber SQL Server yang dikelola sendiri, definisi SQL Server Replication Publisher untuk sumber yang digunakan dalam tugas DMS CDC tidak dihapus ketika Anda menghapus tugas. Administrator sistem SQL Server harus menghapus definisi ini dari SQL Server untuk sumber yang dikelola sendiri.
+ Selama CDC, AWS DMS perlu mencari cadangan log transaksi SQL Server untuk membaca perubahan. AWS DMS tidak mendukung cadangan log transaksi SQL Server yang dibuat menggunakan perangkat lunak cadangan pihak ketiga yang *tidak* dalam format asli. Untuk mendukung backup log transaksi yang *ada* dalam format asli dan dibuat menggunakan perangkat lunak backup pihak ketiga, tambahkan atribut sambungan `use3rdPartyBackupDevice=Y` ke titik akhir sumber.
+ Untuk sumber SQL Server yang dikelola sendiri, perhatikan bahwa SQL Server tidak menangkap perubahan pada tabel yang baru dibuat sampai mereka telah diterbitkan. Ketika tabel ditambahkan ke sumber SQL Server, AWS DMS mengelola pembuatan publikasi. Namun, proses ini mungkin memakan waktu beberapa menit. Operasi yang dibuat untuk tabel yang baru dibuat selama penundaan ini tidak ditangkap atau direplikasi ke target. 
+ AWS DMS mengubah pengambilan data memerlukan pencatatan transaksi penuh untuk dihidupkan di SQL Server. Untuk mengaktifkan login transaksi penuh di SQL Server, aktifkan MS-REPLICATION atau CHANGE DATA CAPTURE (CDC).
+ Entri *tlog* SQL Server tidak akan ditandai untuk digunakan kembali sampai pekerjaan penangkapan MS CDC memproses perubahan tersebut.
+ Operasi CDC tidak didukung pada tabel yang memorinya dioptimalkan. Batasan ini berlaku untuk SQL Server 2014 (ketika fitur pertama kali diperkenalkan) dan lebih tinggi.
+ AWS DMS mengubah pengambilan data memerlukan database distribusi secara default di Amazon EC2 atau On-Prem SQL server sebagai sumber. Jadi, pastikan Anda telah mengaktifkan distributor saat mengonfigurasi replikasi MS untuk tabel dengan kunci utama.

## Metode kompresi yang didukung untuk SQL Server
<a name="CHAP_Source.SQLServer.Compression"></a>

Perhatikan hal berikut tentang dukungan untuk metode kompresi SQL Server di AWS DMS:
+ AWS DMS mendukung Row/Page kompresi di SQL Server versi 2008 dan yang lebih baru.
+ AWS DMS tidak mendukung format penyimpanan Vardecimal.
+ AWS DMS tidak mendukung kolom jarang dan kompresi struktur kolumnar.

## Bekerja dengan grup ketersediaan SQL Server AlwaysOn yang dikelola sendiri
<a name="CHAP_Source.SQLServer.AlwaysOn"></a>

Grup ketersediaan SQL Server Always On menyediakan ketersediaan tinggi dan pemulihan bencana sebagai alternatif tingkat perusahaan untuk pencerminan basis data. 

Di AWS DMS, Anda dapat memigrasikan perubahan dari satu replika grup ketersediaan primer atau sekunder.

### Bekerja dengan replika grup ketersediaan utama
<a name="CHAP_Source.SQLServer.AlwaysOn.Primary"></a>

 

**Untuk menggunakan grup ketersediaan utama sebagai sumber AWS DMS, lakukan hal berikut:**

1. Aktifkan opsi distribusi untuk semua instance SQL Server di replika ketersediaan Anda. Untuk informasi selengkapnya, lihat [Menyiapkan replikasi yang sedang berlangsung pada SQL Server yang dikelola sendiri](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC).

1. Di AWS DMS konsol, buka pengaturan database sumber SQL Server. Untuk **Nama Server**, tentukan nama Layanan Nama Domain (DNS) atau alamat IP yang dikonfigurasi untuk pendengar grup ketersediaan Anda. 

Ketika Anda memulai AWS DMS tugas untuk pertama kalinya, mungkin perlu waktu lebih lama dari biasanya untuk memulai. Kelambatan ini terjadi karena pembuatan artikel tabel sedang digandakan oleh server grup ketersediaan. 

### Bekerja dengan replika grup ketersediaan sekunder
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary"></a>

**Untuk menggunakan grup ketersediaan sekunder sebagai sumber AWS DMS, lakukan hal berikut:**

1. Gunakan kredensil yang sama untuk menghubungkan ke replika individual seperti yang digunakan oleh pengguna titik akhir AWS DMS sumber.

1. Pastikan instans AWS DMS replikasi Anda dapat menyelesaikan nama DNS untuk semua replika yang ada, dan menghubungkannya. Anda dapat menggunakan query SQL berikut untuk mendapatkan nama DNS untuk semua replika Anda.

   ```
   select ar.replica_server_name, ar.endpoint_url from sys.availability_replicas ar
   JOIN sys.availability_databases_cluster adc
   ON adc.group_id = ar.group_id AND adc.database_name = '<source_database_name>';
   ```

1. **Saat Anda membuat titik akhir sumber, tentukan nama DNS pendengar grup ketersediaan untuk **nama Server titik akhir atau untuk alamat Server** rahasia titik akhir.** Untuk informasi selengkapnya tentang pendengar grup ketersediaan, lihat [Apa itu pendengar grup ketersediaan?](https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/availability-group-listener-overview?view=sql-server-ver15) dalam dokumentasi SQL Server.

   Anda dapat menggunakan server DNS publik atau server DNS lokal untuk menyelesaikan pemroses grup ketersediaan, replika utama, dan replika sekunder. Untuk menggunakan server DNS lokal, konfigurasikan Resolver Amazon Route 53. Untuk informasi selengkapnya, lihat [Menggunakan server nama on-premise Anda sendiri](CHAP_BestPractices.md#CHAP_BestPractices.Rte53DNSResolver).

1. Tambahkan atribut koneksi tambahan berikut ke titik akhir sumber Anda.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Source.SQLServer.html)

1. Aktifkan opsi distribusi pada semua replika di grup ketersediaan Anda. Tambahkan semua node ke daftar distributor. Untuk informasi selengkapnya, lihat [Mengatur distribusi](CHAP_Source.SQLServer.CDC.md#CHAP_Source.SQLServer.CDC.MSCDC.Setup).

1. Jalankan kueri berikut pada replika baca-tulis utama untuk mengaktifkan publikasi database Anda. Anda menjalankan query ini hanya sekali untuk database Anda. 

   ```
   sp_replicationdboption @dbname = N'<source DB name>', @optname = N'publish', @value = N'true';
   ```



#### Batasan
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.limitations"></a>

Berikut ini adalah batasan untuk bekerja dengan replika grup ketersediaan sekunder:
+ AWS DMS tidak mendukung Safeguard saat menggunakan replika grup ketersediaan hanya-baca sebagai sumber. Untuk informasi selengkapnya, lihat [Pengaturan titik akhir saat menggunakan SQL Server sebagai sumber AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib).
+ AWS DMS tidak mendukung atribut koneksi `setUpMsCdcForTables` tambahan saat menggunakan replika grup ketersediaan hanya-baca sebagai sumber. Untuk informasi selengkapnya, lihat [Pengaturan titik akhir saat menggunakan SQL Server sebagai sumber AWS DMS](#CHAP_Source.SQLServer.ConnectionAttrib).
+ AWS DMS dapat menggunakan replika grup ketersediaan sekunder yang dikelola sendiri sebagai basis data sumber untuk replikasi berkelanjutan (ubah pengambilan data, atau CDC) mulai dari versi 3.4.7. Replika baca multi-AZ Cloud SQL Server tidak didukung. Jika Anda menggunakan versi sebelumnya AWS DMS, pastikan Anda menggunakan replika grup ketersediaan utama sebagai basis data sumber untuk CDC.

#### Failover ke node lain
<a name="CHAP_Source.SQLServer.AlwaysOn.Secondary.failover"></a>

Jika Anda menyetel atribut koneksi `ApplicationIntent` tambahan untuk titik akhir Anda`ReadOnly`, AWS DMS tugas Anda akan tersambung ke node hanya-baca dengan prioritas perutean hanya-baca tertinggi. Kemudian gagal ke node hanya-baca lainnya di grup ketersediaan Anda ketika node hanya-baca prioritas tertinggi tidak tersedia. Jika Anda tidak mengatur`ApplicationIntent`, AWS DMS tugas Anda hanya terhubung ke node utama (baca/tulis) di grup ketersediaan Anda.

## Pengaturan titik akhir saat menggunakan SQL Server sebagai sumber AWS DMS
<a name="CHAP_Source.SQLServer.ConnectionAttrib"></a>

Anda dapat menggunakan pengaturan endpoint untuk mengkonfigurasi database sumber SQL Server Anda mirip dengan menggunakan atribut koneksi tambahan. Anda menentukan pengaturan saat Anda membuat titik akhir sumber menggunakan AWS DMS konsol, atau dengan menggunakan `create-endpoint` perintah di [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/dms/index.html), dengan sintaks `--microsoft-sql-server-settings '{"EndpointSetting": "value", ...}'` JSON.

Tabel berikut menunjukkan pengaturan endpoint yang dapat Anda gunakan dengan SQL Server sebagai sumber.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/dms/latest/userguide/CHAP_Source.SQLServer.html)

## Jenis sumber data untuk SQL Server
<a name="CHAP_Source.SQLServer.DataTypes"></a>

Migrasi data yang menggunakan SQL Server sebagai sumber untuk AWS DMS mendukung sebagian besar tipe data SQL Server. Tabel berikut menunjukkan tipe data sumber SQL Server yang didukung saat menggunakan AWS DMS dan pemetaan default dari tipe AWS DMS data.

Untuk informasi tentang cara melihat jenis data yang dipetakan dalam target, lihat bagian titik akhir target yang Anda gunakan.

Untuk informasi tambahan tentang tipe AWS DMS data, lihat[Tipe data untuk AWS Database Migration Service](CHAP_Reference.DataTypes.md).


|  Jenis data SQL Server  |  AWS DMS tipe data  | 
| --- | --- | 
|  BIGINT  |  INT8  | 
|  BIT  |  BOOLEAN  | 
|  DECIMAL  |  NUMERIC  | 
|  INT  |  INT4  | 
|  MONEY  |  NUMERIC  | 
|  NUMERIC (p,s)  |  NUMERIC   | 
|  SMALLINT  |  INT2  | 
|  SMALLMONEY  |  NUMERIC  | 
|  TINYINT  |  UINT1  | 
|  REAL  |  REAL4  | 
|  FLOAT  |  REAL8  | 
|  DATETIME  |  DATETIME  | 
|  DATETIME2 (SQL Server 2008 dan lebih tinggi)  |  DATETIME  | 
|  SMALLDATETIME  |  DATETIME  | 
|  DATE  |  DATE  | 
|  TIME  |  TIME  | 
|  DATETIMEOFFSET  |  WSTRING  | 
|  CHAR  |  STRING  | 
|  VARCHAR  |  STRING  | 
|  VARCHAR (max)  |  CLOB TEXT Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan tipe data CLOB untuk tugas tertentu. Untuk tabel SQL Server, AWS DMS memperbarui kolom LOB di target bahkan untuk pernyataan UPDATE yang tidak mengubah nilai kolom LOB di SQL Server. Selama CDC, AWS DMS mendukung tipe data CLOB hanya dalam tabel yang menyertakan kunci utama.  | 
|  NCHAR  |  WSTRING  | 
|  NVARCHAR (panjang)  |  WSTRING  | 
|  NVARCHAR (maks)  |  NCLOB NTEXT Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan SupportLobs untuk tugas tertentu. Untuk informasi selengkapnya tentang mengaktifkan dukungan Lob, lihat. [Mengatur dukungan LOB untuk database sumber dalam suatu tugas AWS DMS](CHAP_Tasks.LOBSupport.md)  Untuk tabel SQL Server, AWS DMS memperbarui kolom LOB di target bahkan untuk pernyataan UPDATE yang tidak mengubah nilai kolom LOB di SQL Server. Selama CDC, AWS DMS mendukung tipe data CLOB hanya dalam tabel yang menyertakan kunci utama.  | 
|  BINARY  |  BYTES  | 
|  VARBINARY  |  BYTES  | 
|  VARBINARY (max)  |  BLOB CITRA Untuk tabel SQL Server, AWS DMS memperbarui kolom LOB di target bahkan untuk pernyataan UPDATE yang tidak mengubah nilai kolom LOB di SQL Server. Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan tipe data BLOB untuk tugas tertentu. AWS DMS mendukung tipe data BLOB hanya dalam tabel yang menyertakan kunci utama.  | 
|  TIMESTAMP  |  BYTES  | 
|  UNIQUEIDENTIFIER  |  STRING  | 
|  HIERARCHYID   |  Gunakan HIERARCHYID saat mereplikasi ke titik akhir target SQL Server. Gunakan WSTRING (250) ketika mereplikasi ke semua titik akhir target lainnya.  | 
|  XML  |  NCLOB Untuk tabel SQL Server, AWS DMS memperbarui kolom LOB di target bahkan untuk pernyataan UPDATE yang tidak mengubah nilai kolom LOB di SQL Server. Untuk menggunakan tipe data ini AWS DMS, Anda harus mengaktifkan penggunaan tipe data NCLOB untuk tugas tertentu. Selama CDC, AWS DMS mendukung tipe data NCLOB hanya dalam tabel yang menyertakan kunci utama.  | 
|  GEOMETRY  |  Gunakan GEOMETRY ketika mereplikasi ke titik akhir target yang mendukung jenis data ini. Gunakan CLOB ketika mereplikasi ke titik akhir target yang tidak mendukung jenis data ini.  | 
|  GEOGRAPHY  |  Gunakan GEOGRAPHY ketika mereplikasi ke titik akhir target yang mendukung jenis data ini. Gunakan CLOB ketika mereplikasi ke titik akhir target yang tidak mendukung jenis data ini.  | 

AWS DMS tidak mendukung tabel yang menyertakan bidang dengan tipe data berikut. 
+ CURSOR
+ SQL\$1VARIANT
+ TABLE

**catatan**  
Jenis data yang ditetapkan pengguna didukung sesuai dengan jenis dasar mereka. Misalnya, jenis data yang ditetapkan pengguna berdasarkan DATETIME diperlakukan sebagai jenis data DATETIME.

# Menangkap perubahan data untuk replikasi berkelanjutan dari SQL Server
<a name="CHAP_Source.SQLServer.CDC"></a>

Topik ini menjelaskan cara mengatur replikasi CDC pada sumber SQL Server.

**Topics**
+ [Menangkap perubahan data untuk SQL Server yang dikelola sendiri di tempat atau di Amazon EC2](#CHAP_Source.SQLServer.CDC.Selfmanaged)
+ [Menyiapkan replikasi yang sedang berlangsung pada instance cloud SQL Server DB](#CHAP_Source.SQLServer.Configuration)

## Menangkap perubahan data untuk SQL Server yang dikelola sendiri di tempat atau di Amazon EC2
<a name="CHAP_Source.SQLServer.CDC.Selfmanaged"></a>

Untuk menangkap perubahan dari database Microsoft SQL Server sumber, pastikan database dikonfigurasi untuk backup penuh. Konfigurasikan basis data dalam modus pemulihan penuh atau mode bulk-logged.

Untuk sumber SQL Server yang dikelola sendiri, AWS DMS gunakan yang berikut ini:

**MS-Replication**  
Untuk menangkap perubahan untuk tabel dengan kunci primer. Anda dapat mengonfigurasi ini secara otomatis dengan memberikan hak istimewa sysadmin kepada pengguna AWS DMS endpoint pada instance SQL Server sumber. Atau Anda dapat mengikuti langkah-langkah di bagian ini untuk menyiapkan sumber dan menggunakan pengguna yang tidak memiliki hak sysadmin untuk titik akhir. AWS DMS 

**MS-CDC**  
Untuk menangkap perubahan untuk tabel tanpa kunci primer. Aktifkan MS-CDC pada tingkat basis data dan untuk semua tabel secara masing-masing.

Saat menyiapkan basis data SQL Server untuk replikasi yang sedang berlangsung (CDC), Anda dapat melakukan salah satu dari berikut ini.
+ Atur replikasi yang sedang berlangsung menggunakan peran sysadmin.
+ Atur replikasi yang sedang berlangsung untuk tidak menggunakan peran sysadmin.

**catatan**  
Anda dapat menggunakan skrip berikut untuk menemukan semua tabel tanpa kunci utama atau unik:  

```
USE [DBname]
SELECT SCHEMA_NAME(schema_id) AS schema_name, name AS table_name
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, 'TableHasPrimaryKey') = 0
        AND  OBJECTPROPERTY(object_id, 'TableHasUniqueCnst') = 0
ORDER BY schema_name, table_name;
```

### Menyiapkan replikasi yang sedang berlangsung pada SQL Server yang dikelola sendiri
<a name="CHAP_Source.SQLServer.CDC.MSCDC"></a>

Bagian ini berisi informasi tentang pengaturan replikasi yang sedang berlangsung pada server SQL yang dikelola sendiri dengan atau tanpa menggunakan peran sysadmin.

**Topics**
+ [Menyiapkan replikasi yang sedang berlangsung pada SQL Server yang dikelola sendiri: Menggunakan peran sysadmin](#CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin)
+ [Menyiapkan replikasi yang sedang berlangsung pada SQL Server mandiri: Tanpa peran sysadmin](#CHAP_SupportScripts.SQLServer.standalone)
+ [Menyiapkan replikasi yang sedang berlangsung di SQL Server di lingkungan grup ketersediaan: Tanpa peran sysadmin](#CHAP_SupportScripts.SQLServer.ag)

#### Menyiapkan replikasi yang sedang berlangsung pada SQL Server yang dikelola sendiri: Menggunakan peran sysadmin
<a name="CHAP_Source.SQLServer.CDC.MSCDC.Sysadmin"></a>

AWS DMS replikasi berkelanjutan untuk SQL Server menggunakan replikasi SQL Server asli untuk tabel dengan kunci utama, dan mengubah pengambilan data (CDC) untuk tabel tanpa kunci utama.

Sebelum menyiapkan replikasi yang sedang berlangsung, lihat [Prasyarat untuk menggunakan replikasi berkelanjutan (CDC) dari sumber SQL Server](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites). 

Untuk tabel dengan kunci utama, umumnya AWS DMS dapat mengkonfigurasi artefak yang diperlukan pada sumber. Namun, untuk instans sumber SQL Server yang dikelola sendiri, pastikan untuk terlebih dahulu mengonfigurasi distribusi SQL Server secara manual. Setelah Anda melakukannya, pengguna AWS DMS sumber dengan izin sysadmin dapat secara otomatis membuat publikasi untuk tabel dengan kunci utama.

Untuk memeriksa apakah distribusi sudah dikonfigurasi, jalankan perintah berikut.

```
sp_get_distributor
```

Jika hasilnya `NULL` untuk distribusi kolom, maka distribusi tidak dikonfigurasi. Anda dapat menggunakan prosedur berikut untuk mengatur distribusi.<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup"></a>

**Mengatur distribusi**

1. Sambungkan ke basis data sumber SQL Server Anda menggunakan alat SQL Server Management Studio (SSMS).

1. Buka menu konteks (klik kanan) untuk folder **Replikasi**, dan pilih **Konfigurasi** Distribusi. Wizard Konfigurasi Distribusi muncul. 

1. Ikuti wizard untuk memasukkan nilai default dan membuat distribusi.<a name="CHAP_Source.SQLServer.CDC.MSCDC.Setup.CDC"></a>

**Untuk mengatur CDC**

AWS DMS versi 3.4.7 dan yang lebih besar dapat mengatur MS CDC untuk database Anda dan semua tabel Anda secara otomatis jika Anda tidak menggunakan replika hanya-baca. Untuk menggunakan fitur ini, atur `SetUpMsCdcForTables` ECA ke true. Untuk informasi tentang ECAs, lihat[Pengaturan titik akhir](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.ConnectionAttrib).

Untuk versi yang AWS DMS lebih awal dari 3.4.7, atau untuk replika hanya-baca sebagai sumber, lakukan langkah-langkah berikut:

1. Untuk tabel tanpa kunci primer, atur MS-CDC untuk basis data. Untuk melakukannya, gunakan akun yang memiliki peran sysadmin, dan jalankan perintah berikut.

   ```
   use [DBname]
   EXEC sys.sp_cdc_enable_db
   ```

1. Selanjutnya, atur MS-CDC untuk setiap tabel sumber. Untuk setiap tabel dengan kunci unik tetapi tanpa kunci primer, jalankan kueri berikut untuk mengatur MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

1. Untuk setiap tabel tanpa bukti kunci primer atau tanpa kunci unik, jalankan kueri berikut untuk mengatur MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

Untuk informasi lebih lanjut tentang pengaturan MS-CDC untuk tabel tertentu, lihat [Dokumentasi SQL Server](https://msdn.microsoft.com/en-us/library/cc627369.aspx). 

#### Menyiapkan replikasi yang sedang berlangsung pada SQL Server mandiri: Tanpa peran sysadmin
<a name="CHAP_SupportScripts.SQLServer.standalone"></a>

Bagian ini menjelaskan cara mengatur replikasi berkelanjutan untuk sumber database SQL Server mandiri yang tidak memerlukan akun pengguna untuk memiliki hak istimewa sysadmin.

**catatan**  
Setelah menjalankan langkah-langkah di bagian ini, pengguna DMS non-sysadmin akan memiliki izin untuk melakukan hal berikut:  
Baca perubahan dari file log transaksi online
Akses disk untuk membaca perubahan dari file cadangan log transaksional
Menambahkan atau mengubah publikasi yang digunakan DMS
Tambahkan artikel ke publikasi

1. Siapkan Microsoft SQL Server untuk Replikasi seperti yang dijelaskan dalam. [Menangkap perubahan data untuk replikasi berkelanjutan dari SQL Server](#CHAP_Source.SQLServer.CDC)

1. Aktifkan MS-REPLICATION pada database sumber. Ini dapat dilakukan secara manual atau dengan menjalankan tugas sekali sebagai pengguna sysadmin.

1. Buat `awsdms` skema pada database sumber menggunakan skrip berikut:

   ```
   use master
   go
   create schema awsdms
   go
   
   
   -- Create the table valued function [awsdms].[split_partition_list] on the Master database, as follows:
   USE [master]
   GO
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   go
   
   if (object_id('[awsdms].[split_partition_list]','TF')) is not null
   
   drop function [awsdms].[split_partition_list];
   
   go
   
   create function [awsdms].[split_partition_list]
   
   (
   
   @plist varchar(8000), --A delimited list of partitions
   
   @dlm nvarchar(1) --Delimiting character
   
   )
   
   returns @partitionsTable table --Table holding the BIGINT values of the string fragments
   
   (
   
   pid bigint primary key
   
   )   
   
   as
   
   begin
   
   declare @partition_id bigint;
   
   declare @dlm_pos integer;
   
   declare @dlm_len integer;
   
   set @dlm_len = len(@dlm);
   
   while (charindex(@dlm,@plist)>0)
   
   begin
   
   set @dlm_pos = charindex(@dlm,@plist);
   
   set @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
   
   insert into @partitionsTable (pid) values (@partition_id)
   
   set @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
   
   end
   
   set @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
   
   insert into @partitionsTable (pid) values ( @partition_id );
   
   return
   
   end
   
   GO
   ```

1. Buat `[awsdms].[rtm_dump_dblog]` prosedur pada database Master menggunakan skrip berikut:

   ```
   use [MASTER]
   
   go
   
   if (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null drop procedure [awsdms].[rtm_dump_dblog];
   go
   
   
   set ansi_nulls on
   go
   
   set quoted_identifier on
   GO
   
   
   
   CREATE procedure [awsdms].[rtm_dump_dblog]
   
   (
   
   @start_lsn varchar(32),
   
   @seqno integer,
   
   @filename varchar(260),
   
   @partition_list varchar(8000), -- A comma delimited list: P1,P2,... Pn
   
   @programmed_filtering integer,
   
   @minPartition bigint,
   
   @maxPartition bigint
   
   )
   
   as begin
   
   declare @start_lsn_cmp varchar(32); -- Stands against the GT comparator
   
   SET NOCOUNT ON -- – Disable "rows affected display"
   
   set @start_lsn_cmp = @start_lsn;
   
   if (@start_lsn_cmp) is null
   
   set @start_lsn_cmp = '00000000:00000000:0000';
   
   if (@partition_list is null)
   
   begin
   
   RAISERROR ('Null partition list waspassed',16,1);
   
   return
   
   end
   
   if (@start_lsn) is not null
   
   set @start_lsn = '0x'+@start_lsn;
   
   if (@programmed_filtering=0)
   
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1]
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   else
   
   
   SELECT
   
   [Current LSN],
   
   [operation],
   
   [Context],
   
   [Transaction ID],
   
   [Transaction Name],
   
   [Begin Time],
   
   [End Time],
   
   [Flag Bits],
   
   [PartitionID],
   
   [Page ID],
   
   [Slot ID],
   
   [RowLog Contents 0],
   
   [Log Record],
   
   [RowLog Contents 1] -- After Image
   
   FROM
   
   fn_dump_dblog (
   
   @start_lsn, NULL, N'DISK', @seqno, @filename,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default,
   
   default, default, default, default, default, default, default)
   
   where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS
   
   and
   
   (
   
   ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
   
   or
   
   ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
   
   and
   
   ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1))))
   
   and ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
   
   )
   
   or
   
   ([operation] = 'LOP_HOBT_DDL')
   
   )
   
   
   
   SET NOCOUNT OFF -- Re-enable "rows affected display"
   
   end
   
   GO
   ```

1. Buat sertifikat pada database Master menggunakan skrip berikut:

   ```
   Use [master]
   Go
   
   CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert] ENCRYPTION BY PASSWORD = N'@5trongpassword'
   
   WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions';
   ```

1. Buat login dari sertifikat menggunakan skrip berikut: 

   ```
   Use [master]
   Go
   
   CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE [awsdms_rtm_dump_dblog_cert];
   ```

1. Tambahkan login ke peran server sysadmin menggunakan skrip berikut:

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
   ```

1. Tambahkan tanda tangan ke [master]. [awsdms]. [rtm\$1dump\$1dblog] menggunakan sertifikat, menggunakan skrip berikut: 

   ```
   Use [master]
   GO
   ADD SIGNATURE
   TO [master].[awsdms].[rtm_dump_dblog] BY CERTIFICATE [awsdms_rtm_dump_dblog_cert] WITH PASSWORD = '@5trongpassword';
   ```
**catatan**  
Jika Anda membuat ulang prosedur yang disimpan, Anda perlu menambahkan tanda tangan lagi.

1. Buat [awsdms]. [rtm\$1position\$11st\$1timestamp] pada database Master menggunakan skrip berikut:

   ```
   use [master]
       if object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
       DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
       go
       create procedure [awsdms].[rtm_position_1st_timestamp]
       (
       @dbname                sysname,      -- Database name
       @seqno                 integer,      -- Backup set sequence/position number within file
       @filename              varchar(260), -- The backup filename
       @1stTimeStamp          varchar(40)   -- The timestamp to position by
       ) 
       as begin
   
       SET NOCOUNT ON       -- Disable "rows affected display"
   
       declare @firstMatching table
       (
       cLsn varchar(32),
       bTim datetime
       )
   
       declare @sql nvarchar(4000)
       declare @nl                       char(2)
       declare @tb                       char(2)
       declare @fnameVar                 nvarchar(254) = 'NULL'
   
       set @nl  = char(10); -- New line
       set @tb  = char(9)   -- Tab separator
   
       if (@filename is not null)
       set @fnameVar = ''''+@filename +''''
   
       set @sql='use ['+@dbname+'];'+@nl+
       'select top 1 [Current LSN],[Begin Time]'+@nl+
       'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @fnameVar+','+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default,'+@nl+
       @tb+'default, default, default, default, default, default, default)'+@nl+
       'where operation=''LOP_BEGIN_XACT''' +@nl+
       'and [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
   
       --print @sql
       delete from  @firstMatching 
       insert into @firstMatching  exec sp_executesql @sql    -- Get them all
   
       select top 1 cLsn as [matching LSN],convert(varchar,bTim,121) as [matching Timestamp] from @firstMatching;
   
       SET NOCOUNT OFF      -- Re-enable "rows affected display"
   
       end
       GO
   ```

1. Buat sertifikat pada database Master menggunakan skrip berikut:

   ```
   Use [master]
   Go
   CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
   ENCRYPTION BY PASSWORD = '@5trongpassword'
   WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
   ```

1. Buat login dari sertifikat menggunakan skrip berikut:

   ```
   Use [master]
   Go
   CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert];
   ```

1. Tambahkan login ke peran sysadmin menggunakan skrip berikut:

   ```
   ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
   ```

1. Tambahkan tanda tangan ke [master]. [awsdms]. [rtm\$1position\$11st\$1timestamp] menggunakan sertifikat, menggunakan skrip berikut:

   ```
   Use [master]
       GO
       ADD SIGNATURE
       TO [master].[awsdms].[rtm_position_1st_timestamp]
       BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
       WITH PASSWORD = '@5trongpassword';
   ```

1. Berikan pengguna DMS mengeksekusi akses ke prosedur tersimpan baru menggunakan skrip berikut:

   ```
   use master
   go
   GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dms_user;
   ```

1. Buat pengguna dengan izin dan peran berikut di masing-masing database berikut:
**catatan**  
Anda harus membuat akun pengguna dmsnosysadmin dengan SID yang sama pada setiap replika. Kueri SQL berikut dapat membantu memverifikasi nilai SID akun dmsnosysadmin pada setiap replika. Untuk informasi selengkapnya tentang membuat pengguna, lihat [MEMBUAT PENGGUNA (Transact-SQL) di dokumentasi server](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql) [Microsoft](https://learn.microsoft.com/en-us/sql/) SQL. [Untuk informasi selengkapnya tentang membuat akun pengguna SQL untuk database Azure SQL, lihat Replikasi geo aktif.](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview)

   ```
   use master
   go
   grant select on sys.fn_dblog to [DMS_user]
   grant view any definition to [DMS_user]
   grant view server state to [DMS_user]--(should be granted to the login).
   grant execute on sp_repldone to [DMS_user]
   grant execute on sp_replincrementlsn to [DMS_user]
   grant execute on sp_addpublication to [DMS_user]
   grant execute on sp_addarticle to [DMS_user]
   grant execute on sp_articlefilter to [DMS_user]
   grant select on [awsdms].[split_partition_list] to [DMS_user]
   grant execute on [awsdms].[rtm_dump_dblog] to [DMS_user]
   ```

   ```
   use msdb
   go
   grant select on msdb.dbo.backupset to self_managed_user
   grant select on msdb.dbo.backupmediafamily to self_managed_user
   grant select on msdb.dbo.backupfile to self_managed_user
   ```

   Jalankan skrip berikut pada database sumber:

   ```
   use Source_DB
       Go
       EXEC sp_addrolemember N'db_owner', N'DMS_user'
   ```

1. Terakhir, tambahkan Extra Connection Attribute (ECA) ke titik akhir SQL Server sumber:

   ```
   enableNonSysadminWrapper=true;
   ```

#### Menyiapkan replikasi yang sedang berlangsung di SQL Server di lingkungan grup ketersediaan: Tanpa peran sysadmin
<a name="CHAP_SupportScripts.SQLServer.ag"></a>

Bagian ini menjelaskan cara mengatur replikasi berkelanjutan untuk sumber database SQL Server di lingkungan grup ketersediaan yang tidak memerlukan akun pengguna untuk memiliki hak istimewa sysadmin.

**catatan**  
Setelah menjalankan langkah-langkah di bagian ini, pengguna DMS non-sysadmin akan memiliki izin untuk melakukan hal berikut:  
Baca perubahan dari file log transaksi online
Akses disk untuk membaca perubahan dari file cadangan log transaksional
Menambahkan atau mengubah publikasi yang digunakan DMS
Tambahkan artikel ke publikasi

**Untuk mengatur replikasi yang sedang berlangsung tanpa menggunakan pengguna sysadmin di lingkungan Grup Ketersediaan**

1. Siapkan Microsoft SQL Server untuk Replikasi seperti yang dijelaskan dalam. [Menangkap perubahan data untuk replikasi berkelanjutan dari SQL Server](#CHAP_Source.SQLServer.CDC)

1. Aktifkan MS-REPLICATION pada database sumber. Ini dapat dilakukan secara manual atau dengan menjalankan tugas sekali menggunakan pengguna sysadmin.
**catatan**  
Anda harus mengkonfigurasi distributor MS-REPLICATION sebagai lokal atau dengan cara yang memungkinkan akses ke pengguna non-sysadmin melalui server tertaut terkait.

1. Jika opsi **Exclusive use sp\$1repldone dalam satu titik akhir tugas** diaktifkan, hentikan pekerjaan MS-REPLICATION Log Reader.

1. Lakukan langkah-langkah berikut pada setiap replika:

   1. Buat skema `[awsdms]` [awsdms] di database master:

      ```
      CREATE SCHEMA [awsdms]
      ```

   1. Buat fungsi `[awsdms].[split_partition_list]` tabel bernilai pada database Master:

      ```
      USE [master]
      GO
      
      SET ansi_nulls on
      GO
        
      SET quoted_identifier on
      GO
      
      IF (object_id('[awsdms].[split_partition_list]','TF')) is not null
        DROP FUNCTION [awsdms].[split_partition_list];
      GO
      
      CREATE FUNCTION [awsdms].[split_partition_list] 
      ( 
        @plist varchar(8000),    --A delimited list of partitions    
        @dlm nvarchar(1)    --Delimiting character
      ) 
      RETURNS @partitionsTable table --Table holding the BIGINT values of the string fragments
      (
        pid bigint primary key
      ) 
      AS 
      BEGIN
        DECLARE @partition_id bigint;
        DECLARE @dlm_pos integer;
        DECLARE @dlm_len integer;  
        SET @dlm_len = len(@dlm);
        WHILE (charindex(@dlm,@plist)>0)
        BEGIN 
          SET @dlm_pos = charindex(@dlm,@plist);
          SET @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint);
          INSERT into @partitionsTable (pid) values (@partition_id)
          SET @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist));
        END 
        SET @partition_id = cast (ltrim(rtrim(@plist)) as bigint);
        INSERT into @partitionsTable (pid) values (  @partition_id  );
        RETURN
      END
      GO
      ```

   1. Buat `[awsdms].[rtm_dump_dblog]` prosedur pada database Master:

      ```
      USE [MASTER] 
      GO
      
      IF (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null
        DROP PROCEDURE [awsdms].[rtm_dump_dblog]; 
      GO
      
      SET ansi_nulls on
      GO 
      
      SET quoted_identifier on 
      GO
                                          
      CREATE PROCEDURE [awsdms].[rtm_dump_dblog]
      (
        @start_lsn            varchar(32),
        @seqno                integer,
        @filename             varchar(260),
        @partition_list       varchar(8000), -- A comma delimited list: P1,P2,... Pn
        @programmed_filtering integer,
        @minPartition         bigint,
        @maxPartition         bigint
      ) 
      AS 
      BEGIN
      
        DECLARE @start_lsn_cmp varchar(32); -- Stands against the GT comparator
      
        SET NOCOUNT ON  -- Disable "rows affected display"
      
        SET @start_lsn_cmp = @start_lsn;
        IF (@start_lsn_cmp) is null
          SET @start_lsn_cmp = '00000000:00000000:0000';
      
        IF (@partition_list is null)
          BEGIN
            RAISERROR ('Null partition list was passed',16,1);
            return
            --set @partition_list = '0,';    -- A dummy which is never matched
          END
      
        IF (@start_lsn) is not null
          SET @start_lsn = '0x'+@start_lsn;
      
        IF (@programmed_filtering=0)
          SELECT
            [Current LSN],
            [operation],
            [Context],
            [Transaction ID],
            [Transaction Name],
            [Begin Time],
            [End Time],
            [Flag Bits],
            [PartitionID],
            [Page ID],
            [Slot ID],
            [RowLog Contents 0],
            [Log Record],
            [RowLog Contents 1] -- After Image
          FROM
            fn_dump_dblog (
              @start_lsn, NULL, N'DISK', @seqno, @filename,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default,
              default, default, default, default, default, default, default)
          WHERE 
            [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND       
                [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,','))
              )
            OR
            ([operation] = 'LOP_HOBT_DDL')
          )
          ELSE
            SELECT
              [Current LSN],
              [operation],
              [Context],
              [Transaction ID],
              [Transaction Name],
              [Begin Time],
              [End Time],
              [Flag Bits],
              [PartitionID],
              [Page ID],
              [Slot ID],
              [RowLog Contents 0],
              [Log Record],
              [RowLog Contents 1] -- After Image
            FROM
              fn_dump_dblog (
                @start_lsn, NULL, N'DISK', @seqno, @filename,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default,
                default, default, default, default, default, default, default)
            WHERE [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator.
            AND
            (
              (  [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') )
              OR
              (  [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW')
                AND
                ( ( [context]   in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') )
                AND ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition)
              )
              OR
              ([operation] = 'LOP_HOBT_DDL')
            )
            SET NOCOUNT OFF -- Re-enable "rows affected display"
      END
      GO
      ```

   1. Buat sertifikat pada Master Database:

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions'
      ```

   1. Buat login dari sertifikat:

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE
        [awsdms_rtm_dump_dblog_cert];
      ```

   1. Tambahkan login ke peran server sysadmin:

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
      ```

   1. Tambahkan tanda tangan ke [master]. [awsdms]. Prosedur [rtm\$1dump\$1dblog] menggunakan sertifikat:

      ```
      USE [master]
      GO
      
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_dump_dblog]
        BY CERTIFICATE [awsdms_rtm_dump_dblog_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**catatan**  
Jika Anda membuat ulang prosedur yang disimpan, Anda perlu menambahkan tanda tangan lagi.

   1. Buat `[awsdms].[rtm_position_1st_timestamp]` prosedur pada database Master:

      ```
      USE [master]
      IF object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null
        DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp];
      GO
      CREATE PROCEDURE [awsdms].[rtm_position_1st_timestamp]
      (
        @dbname                sysname,      -- Database name
        @seqno                 integer,      -- Backup set sequence/position number within file
        @filename              varchar(260), -- The backup filename
        @1stTimeStamp          varchar(40)   -- The timestamp to position by
      ) 
      AS 
      BEGIN
        SET NOCOUNT ON       -- Disable "rows affected display"
      
        DECLARE @firstMatching table
        (
          cLsn varchar(32),
          bTim datetime
        )
        DECLARE @sql nvarchar(4000)
        DECLARE @nl                       char(2)
        DECLARE @tb                       char(2)
        DECLARE @fnameVar                 sysname = 'NULL'
      
        SET @nl  = char(10); -- New line
        SET @tb  = char(9)   -- Tab separator
      
        IF (@filename is not null)
          SET @fnameVar = ''''+@filename +''''
        SET @filename = ''''+@filename +''''
        SET @sql='use ['+@dbname+'];'+@nl+
          'SELECT TOP 1 [Current LSN],[Begin Time]'+@nl+
          'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @filename +','+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default,'+@nl+
          @tb+'default, default, default, default, default, default, default)'+@nl+
          'WHERE operation=''LOP_BEGIN_XACT''' +@nl+
          'AND [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl
      
          --print @sql
          DELETE FROM @firstMatching 
          INSERT INTO @firstMatching  exec sp_executesql @sql    -- Get them all
          SELECT TOP 1 cLsn as [matching LSN],convert(varchar,bTim,121) AS[matching Timestamp] FROM @firstMatching;
      
          SET NOCOUNT OFF      -- Re-enable "rows affected display"
      
      END
      GO
      ```

   1. Buat sertifikat pada database Master:

      ```
      USE [master]
      GO
      CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        ENCRYPTION BY PASSWORD = N'@hardpassword1'
        WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
      ```

   1. Buat login dari sertifikat:

      ```
      USE [master]
      GO
      CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE
        [awsdms_rtm_position_1st_timestamp_cert];
      ```

   1. Tambahkan login ke peran server sysadmin:

      ```
      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
      ```

   1. Tambahkan tanda tangan ke `[master].[awsdms].[rtm_position_1st_timestamp]` prosedur menggunakan sertifikat:

      ```
      USE [master]
      GO
      ADD SIGNATURE
        TO [master].[awsdms].[rtm_position_1st_timestamp]
        BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert]
        WITH PASSWORD = '@hardpassword1';
      ```
**catatan**  
Jika Anda membuat ulang prosedur yang disimpan, Anda perlu menambahkan tanda tangan lagi.

   1. Buat pengguna dengan yang berikut permissions/roles di masing-masing database berikut:
**catatan**  
Anda harus membuat akun pengguna dmsnosysadmin dengan SID yang sama pada setiap replika. Kueri SQL berikut dapat membantu memverifikasi nilai SID akun dmsnosysadmin pada setiap replika. Untuk informasi selengkapnya tentang membuat pengguna, lihat [MEMBUAT PENGGUNA (Transact-SQL) di dokumentasi server](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-user-transact-sql) [Microsoft](https://learn.microsoft.com/en-us/sql/) SQL. [Untuk informasi selengkapnya tentang membuat akun pengguna SQL untuk database Azure SQL, lihat Replikasi geo aktif.](https://learn.microsoft.com/en-us/azure/azure-sql/database/active-geo-replication-overview)

      ```
      SELECT @@servername servername, name, sid, create_date, modify_date
        FROM sys.server_principals
        WHERE name = 'dmsnosysadmin';
      ```

   1. Berikan izin pada database master pada setiap replika:

      ```
      USE master
      GO 
      
      GRANT select on sys.fn_dblog to dmsnosysadmin;
      GRANT view any definition to dmsnosysadmin;
      GRANT view server state to dmsnosysadmin -- (should be granted to the login).
      GRANT execute on sp_repldone to dmsnosysadmin;
      GRANT execute on sp_replincrementlsn to dmsnosysadmin;
      GRANT execute on sp_addpublication to dmsnosysadmin;
      GRANT execute on sp_addarticle to dmsnosysadmin;
      GRANT execute on sp_articlefilter to dmsnosysadmin;
      GRANT select on [awsdms].[split_partition_list] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_dump_dblog] to dmsnosysadmin;
      GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dmsnosysadmin;
      ```

   1. Berikan izin pada database msdb pada setiap replika:

      ```
      USE msdb
      GO
      GRANT select on msdb.dbo.backupset TO self_managed_user
      GRANT select on msdb.dbo.backupmediafamily TO self_managed_user
      GRANT select on msdb.dbo.backupfile TO self_managed_user
      ```

   1. Tambahkan `db_owner` peran `dmsnosysadmin` ke database sumber. Karena database disinkronkan, Anda dapat menambahkan peran pada replika utama saja.

      ```
      use <source DB>
      GO 
      EXEC sp_addrolemember N'db_owner', N'dmsnosysadmin'
      ```

## Menyiapkan replikasi yang sedang berlangsung pada instance cloud SQL Server DB
<a name="CHAP_Source.SQLServer.Configuration"></a>

Bagian ini menjelaskan cara mengatur CDC pada instance database SQL Server yang dihosting cloud. Instance SQL server yang dihosting cloud adalah instance yang berjalan di Amazon RDS for SQL Server, Instans Azure SQL Manged, atau instans SQL Server cloud terkelola lainnya. Untuk informasi tentang batasan replikasi yang sedang berlangsung untuk setiap jenis database, lihat[Keterbatasan dalam menggunakan SQL Server sebagai sumber AWS DMS](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Limitations). 

Sebelum menyiapkan replikasi yang sedang berlangsung, lihat [Prasyarat untuk menggunakan replikasi berkelanjutan (CDC) dari sumber SQL Server](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Prerequisites). 

Tidak seperti sumber Microsoft SQL Server yang dikelola sendiri, Amazon RDS for SQL Server tidak mendukung replikasi MS. Oleh karena itu, AWS DMS perlu menggunakan MS-CDC untuk tabel dengan atau tanpa kunci primer.

Amazon RDS tidak memberikan hak sysadmin untuk menyetel artefak replikasi yang AWS DMS digunakan untuk perubahan berkelanjutan dalam instance SQL Server sumber. Pastikan untuk mengaktifkan MS-CDC untuk instans Amazon RDS (menggunakan hak pengguna master) seperti pada prosedur berikut.

**Untuk mengaktifkan MS-CDC untuk instance cloud SQL Server DB**

1. Jalankan salah satu query berikut di tingkat database.

   Untuk contoh RDS untuk SQL Server DB, gunakan kueri ini.

   ```
   exec msdb.dbo.rds_cdc_enable_db 'DB_name'
   ```

   Untuk instans DB terkelola Azure SQL, gunakan kueri ini.

   ```
   USE DB_name 
   GO 
   EXEC sys.sp_cdc_enable_db 
   GO
   ```

1. Untuk setiap tabel dengan kunci utama, jalankan query berikut untuk mengaktifkan MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

   Untuk setiap tabel dengan kunci unik tetapi tidak ada kunci utama, jalankan kueri berikut untuk mengaktifkan MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @index_name = N'unique_index_name',
   @role_name = NULL,
   @supports_net_changes = 1
   GO
   ```

    Untuk setiap tabel tanpa kunci primer atau kunci unik, jalankan kueri berikut untuk mengaktifkan MS-CDC.

   ```
   exec sys.sp_cdc_enable_table
   @source_schema = N'schema_name',
   @source_name = N'table_name',
   @role_name = NULL
   GO
   ```

1. Mengatur periode retensi:
   + Untuk instance RDS untuk SQL Server yang mereplikasi menggunakan DMS versi 3.5.3 dan di atasnya, pastikan periode retensi diatur ke nilai default 5 detik. Jika Anda memutakhirkan atau berpindah dari DMS 3.5.2 ke bawah ke DMS 3.5.3 ke atas, ubah nilai interval polling setelah tugas berjalan pada instance baru atau yang ditingkatkan. Skrip berikut menetapkan periode retensi ke 5 detik:

     ```
     use dbname
     EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 5
     exec sp_cdc_stop_job 'capture'
     exec sp_cdc_start_job 'capture'
     ```
   + Parameter`@pollinginterval` diukur dalam hitungan detik dengan nilai yang disarankan, yang ditetapkan menjadi 86399. Ini berarti bahwa log transaksi mempertahankan perubahan selama 86.399 detik (satu hari) ketika. `@pollinginterval = 86399` Prosedur `exec sp_cdc_start_job 'capture'` memulai pengaturan.
**catatan**  
Dengan beberapa versi SQL Server, jika nilai `pollinginterval` diatur ke lebih dari 3599 detik, nilai reset ke default lima detik. Ketika ini terjadi, entri T-Log dibersihkan sebelum AWS DMS dapat membacanya. Untuk menentukan versi SQL Server mana yang terpengaruh oleh masalah yang diketahui ini, lihat [artikel Microsoft KB ini](https://support.microsoft.com/en-us/topic/kb4459220-fix-incorrect-results-occur-when-you-convert-pollinginterval-parameter-from-seconds-to-hours-in-sys-sp-cdc-scan-in-sql-server-dac8aefe-b60b-7745-f987-582dda2cfa78).

     Jika Anda menggunakan Amazon RDS dengan Multi-AZ, pastikan Anda juga mengatur sekunder Anda untuk memiliki nilai yang tepat jika terjadi failover.

     ```
     exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , <5 or preferred value>
     ```

**Untuk mempertahankan periode retensi ketika tugas AWS DMS replikasi dihentikan selama lebih dari satu jam**
**catatan**  
Langkah-langkah berikut tidak diperlukan untuk RDS untuk sumber SQL Server mereplikasi menggunakan DMS 3.5.3 dan di atasnya.

1. Hentikan tugas yang memotong log transaksi dengan menggunakan perintah berikut. 

   ```
   exec sp_cdc_stop_job 'capture'
   ```

1. Temukan tugas Anda di AWS DMS konsol dan lanjutkan tugas.

1. Pilih tab **Monitoring**, dan periksa `CDCLatencySource` metriknya. 

1. Setelah metrik `CDCLatencySource` sama dengan 0 (nol) dan tidak berubah, ulang kembali tugas yang memotong log transaksi menggunakan perintah berikut.

   ```
   exec sp_cdc_start_job 'capture'
   ```

Jangan lupa untuk memulai tugas yang memotong log transaksi SQL Server. Jika tidak, penyimpanan pada instans SQL Server Anda dapat terisi.

### Pengaturan yang disarankan saat menggunakan RDS untuk SQL Server sebagai sumber AWS DMS
<a name="CHAP_Source.SQLServer.Configuration.Settings"></a>

#### Untuk AWS DMS 3.5.3 dan di atas
<a name="CHAP_Source.SQLServer.Configuration.Settings.353"></a>

**catatan**  
Rilis awal fitur cadangan log RDS untuk SQL Server diaktifkan secara default untuk titik akhir yang Anda buat atau modifikasi setelah rilis DMS versi 3.5.3. Untuk menggunakan fitur ini untuk titik akhir yang ada, ubah titik akhir tanpa membuat perubahan apa pun.

AWS DMS versi 3.5.3 memperkenalkan dukungan untuk membaca dari cadangan log. DMS terutama bergantung pada pembacaan dari log transaksi aktif untuk mereplikasi peristiwa. Jika transaksi dicadangkan sebelum DMS dapat membacanya dari log aktif, tugas mengakses cadangan RDS sesuai permintaan dan membaca dari log cadangan berikutnya hingga mencapai log transaksi aktif. Untuk memastikan bahwa DMS memiliki akses ke cadangan log, atur periode retensi cadangan otomatis RDS setidaknya satu hari. Untuk informasi tentang menyetel periode penyimpanan cadangan otomatis, lihat [Periode retensi cadangan](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ManagingAutomatedBackups.html#USER_WorkingWithAutomatedBackups.BackupRetention) di *Panduan Pengguna Amazon RDS*.

Tugas DMS mengakses cadangan log menggunakan penyimpanan pada instance RDS. Perhatikan bahwa tugas hanya mengakses cadangan log yang diperlukan untuk replikasi. Amazon RDS menghapus cadangan yang diunduh ini dalam beberapa jam. Penghapusan ini tidak memengaruhi cadangan Amazon RDS yang disimpan di Amazon S3, atau fungsionalitas Amazon RDS. `RESTORE DATABASE` Dianjurkan untuk mengalokasikan penyimpanan tambahan pada RDS Anda untuk sumber SQL Server jika Anda berniat untuk mereplikasi menggunakan DMS. Salah satu cara untuk memperkirakan jumlah penyimpanan yang dibutuhkan adalah dengan mengidentifikasi cadangan dari mana DMS akan memulai atau melanjutkan replikasi dari, dan menambahkan ukuran file dari semua backup berikutnya menggunakan fungsi metadata RDS. `tlog backup` Untuk informasi selengkapnya tentang `tlog backup` fungsi ini, lihat [Mencantumkan cadangan log transaksi yang tersedia](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER.SQLServer.AddlFeat.TransactionLogAccess.html#USER.SQLServer.AddlFeat.TransactionLogAccess.Listing) di Panduan Pengguna *Amazon RDS.* 

Sebagai alternatif, Anda dapat memilih untuk mengaktifkan penskalaan otomatis penyimpanan dan/atau memicu penskalaan penyimpanan berdasarkan metrik CloudWatch `FreeStorageSpace` untuk instans Amazon RDS Anda.

Kami sangat menyarankan agar Anda tidak memulai atau melanjutkan dari titik yang terlalu jauh ke belakang dalam pencadangan log transaksi, karena dapat menyebabkan penyimpanan pada instance SQL Server Anda terisi. Dalam kasus seperti itu, disarankan untuk memulai beban penuh. Mereplikasi dari cadangan log transaksi lebih lambat daripada membaca dari log transaksi aktif. Untuk informasi selengkapnya, lihat [Pemrosesan cadangan log transaksi untuk RDS untuk SQL Server](CHAP_Troubleshooting_Latency_Source_SQLServer.md#CHAP_Troubleshooting_Latency_Source_SQLServer_backup).

Perhatikan bahwa mengakses cadangan log memerlukan hak istimewa tambahan. Untuk informasi selengkapnya, lihat seperti yang dijelaskan di [Menyiapkan izin untuk replikasi berkelanjutan dari database SQL Server cloud](CHAP_Source.SQLServer.md#CHAP_Source.SQLServer.Permissions.Cloud) Pastikan Anda memberikan hak istimewa ini sebelum tugas mulai mereplikasi.

#### Untuk AWS DMS 3.5.2 dan di bawah
<a name="CHAP_Source.SQLServer.Configuration.Settings.352"></a>

Saat Anda bekerja dengan Amazon RDS for SQL Server sebagai sumber, pekerjaan pengambilan MS-CDC bergantung pada parameter dan. `maxscans` `maxtrans` Parameter ini mengatur jumlah maksimum pemindaian yang dilakukan penangkapan MS-CDC pada log transaksi dan jumlah transaksi yang diproses untuk setiap pemindaian.

Untuk database, di mana sejumlah transaksi lebih besar dari`maxtrans*maxscans`, meningkatkan `polling_interval` nilai dapat menyebabkan akumulasi catatan log transaksi aktif. Pada gilirannya, akumulasi ini dapat menyebabkan peningkatan ukuran log transaksi.

Perhatikan bahwa AWS DMS tidak bergantung pada pekerjaan penangkapan MS-CDC. Pekerjaan penangkapan MS-CDC menandai entri log transaksi sebagai telah diproses. Hal ini memungkinkan tugas backup log transaksi untuk menghapus entri dari log transaksi.

Kami menyarankan Anda memantau ukuran log transaksi dan keberhasilan pekerjaan MS-CDC. Jika pekerjaan MS-CDC gagal, log transaksi dapat tumbuh secara berlebihan dan menyebabkan kegagalan replikasi. AWS DMS Anda dapat memantau kesalahan pekerjaan pengambilan MS-CDC menggunakan tampilan manajemen `sys.dm_cdc_errors` dinamis di database sumber. Anda dapat memantau ukuran log transaksi menggunakan perintah `DBCC SQLPERF(LOGSPACE)` manajemen.

**Untuk mengatasi peningkatan log transaksi yang disebabkan oleh MS-CDC**

1. Periksa apakah database `Log Space Used %` AWS DMS mereplikasi dari dan memvalidasi bahwa itu meningkat terus menerus.

   ```
   DBCC SQLPERF(LOGSPACE)
   ```

1. Identifikasi apa yang memblokir proses pencadangan log transaksi.

   ```
   Select log_reuse_wait, log_reuse_wait_desc, name from sys.databases where name = db_name();
   ```

   Jika `log_reuse_wait_desc` nilainya sama`REPLICATION`, retensi cadangan log disebabkan oleh latensi di MS-CDC.

1. Tingkatkan jumlah peristiwa yang diproses oleh pekerjaan penangkapan dengan meningkatkan nilai `maxtrans` dan `maxscans` parameter.

   ```
   EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@maxtrans = 5000, @maxscans = 20 
   exec sp_cdc_stop_job 'capture'
   exec sp_cdc_start_job 'capture'
   ```

Untuk mengatasi masalah ini, tetapkan nilai `maxscans` dan `maxtrans` sehingga `maxtrans*maxscans` sama dengan jumlah rata-rata peristiwa yang dihasilkan untuk tabel yang AWS DMS mereplikasi dari database sumber untuk setiap hari.

Jika Anda menetapkan parameter ini lebih tinggi dari nilai yang disarankan, pekerjaan penangkapan akan memproses semua peristiwa di log transaksi. Jika Anda menetapkan parameter ini di bawah nilai yang disarankan, latensi MS-CDC meningkat dan log transaksi Anda bertambah.

Mengidentifikasi nilai yang sesuai untuk `maxscans` dan `maxtrans` bisa sulit karena perubahan beban kerja menghasilkan berbagai jumlah peristiwa. Dalam hal ini, kami menyarankan Anda mengatur pemantauan pada latensi MS-CDC. Untuk informasi selengkapnya, lihat [Memantau proses](https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/administer-and-monitor-change-data-capture-sql-server?view=sql-server-ver15#Monitor) dalam dokumentasi SQL Server. Kemudian konfigurasikan `maxtrans` dan `maxscans` secara dinamis berdasarkan hasil pemantauan.

Jika AWS DMS tugas tidak dapat menemukan nomor urutan log (LSNs) yang diperlukan untuk melanjutkan atau melanjutkan tugas, tugas mungkin gagal dan memerlukan pemuatan ulang lengkap.

**catatan**  
Saat menggunakan AWS DMS untuk mereplikasi data dari sumber RDS untuk SQL Server, Anda mungkin mengalami kesalahan saat mencoba melanjutkan replikasi setelah peristiwa stop-start dari instans Amazon RDS. Hal ini disebabkan proses SQL Server Agent memulai kembali proses pengambilan pekerjaan ketika restart setelah peristiwa stop-start. Ini melewati interval pemungutan suara MS-CDC.  
Karena itu, pada database dengan volume transaksi lebih rendah dari pemrosesan pekerjaan penangkapan MS-CDC, ini dapat menyebabkan data diproses atau ditandai sebagai direplikasi dan dicadangkan sebelum AWS DMS dapat dilanjutkan dari tempat berhenti, yang mengakibatkan kesalahan berikut:  

```
[SOURCE_CAPTURE ]E: Failed to access LSN '0000dbd9:0006f9ad:0003' in the backup log sets since BACKUP/LOG-s are not available. [1020465] (sqlserver_endpoint_capture.c:764)
```
Untuk mengurangi masalah ini, tetapkan `maxscans` nilai `maxtrans` dan seperti yang direkomendasikan sebelumnya.