Bagikan melalui


Tutorial: Mengonfigurasi replikasi antara dua instans terkelola SQL

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:

  • Konfigurasikan instans terkelola SQL sebagai penerbit dan distributor replikasi.
  • Konfigurasikan instans terkelola SQL sebagai pelanggan replikasi.

Diagram memperlihatkan replikasi antara dua instans terkelola SQL.

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

Catatan

Artikel ini menjelaskan penggunaan replikasi transaksional dalam 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 lain saat mengonfigurasi replikasi transaksional dengan grup failover.

Persyaratan

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

  • Instans terkelola SQL 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 keluar) terbuka dalam aturan keamanan NSG untuk instans terkelola SQL 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 SQL

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

  • sql-mi-publisher (bersama dengan beberapa karakter untuk pengacakan)
  • sql-mi-subscriber (bersama dengan beberapa karakter untuk pengacakan)

Anda juga harus Mengonfigurasi Azure VM untuk menyambungkan ke instans terkelola SQL 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=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net

Untuk informasi selengkapnya, lihat Mengelola kunci akses akun penyimpanan.

4 - Membuat database penerbit

Sambungkan ke SQL managed instance penerbit Anda (sql-mi-publisher) menggunakan SQL Server Management Studio, dan jalankan kode Transact-SQL (T-SQL) berikut 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 pelanggan Anda (sql-mi-subscriber) menggunakan SQL Server Management Studio, dan jalankan kode T-SQL berikut 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 SQL managed instance penerbit Anda (sql-mi-publisher) 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 instans terkelola SQL penerbit Anda (sql-mi-publisher), 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=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;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 SQL, menambahkan server tertaut, 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-subscriber.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 perintah T-SQL berikut lagi jika diperlukan untuk mengatur batas waktu masuk kembali ke nilai default:

-- 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 %'

Untuk menerapkan perubahan ini, mulai ulang ketiga agen.

10 - Menguji replikasi

Setelah replikasi dikonfigurasi, Anda dapat mengujinya dengan menyisipkan item baru di penerbit dan melihat perubahan yang disebarkan ke pelanggan.

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

select * from dbo.ReplTest

Jalankan cuplikan T-SQL berikut untuk menyisipkan lebih banyak baris pada penerbit, lalu periksa lagi baris 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.