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.
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.
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.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk