Tutorial: Mengonfigurasi replikasi antara dua instans terkelola

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 dan distributor replikasi.
  • Mengonfigurasi instans terkelola sebagai pelanggan replikasi.

Replicate between two managed instances

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

Persyaratan

Mengonfigurasi SQL Managed Instance untuk berfungsi sebagai penerbit dan/atau distributor memerlukan:

  • Bahwa instans terkelola penerbit berada di jaringan virtual yang sama dengan distributor dan pelanggan, atau peering VNet atau gateway VPN telah dikonfigurasi antara jaringan virtual ketiga entitas.
  • Konektivitas menggunakan SQL Authentication antara peserta replikasi.
  • Berbagi akun penyimpanan Azure untuk direktori kerja replikasi.
  • Port 445 (TCP outbound) terbuka dalam aturan keamanan NSG untuk instans terkelola untuk mengakses berbagi file Azure. Jika Anda mengalami kesalahan failed to connect to azure storage <storage account name> with os error 53, Anda harus menambahkan aturan keluar ke NSG subnet SQL Managed Instance yang sesuai.

1 - Membuat grup sumber daya

Gunakan portal Azure untuk membuat grup sumber daya dengan nama SQLMI-Repl .

2 - Membuat instans terkelola

Gunakan portal Azure untuk membuat dua SQL Managed Instance di jaringan virtual dan subnet yang sama. Misalnya, beri nama dua instans terkelola:

  • sql-mi-pub (bersama dengan beberapa karakter untuk pengacakan)
  • sql-mi-sub (bersama dengan beberapa karakter untuk pengacakan)

Anda juga perlu mengonfigurasi Azure VM untuk menyambungkan ke instans terkelola Anda.

3 - Buat akun penyimpanan Azure

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 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.

4 - Membuat database penerbit

Sambungkan ke instans terkelola sql-mi-pub Anda menggunakan SQL Server Management Studio dan jalankan kode Transact-SQL (T-SQL) berikut ini untuk membuat database penerbit Anda:

USE [master]
GO

CREATE DATABASE [ReplTran_PUB]
GO

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


USE [ReplTran_PUB]
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

5 - Membuat database pelanggan

Sambungkan ke instans terkelola sql-mi-sub Anda menggunakan SQL Server Management Studio dan jalankan kode T-SQL berikut ini untuk membuat database pelanggan kosong Anda:

USE [master]
GO

CREATE DATABASE [ReplTran_SUB]
GO

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

6 - Mengonfigurasi distribusi

Sambungkan ke instans terkelola sql-mi-pub Anda menggunakan SQL Server Management Studio dan jalankan kode T-SQL berikut untuk mengonfigurasi database distribusi Anda.

USE [master]
GO

EXEC sp_adddistributor @distributor = @@ServerName;
EXEC sp_adddistributiondb @database = N'distribution';
GO

7 - Mengonfigurasi penerbit untuk menggunakan distributor

Pada SQL Managed Instance sql-mi-pub penerbit Anda, ubah eksekusi kueri ke mode SQLCMD dan jalankan kode berikut untuk mendaftarkan distributor baru dengan penerbit Anda.

:setvar username loginUsedToAccessSourceManagedInstance
:setvar password passwordUsedToAccessSourceManagedInstance
:setvar file_storage "\\storage-account-name.file.core.windows.net\file-share-name"
-- example: file_storage "\\replstorage.file.core.windows.net\replshare"
:setvar file_storage_key "DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net"
-- example: file_storage_key "DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net"

USE [master]
EXEC sp_adddistpublisher
  @publisher = @@ServerName,
  @distribution_db = N'distribution',
  @security_mode = 0,
  @login = N'$(username)',
  @password = N'$(password)',
  @working_directory = N'$(file_storage)',
  @storage_connection_string = N'$(file_storage_key)'; -- Remove this parameter for on-premises publishers

Catatan

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

Skrip ini mengonfigurasi penerbit lokal pada instans terkelola, menambahkan server yang ditautkan, dan membuat serangkaian pekerjaan untuk agen SQL Server.

8 - Membuat publikasi dan pelanggan

Menggunakan mode SQLCMD, jalankan skrip T-SQL berikut untuk mengaktifkan replikasi untuk database Anda, dan konfigurasikan replikasi antara penerbit, distributor, dan pelanggan Anda.

