Tutorial: Mengonfigurasi replikasi transaksional antara Azure SQL Managed Instance dan SQL Server

Berlaku untuk:Azure SQL Managed Instance

Replikasi transaksional memungkinkan Anda untuk mereplikasi data dari satu database ke database lain yang dihosting di SQL Server atau Azure SQL Managed Instance. SQL Managed Instance dapat menjadi penerbit, distributor, atau pelanggan dalam topologi replikasi. Lihat konfigurasi replikasi transaksional untuk konfigurasi yang tersedia.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Mengonfigurasi instans terkelola sebagai penerbit replikasi.
  • Mengonfigurasi instans terkelola sebagai distributor replikasi.
  • Mengonfigurasi SQL Server sebagai pelanggan.

Replication between a managed instance publisher, managed instance distributor, and SQL Server subscriber

Tutorial ini ditujukan untuk audiens berpengalaman dan mengasumsikan bahwa pengguna terbiasa dengan menerapkan dan menyambung ke instans terkelola dan VM SQL Server dalam Azure.

Catatan

Artikel ini menjelaskan penggunaan replikasi transaksional dalam SQL Managed Instance. Hal ini tidak terkait dengan grup failover, fitur SQL Managed Instance yang memungkinkan Anda membuat replika instans individual yang dapat dibaca. Ada pertimbangan tambahan saat mengonfigurasi replikasi transaksional dengan grup failover.

Prasyarat

Untuk menyelesaikan tutorial ini, pastikan prasyarat berikut dipenuhi:

Membuat grup sumber daya

Gunakan cuplikan kode PowerShell berikut ini untuk membuat grup sumber daya baru:

# set variables
$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"

# Create a new resource group
New-AzResourceGroup -Name  $ResourceGroupName -Location $Location

Membuat dua instans terkelola

Buat dua instans terkelola dalam grup sumber daya baru ini menggunakan portal Azure.

  • Nama instans yang dikelola penerbit harus sql-mi-publisher (bersama dengan beberapa karakter untuk pengacakan), dan nama jaringan virtual harus vnet-sql-mi-publisher.

  • Nama instans yang dikelola distributor harus sql-mi-distributor (bersama dengan beberapa karakter untuk pengacakan), dan harus dalam jaringan virtual yang sama dengan instans yang dikelola penerbit.

    Use the publisher VNet for the distributor

Untuk informasi selengkapnya tentang membuat instans terkelola, lihat Membuat instans terkelola di portal.

Catatan

Demi kesederhanaan, dan karena ini adalah konfigurasi yang paling umum, tutorial ini menyarankan menempatkan instans terkelola distributor dalam jaringan virtual yang sama dengan penerbit. Namun, dimungkinkan untuk membuat distributor dalam jaringan virtual terpisah. Untuk melakukannya, Anda harus mengonfigurasi peering VNet antara jaringan virtual penerbit dan distributor, lalu mengonfigurasi peering VNet antara jaringan virtual distributor dan pelanggan.

Membuat SQL Server VM

Membuat komputer virtual SQL Server menggunakan Portal Microsoft Azure. Komputer virtual SQL Server harus memiliki karakteristik berikut:

  • Nama: sql-vm-sub
  • Gambar: SQL Server 2016 atau lebih tinggi
  • Grup sumber daya: sama dengan instans terkelola
  • Jaringan virtual: sql-vm-sub-vnet

Untuk informasi selengkapnya tentang menerapkan SQL Server VM ke Azure, lihat Mulai Cepat: Membuat SQL Server VM.

Mengonfigurasi peering VNet

Konfigurasikan peering VNet untuk mengaktifkan komunikasi antara jaringan virtual dari dua instans terkelola, dan jaringan virtual SQL Server. Untuk melakukannya, gunakan cuplikan kode PowerShell ini:

# Set variables
$SubscriptionId = '<SubscriptionID>'
$resourceGroup = 'SQLMI-Repl'
$pubvNet = 'sql-mi-publisher-vnet'
$subvNet = 'sql-vm-sub-vnet'
$pubsubName = 'Pub-to-Sub-Peer'
$subpubName = 'Sub-to-Pub-Peer'

$virtualNetwork1 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $pubvNet

 $virtualNetwork2 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $subvNet  

# Configure VNet peering from publisher to subscriber
Add-AzVirtualNetworkPeering `
  -Name $pubsubName `
  -VirtualNetwork $virtualNetwork1 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

# Configure VNet peering from subscriber to publisher
Add-AzVirtualNetworkPeering `
  -Name $subpubName `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork1.Id

