Dela via


Självstudie: Konfigurera transaktionsreplikering mellan Azure SQL Managed Instance och SQL Server

Applies to:Azure SQL Managed Instance

Med transaktionsreplikering kan du replikera data från en databas till en annan på antingen 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 tutorialen lär du dig följande:

  • Konfigurera en SQL-hanterad instans som en replikeringsutgivare.
  • Konfigurera en SQL-hanterad instans som replikeringsdistributör.
  • Konfigurera SQL Server som prenumerant.

Diagram som visar replikering mellan en SQL-hanterad instansutgivare, SQL-hanterad instansdistributör och SQL Server subscriber.

Den här självstudien är avsedd för en erfaren målgrupp och förutsätter att användaren är kunnig i hur man distribuerar och ansluter till både hanterade SQL-instanser och SQL Server virtuella maskiner i Azure-miljön.

Anmärkning

I den här artikeln beskrivs användningen av transaktional replikering i Azure SQL Managed Instance. Det är inte relaterat till failover-grupper, en Azure SQL Managed Instance funktion som gör att du kan skapa fullständiga läsbara repliker av enskilda instanser. Det finns ytterligare överväganden när du konfigurerar transaktionsreplikering med redundansgrupper.

Förutsättningar

Kontrollera att du har följande nödvändigheter för att slutföra följande självstudie:

  • En Azure-prenumeration.
  • Erfarenhet av att distribuera två SQL-hanterade instanser i samma virtuella nätverk.
  • En SQL Server prenumerant, antingen lokalt eller på en Azure virtuell dator. I den här självstudien används en virtuell Azure-dator.
  • SQL Server Management Studio (SSMS) 18.0 eller senare.
  • Den senaste versionen av Azure PowerShell.
  • Portarna 445 och 1433 tillåter SQL-trafik på både Azure-brandväggen och Windows Firewall.

Namn och nätverksinställningar som krävs

I den här självstudien används följande resursnamn och inställningar:

Resource Namn Noteringar
Publisher SQL-hanterad instans sql-mi-publisher Lägga till slumpmässiga tecken för unikhet
Publisher virtuellt nätverk vnet-sql-mi-publisher Är värd för utgivarinstansen
Distribuerad SQL-hanterad instans sql-mi-distributor Måste finnas i samma virtuella nätverk som utgivaren
SQL Server virtuell dator (prenumerant) sql-vm-subscriber Använd en SQL Server version som stöds enligt supportability matrix
Virtuellt prenumerantnätverk sql-vm-subscriber-vnet Kräver VNet-peering till utgivar-VNet
Private DNS zon repldns.com Valfritt namn för DNS-rutering
Nödvändiga portar 445 (SMB), 1433 (SQL) Måste vara öppen på Azure Firewall och Windows Firewall

Skapa resursgruppen

Använd följande PowerShell-kodfragment för att skapa en ny resursgrupp.

Ange dina variabler:

$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"

Skapa resursgruppen:

New-AzResourceGroup -Name $ResourceGroupName -Location $Location

Kontrollera att resursgruppen har skapats:

Get-AzResourceGroup -Name $ResourceGroupName | Select-Object ResourceGroupName, Location

Skapa två SQL-hanterade instanser

Skapa två SQL-hanterade instanser i den här nya resursgruppen med hjälp av portalen Azure.

  • Namnet på den hanterade sql-instansen för utgivaren ska vara sql-mi-publisher (tillsammans med några tecken för randomisering) och namnet på det virtuella nätverket ska vara vnet-sql-mi-publisher.

  • Namnet på distributörens SQL-hanterade instans ska vara sql-mi-distributor (tillsammans med några tecken för randomisering) och det bör finnas i samma virtuella nätverk som sql-hanterade utgivarens instans.

    Skärmbild som visar användningen av utgivar-VNet för distributören.

Mer information om hur du skapar en SQL-hanterad instans finns i Quickstart: Skapa Azure SQL Managed Instance.

Anmärkning

För enkelhetens skull placerar den här självstudien distributören SQL Managed Instance i samma virtuella nätverk som utgivaren. Du kan dock skapa distributören i ett separat virtuellt nätverk med lämplig VNet-peering.

Skapa en SQL Server virtuell dator

Skapa en SQL Server virtuell dator med hjälp av Azure-portalen. Den SQL Server virtuella datorn bör ha följande egenskaper:

  • Namn: sql-vm-subscriber
  • Bild: SQL Server version som stöder transaktionsreplikering med Azure SQL Managed Instance enligt supportability matrix
  • Resursgrupp: samma som den SQL-hanterade instansen
  • Virtuellt nätverk: sql-vm-subscriber-vnet

Mer information om hur du distribuerar en SQL Server virtuell dator till Azure finns i Quickstart: Create SQL Server on a Windows virtual machine in the Azure portal.

Konfigurera VNet-peering

Konfigurera VNet-peering för att aktivera kommunikation mellan det virtuella nätverket för de två SQL-hanterade instanserna och det virtuella nätverket för SQL Server.

Ange dina variabler:

$SubscriptionId = '<SubscriptionID>'
$resourceGroup = 'SQLMI-Repl'
$pubvNet = 'sql-mi-publisher-vnet'
$subvNet = 'sql-vm-subscriber-vnet'
$pubsubName = 'Pub-to-Sub-Peer'
$subpubName = 'Sub-to-Pub-Peer'

Hämta de virtuella nätverken:

$virtualNetwork1 = Get-AzVirtualNetwork -ResourceGroupName $resourceGroup -Name $pubvNet
$virtualNetwork2 = Get-AzVirtualNetwork -ResourceGroupName $resourceGroup -Name $subvNet

Konfigurera VNet-peering från utgivare till prenumerant:

Add-AzVirtualNetworkPeering `
  -Name $pubsubName `
  -VirtualNetwork $virtualNetwork1 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

Konfigurera VNet-peering från prenumerant till utgivare:

Add-AzVirtualNetworkPeering `
  -Name $subpubName `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork1.Id

Verifiera peeringstatus för utgivarnas VNet (bör returnera Connected):

Get-AzVirtualNetworkPeering -ResourceGroupName $resourceGroup -VirtualNetworkName $pubvNet | Select-Object PeeringState

Verifiera peeringstatus för prenumerantens virtuella nätverk (ska returnera Connected):

Get-AzVirtualNetworkPeering -ResourceGroupName $resourceGroup -VirtualNetworkName $subvNet | Select-Object PeeringState

När VNet-peering har upprättats testar du anslutningen genom att starta SQL Server Management Studio (SSMS) på SQL Server-hosten och ansluta till båda SQL-hanterings instanserna. Mer information om hur du ansluter till en SQL managed instance med SSMS finns i Använd SSMS för att ansluta till SQL Managed Instance.

Skärmbild som visar hur du testar anslutningen till de SQL-hanterade instanserna.

Skapa en privat DNS-zon

En privat DNS-zon tillåter DNS-routning mellan SQL-hanterade instanser och SQL Server.

Skapa en privat zon

  1. Logga in på Azure-portalen.

  2. Välj Skapa en resurs för att skapa en ny Azure resurs.

  3. Sök efter private dns zone på Azure Marketplace.

  4. Välj resursen Private DNS zone publicerad av Microsoft och välj sedan Skapa för att skapa DNS-zonen.

  5. Välj prenumerationen och resursgruppen i listrutan.

  6. Ange ett godtyckligt namn för DNS-zonen, till exempel repldns.com.

    Screenshot som visar Skapa privat DNS-zon i Azure-portalen.

  7. Välj Förhandsgranska + skapa. Granska parametrarna för din privata DNS-zon och välj sedan Skapa för att skapa resursen.

Skapa en A-record

  1. Gå till din nya Private DNS zon och välj Overview.

  2. Välj + Lägg till post för att skapa en ny A-post.

  3. Ange namnet på din SQL Server virtuella dator samt den privata interna IP-adressen.

    Skärmbild som visar hur du konfigurerar en A-post.

  4. Välj OK för att skapa A-posten.

  1. Gå till din nya Private DNS zon och välj Virtuella nätverkslänkar.

  2. Välj + Lägg till.

  3. Ange ett namn för länken, till exempel Pub-link.

  4. Välj din prenumeration i listrutan och sedan det virtuella nätverket för din SQL-hanterade instans för utgivare.

  5. Markera kryssrutan bredvid Aktivera automatisk registrering.

    Skärmbild som visar hur du skapar en VNet-länk.

  6. Välj OK för att länka ditt virtuella nätverk.

  7. Upprepa de här stegen för att lägga till en länk för det virtuella prenumerantnätverket med ett namn som Sub-link.

Skapa ett Azure lagringskonto

Skapa ett Azure-lagringskonto för arbetskatalogen och skapa sedan en fildelning i lagringskontot.

Lagringskonfigurationsvärden

Du behöver följande värden när du konfigurerar distribution:

  • Format för arbetskatalogsökväg: \\<storage-account-name>.file.core.windows.net\<file-share-name>
  • Storage reťazec pripojenia format: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=<key>;EndpointSuffix=core.windows.net

Viktigt!

Använd endast omvänt snedstreck (\) i arbetskatalogsökvägen. Snedstreck (/) orsakar anslutningsfel.

Exempelvärden som används i den här självstudien:

Parameter Exempelvärde
Arbetskatalog \\replstorage.file.core.windows.net\replshare
Anslutningssträng DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net

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

Skapa en databas

Skapa en ny databas på SQL-hanterade instansen av publiceraren. Gör det genom att följa dessa steg:

  1. Starta SQL Server Management Studio på SQL Server.
  2. Anslut till utgivarens SQL-hanterade instans (sql-mi-publisher).
  3. Öppna ett nytt frågefönster och kör följande T-SQL-frågor.

Släpp databasen om den finns och skapa en ny:

USE [master];
GO

IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
    DROP DATABASE ReplTutorial;
END
GO

CREATE DATABASE [ReplTutorial];
GO

Skapa replikeringstesttabellen:

USE [ReplTutorial];
GO

CREATE TABLE ReplTest (
   ID INT NOT NULL PRIMARY KEY,
   c1 VARCHAR(100) NOT NULL,
   dt1 DATETIME NOT NULL DEFAULT getdate()
);
GO

Infoga exempeldata:

USE [ReplTutorial];
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

Kontrollera att data infogades:

SELECT * FROM ReplTest;
GO

Förväntade utdata: 5 rader med ID:n 2, 3, 4, 5 och 6.

Konfigurera distribution

När anslutningen har upprättats och du har en exempeldatabas kan du konfigurera distribution på din sql-hanterade distributörsinstans (sql-mi-distributor).

Konfigurationsparametrar för distribution

Samla in följande värden innan du konfigurerar distributionen:

Parameter Description Example
Distributörens DNS-namn FQDN för distributörsinstansen sql-mi-distributor.b6bf57.database.windows.net
Utgivare DNS-namn FQDN för utgivarinstansen sql-mi-publisher.b6bf57.database.windows.net
@working_directory Azure Files sökväg till delning (använd endast backslash) \\replstorage.file.core.windows.net\replshare
@storage_connection_string Lagringskonto anslutningssträng DefaultEndpointsProtocol=https;AccountName=replstorage;...
@security_mode Autentiseringsläge (0 = SQL-autentisering) 0
@login / @password Autentiseringsuppgifter för SQL-inloggning azureuser

Konfigurera distributörsinstansen

  1. Starta SQL Server Management Studio på SQL Server.
  2. Anslut till sql-hanterad distributörsinstans (sql-mi-distributor).
  3. Öppna ett nytt frågefönster och kör följande kommandon.

Lägg till distributören:

EXECUTE sp_adddistributor
    @distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
    @password = '<distributor_admin_password>';

Skapa distributionsdatabasen:

EXECUTE sp_adddistributiondb @database = N'distribution';

Kontrollera att distributionsdatabasen har skapats:

SELECT name FROM sys.databases WHERE name = 'distribution';

Lägg till utgivaren till distributören:

EXECUTE sp_adddistpublisher
    @publisher = 'sql-mi-publisher.b6bf57.database.windows.net',
    @distribution_db = N'distribution',
    @security_mode = 0,
    @login = N'azureuser',
    @password = N'<publisher_password>',
    @working_directory = N'\\replstorage.file.core.windows.net\replshare',
    @storage_connection_string = N'DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net';

Anmärkning

Använd endast omvänt snedstreck (\) för parametern @working_directory . Snedstreck (/) orsakar anslutningsfel.

Registrera distributören på utgivaren

  1. Anslut till utgivarens SQL-hanterade instans (sql-mi-publisher).
  2. Öppna ett nytt frågefönster och kör följande kommando för att registrera distributören:
USE master;
GO

EXECUTE sys.sp_adddistributor
    @distributor = 'sql-mi-distributor.b6bf57.database.windows.net',
    @password = '<distributor_admin_password>';

Kontrollera att distributören är registrerad:

SELECT * FROM sys.servers WHERE is_distributor = 1;

Skapa publikationen

När distributionen har konfigurerats kan du skapa publikationen. Gör det genom att följa dessa steg:

  1. Starta SQL Server Management Studio på SQL Server.

  2. Anslut till utgivarens SQL-hanterade instans (sql-mi-publisher).

  3. I Object Explorer expanderar du noden Replication och högerklickar på mappen Lokal publikation. Välj Ny publikation....

  4. Välj Nästa för att gå förbi välkomstsidan.

  5. På sidan Publikationsdatabas väljer du den ReplTutorial databas som du skapade tidigare. Välj Nästa.

  6. På sidan Publikationstyp väljer du Transaktionspublikation. Välj Nästa.

  7. På sidan Artiklar markerar du kryssrutan bredvid Tabeller. Välj Nästa.

  8. På sidan Filtrera tabellrader väljer du Nästa utan att lägga till några filter.

  9. På sidan Snapshot Agent markerar du kryssrutan bredvid Skapa ögonblicksbild omedelbart och håll ögonblicksbilden tillgänglig för att initiera prenumerationer. Välj Nästa.

  10. På sidan Agent Security väljer du Säkerhetsinställningar... . Ange SQL Server inloggningsuppgifter som ska användas för Snapshot Agent och för att ansluta till utgivaren. Välj OK för att stänga sidan Snapshot Agent Security. Välj Nästa.

    Screenshot som visar hur du konfigurerar Snapshot Agent security.

  11. På sidan Guideåtgärder väljer du Skapa publikationen och (valfritt) väljer du Generera en skriptfil med steg för att skapa publikationen om du vill spara skriptet för senare.

  12. På sidan Slutför guiden namnger du publikationen ReplTestoch väljer Nästa för att skapa publikationen.

  13. När publikationen har skapats uppdaterar du noden Replication i Object Explorer och expanderar Lokala publikationer för att se den nya publikationen.

Skapa prenumerationen

När publikationen har skapats kan du skapa prenumerationen. Gör det genom att följa dessa steg:

  1. Starta SQL Server Management Studio på SQL Server.
  2. Anslut till utgivarens SQL-hanterade instans (sql-mi-publisher).
  3. Öppna ett Ny fråga och kör följande Transact-SQL kommandon. Använd DNS-namnet som konfigurerats i den privata DNS-zonen som en del av prenumerantnamnet.

Prenumerationsparametrar

Parameter Värde Description
@subscriber sql-vm-subscriber.repldns.com Dns-namn för prenumerant (från privat DNS-zon)
@destination_db ReplSub Databas på prenumeranten
@subscription_type Push Distributör push-överför ändringar till prenumerant
@sync_type automatic Automatisk inledande synkronisering

Lägg till prenumerationen:

USE [ReplTutorial];
GO

EXEC sp_addsubscription
    @publication = N'ReplTest',
    @subscriber = N'sql-vm-subscriber.repldns.com',
    @destination_db = N'ReplSub',
    @subscription_type = N'Push',
    @sync_type = N'automatic',
    @article = N'all',
    @update_mode = N'read only',
    @subscriber_type = 0;

Lägg till push-prenumerationsagenten:

EXEC sp_addpushsubscription_agent
    @publication = N'ReplTest',
    @subscriber = N'sql-vm-subscriber.repldns.com',
    @subscriber_db = N'ReplSub',
    @job_login = N'azureuser',
    @job_password = '<Complex Password>',
    @subscriber_security_mode = 0,
    @subscriber_login = N'azureuser',
    @subscriber_password = '<Complex Password>',
    @dts_package_location = N'Distributor';
GO

Kontrollera att prenumerationen har skapats:

SELECT * FROM distribution.dbo.MSsubscriptions;

Replikeringstest

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

Visa initiala data om prenumeranten

Anslut till SQL Server-prenumeranten och kör följande fråga:

USE ReplSub;
GO

SELECT * FROM dbo.ReplTest;

Förväntade utdata: 5 rader med ID:n 2, 3, 4, 5 och 6 (de första data från utgivaren).

Infoga nya data på utgivaren

