Bagikan melalui


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 SQL sebagai penerbit replikasi.
  • Konfigurasikan instans terkelola SQL sebagai distributor replikasi.
  • Mengonfigurasi SQL Server sebagai subskriber.

Diagram memperlihatkan replikasi antara penerbit instans terkelola SQL, distributor instans terkelola SQL, dan pelanggan SQL Server.

Tutorial ini ditujukan untuk audiens berpengalaman dan mengasumsikan pengguna terbiasa menyebarkan dan menyambungkan ke instans terkelola SQL dan komputer virtual SQL Server dalam Azure.

Catatan

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

Prasyarat

Untuk menyelesaikan tutorial ini, pastikan prasyarat berikut dipenuhi:

  • Langganan Azure.
  • Pengalaman dengan menyebarkan dua instans terkelola SQL dalam jaringan virtual yang sama.
  • Pelanggan SQL Server, baik lokal atau di Azure VM. Tutorial ini menggunakan Azure VM.
  • SQL Server Management Studio (SSMS) 18.0 atau yang lebih baru.
  • Azure PowerShell versi terbaru.
  • Port 445 dan 1433 memungkinkan lalu lintas SQL pada firewall Azure dan Windows Firewall.

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 SQL

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

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

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

    Cuplikan layar memperlihatkan penggunaan penerbit VNet untuk distributor tersebut.

Untuk informasi selengkapnya tentang membuat instans terkelola SQL, lihat Mulai Cepat: Membuat Azure SQL Managed Instance.

Catatan

Demi kesederhanaan, dan karena ini adalah konfigurasi yang paling umum, tutorial ini menyarankan untuk menempatkan instans terkelola SQL 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-subscriber
  • Gambar: Versi SQL Server yang mendukung replikasi transaksional dengan Azure SQL Managed Instance, sesuai matriks dukungan
  • Grup sumber daya: sama dengan instans terkelola SQL
  • Jaringan virtual: sql-vm-subscriber-vnet

Untuk informasi selengkapnya tentang menyebarkan komputer virtual SQL Server ke Azure, lihat Mulai Cepat: Membuat SQL Server pada komputer virtual Windows di portal Microsoft Azure.

Mengonfigurasi peering VNet

Konfigurasikan peering VNet untuk mengaktifkan komunikasi antara jaringan virtual dari dua instans terkelola SQL, 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-subscriber-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) pada host SQL Server dan menyambungkan ke kedua instans terkelola SQL. Untuk informasi selengkapnya tentang menyambungkan ke instans terkelola SQL menggunakan SSMS, lihat Menggunakan SSMS untuk menyambungkan ke SQL Managed Instance.

Cuplikan layar memperlihatkan cara menguji konektivitas ke instans terkelola SQL.

Membuat zona DNS privat

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

Membuat zona 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 Privat yang diterbitkan oleh Microsoft, lalu pilih Buat untuk membuat zona DNS.

  5. Pilih langganan dan grup sumber daya dari daftar dropdown.

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

    Cuplikan layar memperlihatkan Buat zona DNS privat di portal Microsoft Azure.

  7. Pilih Periksa + Buat. Tinjau parameter untuk zona DNS privat Anda, lalu pilih Buat untuk membuat sumber daya Anda.

Membuat rekaman A

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

  2. Pilih + set rekaman untuk membuat rekaman A baru.

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

    Cuplikan layar memperlihatkan cara mengonfigurasi rekaman A.

  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 daftar dropdown, lalu pilih jaringan virtual untuk instans terkelola SQL penerbit Anda.

  5. Centang kotak di samping Aktifkan pendaftaran otomatis.

    Cuplikan layar memperlihatkan cara membuat tautan VNet.

  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=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net

Untuk informasi selengkapnya, lihat Mengelola kunci akses akun penyimpanan.