# Check status of peering on the publisher VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $pubvNet `
 | Select PeeringState

# Check status of peering on the subscriber VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $subvNet `
 | Select PeeringState

Setelah peering VNet dibuat, uji konektivitas dengan meluncurkan SQL Server Management Studio (SSMS) di SQL Server dan menyambung ke kedua instans terkelola. Untuk informasi selengkapnya tentang menyambung ke instans terkelola menggunakan SSMS, lihat Menggunakan SSMS untuk menyambungkan ke SQL Managed Instance.

Test connectivity to the managed instances

Membuat zona DNS privat

Zona DNS pribadi memungkinkan perutean DNS antara instans terkelola dan SQL Server.

Membuat zona DNS privat

  1. Masuk ke Portal Microsoft Azure.

  2. Pilih Buat sumber daya untuk membuat sumber daya Azure baru.

  3. Cari private dns zone di Marketplace Azure.

  4. Pilih sumber daya Zona DNS pribadi yang diterbitkan oleh Microsoft lalu pilih Buat untuk membuat zona DNS.

  5. Pilih grup langganan dan sumber daya dari menu turun bawah.

  6. Berikan nama acak untuk zona DNS Anda, seperti repldns.com.

    Create private DNS zone

  7. Pilih Tinjau + buat. Tinjau parameter untuk zona DNS pribadi Anda lalu pilih Buat untuk membuat sumber daya.

Membuat rekaman A

  1. Masuk ke Zona DNS pribadi baru Anda dan pilih Gambaran Umum.

  2. Pilih + Rekaman set untuk membuat catatan A baru.

  3. Berikan nama SQL Server VM Anda serta alamat IP internal pribadi.

    Configure an A record

  4. Pilih OK untuk membuat rekaman A.

  1. Masuk ke Zona DNS Privat baru Anda dan pilih tautan Jaringan virtual.

  2. Pilih + Tambah.

  3. Berikan nama untuk tautan, seperti Pub-link.

  4. Pilih langganan Anda dari menu tarik-turun lalu pilih jaringan virtual untuk instans terkelola penerbit Anda.

  5. Centang kotak di samping Aktifkan pendaftaran otomatis.

    Create VNet link

  6. Pilih OK untuk menautkan jaringan virtual Anda.

  7. Ulangi langkah-langkah ini guna menambahkan tautan untuk jaringan virtual pelanggan, dengan nama seperti Sub-link.

Membuat akun Azure Storage

Buat akun Azure storage untuk direktori kerja, lalu buat berbagi file dalam akun penyimpanan.

Salin jalur berbagi file dalam format: \\storage-account-name.file.core.windows.net\file-share-name

Contoh: \\replstorage.file.core.windows.net\replshare

Salin string koneksi kunci akses penyimpanan dalam format: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net

Contoh: DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net

Untuk informasi selengkapnya, lihat Mengelola kunci akses akun penyimpanan.

Membuat database

Membuat database baru pada instans terkelola penerbit. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Luncurkan SQL Server Management Studio di SQL Server.
  2. Sambungkan ke instans terkelola sql-mi-publisher.
  3. Buka jendela Kueri Baru dan jalankan kueri T-SQL berikut ini untuk membuat database.
-- Create the databases
USE [master]
GO

-- Drop database if it exists
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
    DROP DATABASE ReplTutorial
END
GO

-- Create new database
CREATE DATABASE [ReplTutorial]
GO

