Samouczek: konfigurowanie replikacji między dwoma wystąpieniami zarządzanymi

Dotyczy:Azure SQL Managed Instance

Replikacja transakcyjna umożliwia replikowanie danych z jednej bazy danych do innej hostowanej w programie SQL Server lub usłudze Azure SQL Managed Instance. Wystąpienie zarządzane SQL może być wydawcą, dystrybutorem lub subskrybentem w topologii replikacji. Aby uzyskać dostępne konfiguracje, zobacz Konfiguracje replikacji transakcyjnej.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Skonfiguruj wystąpienie zarządzane jako wydawcę i dystrybutora replikacji.
  • Konfigurowanie wystąpienia zarządzanego jako subskrybenta replikacji.

Replicate between two managed instances

Ten samouczek jest przeznaczony dla doświadczonych odbiorców i zakłada, że użytkownik jest zaznajomiony z wdrażaniem i nawiązywaniem połączenia z wystąpieniami zarządzanymi i maszynami wirtualnymi programu SQL Server na platformie Azure.

Uwaga

  • W tym artykule opisano użycie replikacji transakcyjnej w usłudze Azure SQL Managed Instance. Nie jest to powiązane z grupami trybu failover— funkcją usługi Azure SQL Managed Instance, która umożliwia tworzenie pełnych replik do odczytu poszczególnych wystąpień. Podczas konfigurowania replikacji transakcyjnej z grupami trybu failover należy wziąć pod uwagę dodatkowe zagadnienia.

Wymagania

Skonfigurowanie usługi SQL Managed Instance do działania jako wydawca i/lub dystrybutor wymaga:

  • To, że wystąpienie zarządzane wydawcy znajduje się w tej samej sieci wirtualnej, co dystrybutor i subskrybent, lub wirtualne sieci równorzędne lub bramy sieci VPN zostały skonfigurowane między sieciami wirtualnymi wszystkich trzech jednostek.
  • Połączenie korzysta z uwierzytelniania SQL między uczestnikami replikacji.
  • Udział konta usługi Azure Storage dla katalogu roboczego replikacji.
  • Port 445 (wychodzący TCP) jest otwarty w regułach zabezpieczeń sieciowej grupy zabezpieczeń dla wystąpień zarządzanych w celu uzyskania dostępu do udziału plików platformy Azure. Jeśli wystąpi błąd failed to connect to azure storage <storage account name> with os error 53, musisz dodać regułę ruchu wychodzącego do sieciowej grupy zabezpieczeń odpowiedniej podsieci usługi SQL Managed Instance.

1 — Tworzenie grupy zasobów

Użyj witryny Azure Portal , aby utworzyć grupę zasobów o nazwie SQLMI-Repl.

2 — Tworzenie wystąpień zarządzanych

Użyj witryny Azure Portal , aby utworzyć dwa wystąpienia zarządzane SQL w tej samej sieci wirtualnej i podsieci . Na przykład nazwij dwa wystąpienia zarządzane:

  • sql-mi-pub (wraz z niektórymi znakami do losowania)
  • sql-mi-sub (wraz z niektórymi znakami do losowania)

Należy również skonfigurować maszynę wirtualną platformy Azure w celu nawiązania połączenia z wystąpieniami zarządzanymi.

3 — Tworzenie konta usługi Azure Storage

Utwórz konto usługi Azure Storage dla katalogu roboczego, a następnie utwórz udział plików na koncie magazynu.

Skopiuj ścieżkę udziału plików w formacie: \\storage-account-name.file.core.windows.net\file-share-name

Przykład: \\replstorage.file.core.windows.net\replshare

Skopiuj klucze dostępu do magazynu w formacie: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net

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

Aby uzyskać więcej informacji, zobacz Zarządzanie kluczami dostępu do konta magazynu.

4 — Tworzenie bazy danych wydawcy

Połączenie do sql-mi-pub wystąpienia zarządzanego przy użyciu programu SQL Server Management Studio i uruchom następujący kod języka Transact-SQL (T-SQL), aby utworzyć bazę danych wydawcy:

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 — Tworzenie bazy danych subskrybentów

Połączenie do sql-mi-sub wystąpienia zarządzanego przy użyciu programu SQL Server Management Studio i uruchom następujący kod T-SQL, aby utworzyć pustą bazę danych subskrybentów:

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 — Konfigurowanie dystrybucji

Połączenie do sql-mi-pub wystąpienia zarządzanego przy użyciu programu SQL Server Management Studio i uruchom następujący kod języka T-SQL, aby skonfigurować bazę danych dystrybucji.

USE [master]
GO

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

7 — Konfigurowanie wydawcy do korzystania z dystrybutora

W usłudze SQL Managed Instance sql-mi-pubwydawcy zmień wykonywanie zapytania na tryb SQLCMD i uruchom następujący kod, aby zarejestrować nowego dystrybutora u wydawcy.

: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

Uwaga

Pamiętaj, aby użyć tylko ukośników odwrotnych (\) dla parametru file_storage. Użycie ukośnika (/) może spowodować błąd podczas nawiązywania połączenia z udziałem plików.

Ten skrypt konfiguruje lokalnego wydawcę w wystąpieniu zarządzanym, dodaje połączony serwer i tworzy zestaw zadań dla agenta programu SQL Server.

8 — Tworzenie publikacji i subskrybenta

Korzystając z trybu SQLCMD , uruchom następujący skrypt języka T-SQL, aby włączyć replikację bazy danych i skonfigurować replikację między wydawcą, dystrybutorem i subskrybentem.

-- 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 — Modyfikowanie parametrów agenta

Obecnie w usłudze Azure SQL Managed Instance występują problemy z łącznością z agentami replikacji. Chociaż ten problem jest rozwiązywany, obejściem jest zwiększenie wartości limitu czasu logowania dla agentów replikacji.

Uruchom następujące polecenie języka T-SQL dla wydawcy, aby zwiększyć limit czasu logowania:

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

Uruchom ponownie następujące polecenie T-SQL, aby ustawić limit czasu logowania z powrotem na wartość domyślną, jeśli musisz to zrobić:

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

Uruchom ponownie wszystkich trzech agentów, aby zastosować te zmiany.

10 — Testowanie replikacji

Po skonfigurowaniu replikacji można ją przetestować, wstawiając nowe elementy wydawcy i obserwując propagację zmian do subskrybenta.

Uruchom następujący fragment kodu T-SQL, aby wyświetlić wiersze dla subskrybenta:

select * from dbo.ReplTest

Uruchom poniższy fragment kodu T-SQL, aby wstawić dodatkowe wiersze do wydawcy, a następnie ponownie sprawdź wiersze na subskrybenta.

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

Czyszczenie zasobów

Aby usunąć publikację, uruchom następujące polecenie języka T-SQL:

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

Aby usunąć opcję replikacji z bazy danych, uruchom następujące polecenie języka T-SQL:

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

Aby wyłączyć publikowanie i dystrybucję, uruchom następujące polecenie języka T-SQL:

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

Zasoby platformy Azure można wyczyścić, usuwając zasoby usługi SQL Managed Instance z grupy zasobów, a następnie usuwając grupę SQLMI-Replzasobów .

Następne kroki

Możesz również dowiedzieć się więcej na temat replikacji transakcyjnej za pomocą usługi Azure SQL Managed Instance lub dowiedzieć się, jak skonfigurować replikację między wydawcą/dystrybutorem usługi SQL Managed Instance i subskrybentem usługi SQL na maszynie wirtualnej platformy Azure.