Självstudie: Konfigurera replikering mellan två hanterade instanser

Gäller för:Azure SQL Managed Instance

Med transaktionsreplikering kan du replikera data från en databas till en annan som finns på SQL Server eller Azure SQL Managed Instance. SQL Managed Instance kan vara utgivare, distributör eller prenumerant i replikeringstopologin. Se konfigurationer för transaktionsreplikering för tillgängliga konfigurationer.

I den här självstudien lär du dig att:

  • Konfigurera en hanterad instans som en replikeringsutgivare och distributör.
  • Konfigurera en hanterad instans som replikeringsprenumerant.

Replicate between two managed instances

Den här självstudien är avsedd för en erfaren målgrupp och förutsätter att användaren är bekant med att distribuera och ansluta till både hanterade instanser och virtuella SQL Server-datorer i Azure.

Kommentar

Behov

Konfigurera SQL Managed Instance för att fungera som utgivare och/eller distributör kräver:

  • Att den hanterade utgivarinstansen finns i samma virtuella nätverk som distributören och prenumeranten, eller VNet-peering eller VPN-gatewayer har konfigurerats mellan de virtuella nätverken för alla tre entiteterna .
  • Anslutningen använder SQL-autentisering mellan replikeringsdeltagare.
  • En Azure Storage-kontoresurs för replikeringsarbetskatalogen.
  • Port 445 (utgående TCP) är öppen i säkerhetsreglerna i NSG för att de hanterade instanserna ska få åtkomst till Azure-filresursen. Om du stöter på felet failed to connect to azure storage <storage account name> with os error 53måste du lägga till en regel för utgående trafik i NSG:n för lämpligt SQL Managed Instance-undernät.

1 – Skapa en resursgrupp

Använd Azure-portalen för att skapa en resursgrupp med namnet SQLMI-Repl.

2 – Skapa hanterade instanser

Använd Azure-portalen för att skapa två SQL Managed Instances i samma virtuella nätverk och undernät. Namnge till exempel de två hanterade instanserna:

  • sql-mi-pub (tillsammans med några tecken för randomisering)
  • sql-mi-sub (tillsammans med några tecken för randomisering)

Du måste också konfigurera en virtuell Azure-dator för att ansluta till dina hanterade instanser.

3 – Skapa ett Azure Storage-konto

Skapa ett Azure Storage-konto för arbetskatalogen och skapa sedan en filresurs i lagringskontot.

Kopiera sökvägen till filresursen i formatet: \\storage-account-name.file.core.windows.net\file-share-name

Exempel: \\replstorage.file.core.windows.net\replshare

Kopiera lagringsåtkomstnycklarna i formatet: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net

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

Mer information finns i Hantera åtkomstnycklar för lagringskonto.

4 – Skapa en utgivardatabas

Anslut till din sql-mi-pub hanterade instans med SQL Server Management Studio och kör följande Transact-SQL-kod (T-SQL) för att skapa din utgivardatabas:

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 – Skapa en prenumerantdatabas

Anslut till din sql-mi-sub hanterade instans med SQL Server Management Studio och kör följande T-SQL-kod för att skapa din tomma prenumerantdatabas:

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 – Konfigurera distribution

Anslut till din sql-mi-pub hanterade instans med SQL Server Management Studio och kör följande T-SQL-kod för att konfigurera distributionsdatabasen.

USE [master]
GO

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

7 – Konfigurera utgivare att använda distributör

Ändra frågekörningen till SQLCMD-läge i utgivarens SQL Managed Instance sql-mi-puboch kör följande kod för att registrera den nya distributören hos utgivaren.

: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

Kommentar

Se till att endast använda omvänt snedstreck (\) för parametern file_storage. Om du använder ett snedstreck (/) kan det orsaka ett fel när du ansluter till filresursen.

Det här skriptet konfigurerar en lokal utgivare på den hanterade instansen, lägger till en länkad server och skapar en uppsättning jobb för SQL Server-agenten.

8 – Skapa publikation och prenumerant

Använd SQLCMD-läge och kör följande T-SQL-skript för att aktivera replikering för databasen och konfigurera replikering mellan utgivare, distributör och prenumerant.

-- 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 – Ändra agentparametrar

Azure SQL Managed Instance har för närvarande vissa serverdelsproblem med anslutning till replikeringsagenterna. Det här problemet åtgärdas, men lösningen är att öka tidsgränsvärdet för inloggning för replikeringsagenterna.

Kör följande T-SQL-kommando på utgivaren för att öka tidsgränsen för inloggning:

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

Kör följande T-SQL-kommando igen för att ställa in tidsgränsen för inloggning till standardvärdet om du behöver göra det:

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

Starta om alla tre agenterna för att tillämpa dessa ändringar.

10 – Testreplikering

När replikeringen har konfigurerats kan du testa den genom att infoga nya objekt i utgivaren och se ändringarna spridas till prenumeranten.

Kör följande T-SQL-kodfragment för att visa raderna i prenumeranten:

select * from dbo.ReplTest

Kör följande T-SQL-kodfragment för att infoga ytterligare rader i utgivaren och kontrollera sedan raderna igen för prenumeranten.

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

Rensa resurser

Om du vill släppa publikationen kör du följande T-SQL-kommando:

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

Om du vill ta bort replikeringsalternativet från databasen kör du följande T-SQL-kommando:

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

Om du vill inaktivera publicering och distribution kör du följande T-SQL-kommando:

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

Du kan rensa dina Azure-resurser genom att ta bort SQL Managed Instance-resurserna från resursgruppen och sedan ta bort resursgruppen SQLMI-Repl.

Nästa steg

Du kan också lära dig mer om transaktionsreplikering med Azure SQL Managed Instance eller lära dig hur du konfigurerar replikering mellan en SQL Managed Instance-utgivare/-distributör och en SQL på Azure VM-prenumerant.