-- Create table
USE [ReplTutorial]
GO
CREATE TABLE ReplTest (
   ID INT NOT NULL PRIMARY KEY,
   c1 VARCHAR(100) NOT NULL,
   dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO

-- Populate table with data
USE [ReplTutorial]
GO

INSERT INTO ReplTest (ID, c1) VALUES (6, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (2, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (3, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (4, 'pub')
INSERT INTO ReplTest (ID, c1) VALUES (5, 'pub')
GO
SELECT * FROM ReplTest
GO

Mengonfigurasi distribusi

Setelah konektivitas dibuat dan Anda memiliki contoh database, Anda dapat mengonfigurasi distribusi pada instans terkelola sql-mi-distributor. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Luncurkan SQL Server Management Studio di SQL Server.

  2. Sambungkan ke instans terkelola sql-mi-distributor.

  3. Buka jendela Kueri Baru dan jalankan kode Transact-SQL berikut untuk mengonfigurasi distribusi pada instans terkelola distributor:

    EXEC sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
    
    EXEC sp_adddistributiondb @database = N'distribution'
    
    EXEC sp_adddistpublisher @publisher = 'sql-mi-publisher.b6bf57.database.windows.net', -- primary publisher
         @distribution_db = N'distribution',
         @security_mode = 0,
         @login = N'azureuser',
         @password = N'<publisher_password>',
         @working_directory = N'\\replstorage.file.core.windows.net\replshare',
         @storage_connection_string = N'<storage_connection_string>'
         -- example: @storage_connection_string = N'DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net'
    
    

    Catatan

    Pastikan hanya menggunakan backslash (\) untuk parameter @working_directory. Menggunakan garis miring (/) dapat menyebabkan kesalahan saat menyambungkan ke berbagi file.

  4. Sambungkan ke instans terkelola sql-mi-publisher.

  5. Buka jendela Kueri Baru dan jalankan kode T-SQL berikut ini untuk mendaftarkan distributor di penerbit:

    Use MASTER
    EXEC sys.sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
    

Membuat publikasi

Setelah distribusi dikonfigurasi, Anda sekarang dapat membuat publikasi. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Luncurkan SQL Server Management Studio di SQL Server.

  2. Sambungkan ke instans terkelola sql-mi-publisher.

  3. Di Object Explorer, perluas node Replikasi dan klik kanan folder Publikasi Lokal. Pilih Publikasi Baru....

  4. Pilih Berikutnya untuk berpindah melewati halaman selamat datang.

  5. Pada halaman Database Publikasi, pilih database ReplTutorial yang Anda buat sebelumnya. Pilih Selanjutnya.

  6. Pada halaman Jenis publikasi, pilih Publikasi transaksional. Pilih Selanjutnya.

  7. Pada halaman Artikel, centang kotak di samping Tabel. Pilih Selanjutnya.

  8. Pada halaman Filter Baris Tabel, pilih Berikutnya tanpa menambahkan filter apa pun.

  9. Pada halaman Agen Rekam Jepret, centang kotak di samping Buat rekam jepret dan simpan dulu snapshot untuk inisialisasi langganan. Pilih Selanjutnya.

  10. Pada halaman Keamanan Agen, pilih Pengaturan Keamanan.... Berikan kredensial data masuk SQL Server untuk digunakan pada Agen Rekam Jepret, dan untuk menyambungkan ke penerbit. Pilih OK untuk menutup halaman Keamanan Agen Rekam Jepret. Pilih Selanjutnya.

    Configure Snapshot Agent security

  11. Pada halaman Tindakan Wizard, pilih Buat publikasi (opsional) pilih untuk Membuat file skrip dengan langkah-langkah untuk membuat publikasi jika Anda ingin menyimpan skrip ini untuk nanti.

  12. Pada halaman Selesaikan Wizard, beri nama publikasi Anda ReplTest dan pilih Berikutnya untuk membuat publikasi.

  13. Setelah publikasi dibuat, refresh node Replikasi di Object Explorer dan perluas Publikasi Lokal untuk melihat publikasi baru Anda.

Membuat langganan

Setelah publikasi dibuat, Anda bisa membuat langganan. Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Luncurkan SQL Server Management Studio di SQL Server.
  2. Sambungkan ke instans terkelola sql-mi-publisher.
  3. Buka jendela Kueri Baru dan jalankan kode T-SQL berikut untuk menambahkan agen langganan dan distribusi. Gunakan DNS sebagai bagian dari nama pelanggan.
use [ReplTutorial]
exec sp_addsubscription
@publication = N'ReplTest',
@subscriber = N'sql-vm-sub.repldns.com', -- include the DNS configured in the private DNS zone
@destination_db = N'ReplSub',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0

exec sp_addpushsubscription_agent
@publication = N'ReplTest',
@subscriber = N'sql-vm-sub.repldns.com', -- include the DNS configured in the private DNS zone
@subscriber_db = N'ReplSub',
@job_login = N'azureuser',
@job_password = '<Complex Password>',
@subscriber_security_mode = 0,
@subscriber_login = N'azureuser',
@subscriber_password = '<Complex Password>',
@dts_package_location = N'Distributor'
GO

Menguji replikasi

Setelah replikasi dikonfigurasi, Anda dapat mengujinya dengan memasukkan item baru ke penerbit dan melihat perubahan menyebar ke pelanggan.

Jalankan cuplikan T-SQL berikut untuk melihat baris pada pelanggan:

Use ReplSub
select * from dbo.ReplTest

Jalankan cuplikan T-SQL berikut untuk menyisipkan baris tambahan di penerbit, lalu periksa kembali baris tersebut pada pelanggan.

Use ReplTutorial
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')

Membersihkan sumber daya

  1. Navigasi ke grup sumber daya Anda di portal Microsoft Azure.
  2. Pilih instans terkelola lalu pilih Hapus. Ketik yes dalam kotak teks untuk mengonfirmasi bahwa Anda ingin menghapus sumber daya lalu pilih Hapus. Proses ini mungkin perlu waktu untuk diselesaikan di latar belakang, dan setelah selesai baru Anda dapat menghapus kluster virtual atau sumber daya dependen lainnya. Pantau penghapusan di tab Aktivitas untuk mengonfirmasi instans terkelola telah dihapus.
  3. Setelah instans terkelola dihapus, hapus kluster virtual dengan memilihnya di grup sumber daya, lalu pilih Hapus. Ketik yes dalam kotak teks untuk mengonfirmasi bahwa Anda ingin menghapus sumber daya lalu pilih Hapus.
  4. Hapus sumber daya yang tersisa. Ketik yes dalam kotak teks untuk mengonfirmasi bahwa Anda ingin menghapus sumber daya lalu pilih Hapus.
  5. Hapus grup sumber daya dengan memilih Hapus grup sumber daya, ketikkan nama grup sumber daya, myResourceGroup, lalu pilih Hapus.

Kesalahan yang diketahui

Login Windows tidak didukung

Exception Message: Windows logins are not supported in this version of SQL Server.

Agen dikonfigurasi dengan login Windows dan perlu menggunakan data masuk SQL Server sebagai gantinya. Gunakan halaman Keamanan Agen dari properti Publikasi untuk mengubah info masuk ke data masuk SQL Server.

Gagal menyambung ke Azure Storage

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 53.

2019-11-19 02:21:05.07 Memperoleh String Koneksi Azure Storage untuk replstorage 2019-11-19 02:21:05.07 Menyambungkan ke Azure Files Storage '\replstorage.file.core.windows.net\replshare' 2019-11-19 02:21:31.21 Gagal tersambung ke Azure Storage '' dengan kesalahan OS: 53.

Ini kemungkinan karena port 445 ditutup di firewall Azure, firewall Windows, atau keduanya.

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 55.

Menggunakan garis miring bukan backslash di jalur file untuk berbagi file dapat menyebabkan kesalahan ini.

  • Ini baik-baik saja: \\replstorage.file.core.windows.net\replshare
  • Ini dapat menyebabkan kesalahan OS 55: '\\replstorage.file.core.windows.net/replshare'

Tidak bisa tersambung ke Pelanggan

The process could not connect to Subscriber 'SQL-VM-SUB Could not open a connection to SQL Server [53]. A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections.

Solusi yang bisa dilakukan:

  • Pastikan porta 1433 terbuka.
  • Pastikan TCP/IP diaktifkan pada pelanggan.
  • Konfirmasi nama DNS digunakan saat membuat pelanggan.
  • Pastikan jaringan virtual Anda ditautkan dengan benar di zona DNS pribadi.
  • Pastikan rekaman A Anda dikonfigurasi dengan benar.
  • Pastikan peering VNet Anda dikonfigurasi dengan benar.

Anda tidak dapat berlangganan ke publikasi mana pun

Saat Anda menambahkan langganan baru menggunakan wizard Langganan Baru, pada halaman Publikasi, Anda mungkin menemukan bahwa tidak ada database dan publikasi yang tercantum sebagai opsi yang tersedia, dan Anda mungkin melihat pesan kesalahan berikut:

There are no publications to which you can subscribe, either because this server has no publications or because you do not have sufficient privileges to access the publications.

Meskipun mungkin pesan kesalahan ini akurat, dan benar-benar tidak ada publikasi yang tersedia di penerbit yang tersambung dengan Anda, atau Anda tidak memiliki izin yang memadai, kesalahan ini juga dapat disebabkan oleh versi SQL Server Management Studio yang lebih lama. Cobalah memutakhirkan ke SQL Server Management Studio 18.0 atau yang lebih tinggi untuk mengatasinya sebagai akar penyebabnya.

Langkah berikutnya

Mengaktifkan fitur keamanan

Lihat artikel Apakah Azure SQL Managed Instance itu? Fitur keamanan berikut dibahas:

Kemampuan SQL Managed Instance

Untuk gambaran umum lengkap kemampuan instans terkelola, lihat: