Kurz: Konfigurace replikace mezi dvěma spravovanými instancemi

Platí pro: Azure SQL Managed Instance

Transakční replikace umožňuje replikovat data z jedné databáze do jiné hostované na SQL Serveru nebo ve spravované instanci Azure SQL. Spravovaná instance SQL může být vydavatelem, distributorem nebo odběratelem v topologii replikace. Dostupné konfigurace najdete v konfiguracích transakční replikace.

V tomto kurzu se naučíte:

  • Nakonfigurujte spravovanou instanci jako vydavatele replikace a distributora.
  • Nakonfigurujte spravovanou instanci jako odběratele replikace.

Replikace mezi dvěma spravovanými instancemi

Tento kurz je určený zkušeným cílovým skupinám a předpokládá, že uživatel je obeznámen s nasazením a připojením k spravovaným instancím i virtuálním počítačům s SQL Serverem v Rámci Azure.

Poznámka:

  • Tento článek popisuje použití transakční replikace ve službě Azure SQL Managed Instance. Nesouvisí se skupinami převzetí služeb při selhání, funkcí azure SQL Managed Instance, která umožňuje vytvářet úplné čitelné repliky jednotlivých instancí. Při konfiguraci transakční replikace se skupinami převzetí služeb při selhání existují další aspekty.

Požadavky

Konfigurace služby SQL Managed Instance tak, aby fungovala jako vydavatel nebo distributor, vyžaduje:

  • Že spravovaná instance vydavatele je ve stejné virtuální síti jako distributor a odběratel nebo partnerský vztah virtuálních sítí nebo brány VPN byly nakonfigurovány mezi virtuálními sítěmi všech tří entit.
  • Při připojování mezi účastníky replikace se používá ověřování SQL.
  • Sdílená složka účtu úložiště Azure pro pracovní adresář replikace.
  • Port 445 (odchozí tcp) je otevřený v pravidlech zabezpečení skupiny zabezpečení sítě pro spravované instance pro přístup ke sdílené složce Azure. Pokud dojde k chybě failed to connect to azure storage <storage account name> with os error 53, budete muset přidat odchozí pravidlo do skupiny zabezpečení sítě příslušné podsítě služby SQL Managed Instance.

1. Vytvoření skupiny prostředků

Pomocí webu Azure Portal vytvořte skupinu prostředků s názvem SQLMI-Repl.

2. Vytváření spravovaných instancí

Pomocí webu Azure Portal vytvořte dvě spravované instance SQL ve stejné virtuální síti a podsíti. Pojmenujte například dvě spravované instance:

  • sql-mi-pub (spolu s znaky pro náhodnost)
  • sql-mi-sub (spolu s znaky pro náhodnost)

Budete také muset nakonfigurovat virtuální počítač Azure pro připojení ke spravovaným instancím.

3. Vytvoření účtu úložiště Azure

Vytvořte účet úložiště Azure pro pracovní adresář a pak vytvořte sdílenou složku v rámci účtu úložiště.

Zkopírujte cestu ke sdílené složce ve formátu: \\storage-account-name.file.core.windows.net\file-share-name

Příklad: \\replstorage.file.core.windows.net\replshare

Zkopírujte přístupové klíče k úložišti ve formátu: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net

Příklad: DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net

Další informace najdete v tématu Správa přístupových klíčů účtu úložiště.

4. Vytvoření databáze vydavatele

Připojte sql-mi-pub se ke spravované instanci pomocí aplikace SQL Server Management Studio a spuštěním následujícího kódu Jazyka Transact-SQL (T-SQL) vytvořte databázi vydavatele:

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. Vytvoření databáze odběratelů

Připojte sql-mi-sub se ke spravované instanci pomocí aplikace SQL Server Management Studio a spuštěním následujícího kódu T-SQL vytvořte prázdnou databázi odběratelů:

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

Připojte sql-mi-pub se ke spravované instanci pomocí aplikace SQL Server Management Studio a spuštěním následujícího kódu T-SQL nakonfigurujte distribuční databázi.

USE [master]
GO

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

7. Konfigurace vydavatele pro použití distributora

Ve službě SQL Managed Instance sql-mi-pubvydavatele změňte spuštění dotazu do režimu SQLCMD a spuštěním následujícího kódu zaregistrujte nového distributora u vydavatele.

: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

Poznámka:

Nezapomeňte pro parametr file_storage použít pouze zpětná lomítka (\). Použití lomítka (/) může způsobit chybu při připojování ke sdílené složce.

Tento skript nakonfiguruje místního vydavatele ve spravované instanci, přidá propojený server a vytvoří sadu úloh pro agenta SQL Serveru.

8. Vytvoření publikace a odběratele

Pomocí režimu SQLCMD spusťte následující skript T-SQL, který povolí replikaci pro vaši databázi a nakonfiguruje replikaci mezi vydavatelem, distributorem a odběratelem.

-- 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. Úprava parametrů agenta

Ve službě Azure SQL Managed Instance dochází v současné době k některým problémům s připojením k agentům replikace. I když se tento problém řeší, alternativním řešením je zvýšit hodnotu časového limitu přihlášení pro agenty replikace.

Spuštěním následujícího příkazu T-SQL v vydavateli zvyšte časový limit přihlášení:

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

Spuštěním následujícího příkazu T-SQL znovu nastavte časový limit přihlášení zpět na výchozí hodnotu, pokud to musíte udělat:

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

Pokud chcete tyto změny použít, restartujte všechny tři agenty.

10. Testovací replikace

Po nakonfigurování replikace ji můžete otestovat vložením nových položek na vydavatele a sledováním změn, které se rozšíří do odběratele.

Spuštěním následujícího fragmentu kódu T-SQL zobrazte řádky odběratele:

select * from dbo.ReplTest

Spuštěním následujícího fragmentu kódu T-SQL vložte do vydavatele další řádky a pak znovu zkontrolujte řádky odběratele.

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

Vyčištění prostředků

Pokud chcete publikaci odstranit, spusťte následující příkaz T-SQL:

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

Pokud chcete odebrat možnost replikace z databáze, spusťte následující příkaz T-SQL:

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

Pokud chcete zakázat publikování a distribuci, spusťte následující příkaz T-SQL:

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

Prostředky Azure můžete vyčistit odstraněním prostředků služby SQL Managed Instance ze skupiny prostředků a odstraněním skupiny SQLMI-Replprostředků .

Další kroky

Další informace o transakční replikaci pomocí služby Azure SQL Managed Instance nebo informace o konfiguraci replikace mezi vydavatelem nebo distributorem služby SQL Managed Instance a SQL pro předplatitele virtuálního počítače Azure.