Anslut till utgivarens SQL-hanterade instans (sql-mi-publisher) och infoga en ny rad:

USE ReplTutorial;
GO

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

Kontrollera infogningen på utgivaren:

SELECT * FROM ReplTest WHERE ID = 15;

Verifiera replikering till prenumeranten

Efter en liten stund ansluter du till prenumeranten och kontrollerar att den nya raden har replikerats:

USE ReplSub;
GO

SELECT * FROM dbo.ReplTest WHERE ID = 15;

Förväntade utdata: 1 rad med ID 15- och c1-värdet "pub".

Rensa resurser

  1. Gå till resursgruppen i Azure-portalen.
  2. Välj DE SQL-hanterade instanserna och välj sedan Ta bort. Skriv yes i textrutan för att bekräfta att du vill ta bort resursen och välj sedan Ta bort. Den här processen kan ta lite tid att slutföra i bakgrunden, och tills den är klar kan du inte ta bort det virtuella klustret eller andra beroende resurser. Övervaka borttagningen på fliken Aktivitet för att bekräfta att din SQL-hanterade instans har tagits bort.
  3. När DEN SQL-hanterade instansen har tagits bort tar du bort det virtuella klustret genom att välja det i resursgruppen och sedan välja Ta bort. Skriv yes i textrutan för att bekräfta att du vill ta bort resursen och välj sedan Ta bort.
  4. Ta bort eventuella återstående resurser. Skriv yes i textrutan för att bekräfta att du vill ta bort resursen och välj sedan Ta bort.
  5. Ta bort resursgruppen genom att välja Ta bort resursgrupp, skriva in namnet på resursgruppen myResourceGroupoch sedan välja Ta bort.

Kända fel

Windows inloggningar stöds inte

Exception Message: Windows logins are not supported in this version of SQL Server.

Agenten konfigurerades med en Windows inloggning och måste använda en SQL Server inloggning i stället. Använd sidan Agent Security i egenskaperna Publication för att ändra inloggningsuppgifterna till en SQL Server inloggning.

Det gick inte att ansluta till Azure Storage

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 53.
2019-11-19 02:21:05.07 Obtained Azure Storage Connection String for replstorage
2019-11-19 02:21:05.07 Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare'
2019-11-19 02:21:31.21 Failed to connect to Azure Storage '' with OS error: 53.

Detta beror troligen på att port 445 är stängd i antingen Azure-brandväggen, Windows Firewall eller båda.

Connecting to Azure Files Storage '\\replstorage.file.core.windows.net\replshare' Failed to connect to Azure Storage '' with OS error: 55.

Att använda ett snedstreck i stället för ett bakåtsnedstreck i filsökvägen för filresursen kan också orsaka det här felet.

  • Detta är acceptabelt: \\replstorage.file.core.windows.net\replshare
  • Detta kan orsaka ett OS 55-fel: \\replstorage.file.core.windows.net/replshare

Det gick inte att ansluta till prenumeranten

The process could not connect to Subscriber 'SQL-VM-SUBSCRIBER
Could not open a connection to SQL Server [53].
A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections.

Möjliga lösningar:

  • Kontrollera att port 1433 är öppen.
  • Kontrollera att TCP/IP är aktiverat för prenumeranten.
  • Bekräfta att DNS-namnet användes när prenumeranten skapades.
  • Kontrollera att dina virtuella nätverk är korrekt länkade i den privata DNS-zonen.
  • Kontrollera att A-record är korrekt konfigurerad.
  • Kontrollera att din VNet-peering är korrekt konfigurerad.

Inga publikationer som du kan prenumerera på

När du lägger till en ny prenumeration med hjälp av guiden Ny prenumeration kan du på sidan Publikation upptäcka att det inte finns några databaser och publikationer listade som tillgängliga alternativ, och du kan se följande felmeddelande:

There are no publications to which you can subscribe, either because this server has no publications or because you do not have sufficient privileges to access the publications.

Även om det är möjligt att det här felmeddelandet är korrekt och det verkligen inte finns några publikationer tillgängliga på utgivaren som du har anslutit till eller om du saknar tillräcklig behörighet, kan en äldre version av SQL Server Management Studio också orsaka det här felet. Prova att uppgradera till SQL Server Management Studio 18.0 eller senare för att utesluta det som en möjlig rotorsak.