Membuat basis data

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

  1. Luncurkan SQL Server Management Studio di SQL Server.
  2. Sambungkan ke SQL managed instance penerbit (sql-mi-publisher).
  3. Buka jendela Kueri Baru , dan jalankan kueri T-SQL berikut 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 database sampel, Anda dapat mengonfigurasi distribusi pada instans terkelola SQL distributor Anda (sql-mi-distributor). Untuk melakukannya, ikuti langkah-langkah berikut:

  1. Luncurkan SQL Server Management Studio di SQL Server.

  2. Sambungkan ke instans terkelola SQL distributor (sql-mi-distributor).

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

    EXECUTE sp_adddistributor
        @distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
        @password = '<distributor_admin_password>';
    
    EXECUTE sp_adddistributiondb @database = N'distribution';
    
    EXECUTE 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 = 123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ = = ;EndpointSuffix = core.windows.net';
    

    Catatan

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

  4. Sambungkan ke SQL managed instance penerbit (sql-mi-publisher).

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

    USE master;
    GO
    
    EXECUTE sys.sp_adddistributor
        @distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
        @password = '<distributor_admin_password>';
    

Membuat publikasi

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

  1. Luncurkan SQL Server Management Studio di SQL Server.

  2. Sambungkan ke SQL managed instance penerbit (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 masuk SQL Server untuk digunakan untuk Agen Rekam Jepret dan untuk menyambungkan ke penerbit. Pilih OK untuk menutup halaman Keamanan Agen Rekam Jepret. Pilih Selanjutnya.

    Cuplikan layar memperlihatkan cara mengonfigurasi keamanan Snapshot Agent.

  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 ReplTestAnda, dan pilih Berikutnya untuk membuat publikasi Anda.

  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 SQL managed instance penerbit (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-subscriber.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-subscriber.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 pengambil langganan:

USE ReplSub;
GO

SELECT *
FROM dbo.ReplTest;

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

USE ReplTutorial;
GO

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 SQL, lalu pilih Hapus. Ketik yes dalam kotak teks untuk mengonfirmasi bahwa Anda ingin menghapus sumber daya, lalu pilih Hapus. Proses ini mungkin memakan waktu untuk diselesaikan di latar belakang, dan sampai selesai, Anda tidak akan dapat menghapus kluster virtual atau sumber daya dependen lainnya. Pantau penghapusan di tab Aktivitas untuk mengonfirmasi instans terkelola SQL Anda telah dihapus.
  3. Setelah instans terkelola SQL dihapus, hapus kluster virtual dengan memilihnya di grup sumber daya Anda, 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 myResourceGroupsumber daya , lalu pilih Hapus.

Kesalahan yang diketahui

Login Windows tidak didukung

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

Program agen dikonfigurasi dengan login Windows dan perlu menggunakan login SQL Server sebagai penggantinya. Gunakan halaman Keamanan Agen dari properti Publikasi untuk mengubah kredensial login menjadi login 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 Obtained Azure Storage Connection String for replstorage
2019-11-19 02:21:05.07 Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare'
2019-11-19 02:21:31.21 Failed to connect to Azure Storage '' with OS error: 53.

Ini kemungkinan karena port 445 ditutup di firewall Azure, Windows Firewall, 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 alih-alih garis miring terbelakang di jalur file untuk berbagi file juga dapat menyebabkan kesalahan ini.

  • Ini dapat diterima: \\replstorage.file.core.windows.net\replshare
  • Ini dapat menyebabkan kesalahan OS 55: \\replstorage.file.core.windows.net/replshare

Tidak dapat tersambung ke Pelanggan

The process could not connect to Subscriber 'SQL-VM-SUBSCRIBER
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.
  • Pastikan nama DNS digunakan saat membuat pelanggan.
  • Pastikan jaringan virtual Anda ditautkan dengan benar di zona DNS pribadi.
  • Pastikan A record 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 ada kemungkinan bahwa pesan kesalahan ini akurat, dan benar-benar tidak ada publikasi yang tersedia di penerbit yang Anda sambungkan atau Anda tidak memiliki izin yang memadai, versi SQL Server Management Studio yang lebih lama juga dapat menyebabkan kesalahan ini. Coba tingkatkan ke SQL Server Management Studio 18.0 atau yang lebih baru untuk mengesampingkan ini sebagai akar penyebabnya.