-- Set variables
:setvar username sourceLogin
:setvar password sourcePassword
:setvar source_db ReplTran_PUB
:setvar publication_name PublishData
:setvar object ReplTest
:setvar schema dbo
:setvar target_server "sql-mi-sub.wdec33262scj9dr27.database.windows.net"
:setvar target_username targetLogin
:setvar target_password targetPassword
:setvar target_db ReplTran_SUB

-- Enable replication for your source database
USE [$(source_db)]
EXEC sp_replicationdboption
  @dbname = N'$(source_db)',
  @optname = N'publish',
  @value = N'true';

-- Create your publication
EXEC sp_addpublication
  @publication = N'$(publication_name)',
  @status = N'active';


-- Configure your log reader agent
EXEC sp_changelogreader_agent
  @publisher_security_mode = 0,
  @publisher_login = N'$(username)',
  @publisher_password = N'$(password)',
  @job_login = N'$(username)',
  @job_password = N'$(password)';

-- Add the publication snapshot
EXEC sp_addpublication_snapshot
  @publication = N'$(publication_name)',
  @frequency_type = 1,
  @publisher_security_mode = 0,
  @publisher_login = N'$(username)',
  @publisher_password = N'$(password)',
  @job_login = N'$(username)',
  @job_password = N'$(password)';

-- Add the ReplTest table to the publication
EXEC sp_addarticle
  @publication = N'$(publication_name)',
  @type = N'logbased',
  @article = N'$(object)',
  @source_object = N'$(object)',
  @source_owner = N'$(schema)';

-- Add the subscriber
EXEC sp_addsubscription
  @publication = N'$(publication_name)',
  @subscriber = N'$(target_server)',
  @destination_db = N'$(target_db)',
  @subscription_type = N'Push';

-- Create the push subscription agent
EXEC sp_addpushsubscription_agent
  @publication = N'$(publication_name)',
  @subscriber = N'$(target_server)',
  @subscriber_db = N'$(target_db)',
  @subscriber_security_mode = 0,
  @subscriber_login = N'$(target_username)',
  @subscriber_password = N'$(target_password)',
  @job_login = N'$(username)',
  @job_password = N'$(password)';

-- Initialize the snapshot
EXEC sp_startpublication_snapshot
  @publication = N'$(publication_name)';

9 - Mengubah parameter agen

Azure SQL Managed Instance saat ini mengalami beberapa masalah backend tentang konektivitas dengan agen replikasi. Sementara masalah ini sedang diatasi, solusinya adalah dengan meningkatkan nilai waktu tunggu masuk untuk agen replikasi.

Jalankan perintah T-SQL berikut di penerbit untuk menambah waktu tunggu masuk:

-- Increase login timeout to 150s
update msdb..sysjobsteps set command = command + N' -LoginTimeout 150'
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'

Jalankan kembali perintah T-SQL berikut untuk menyetel waktu tunggu masuk kembali ke nilai default, jika Anda perlu melakukannya:

-- Increase login timeout to 30
update msdb..sysjobsteps set command = command + N' -LoginTimeout 30'
where subsystem in ('Distribution','LogReader','Snapshot') and command not like '%-LoginTimeout %'

Mulai ulang ketiga agen untuk menerapkan perubahan ini.

10 - 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:

select * from dbo.ReplTest

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

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

Membersihkan sumber daya

Untuk menghilangkan publikasi, jalankan perintah T-SQL berikut ini:

-- Drops the publication
USE [ReplTran_PUB]
EXEC sp_droppublication @publication = N'PublishData'
GO

Untuk menghapus opsi replikasi dari database, jalankan perintah T-SQL berikut ini:

-- Disables publishing of the database
USE [ReplTran_PUB]
EXEC sp_removedbreplication
GO

Untuk menonaktifkan penerbitan dan distribusi, jalankan perintah T-SQL berikut ini:

-- Drops the distributor
USE [master]
EXEC sp_dropdistributor @no_checks = 1
GO

Anda dapat membersihkan sumber daya Azure Anda dengan menghapus sumber daya SQL Managed Instance dari grup sumber daya dan kemudian menghapus grup sumber dayaSQLMI-Repl.

Langkah berikutnya

Anda juga dapat mempelajari informasi selengkapnya tentang replikasi transaksional dengan Azure SQL Managed Instance atau mempelajari cara mengonfigurasi replikasi antara penerbit/distributor SQL Managed Instance dan SQL pada pelanggan Azure VM.