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

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.
  • Konfigurera en hanterad instans som replikeringsdistributör.
  • Konfigurera SQL Server som prenumerant.

Replication between a managed instance publisher, managed instance distributor, and SQL Server subscriber

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

I den här artikeln beskrivs användningen av transaktionsreplikering i Azure SQL Managed Instance. Det är inte relaterat till redundansgrupper, 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

För att kunna slutföra den här självstudien behöver du följande:

  • En Azure-prenumeration.
  • Erfarenhet av att distribuera två hanterade instanser i samma virtuella nätverk.
  • En SQL Server-prenumerant, antingen lokalt eller på en virtuell Azure-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-brandväggen.

Skapa resursgruppen

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

# set variables
$ResourceGroupName = "SQLMI-Repl"
$Location = "East US 2"

# Create a new resource group
New-AzResourceGroup -Name  $ResourceGroupName -Location $Location

Skapa två hanterade instanser

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

  • Namnet på den hanterade utgivarens instans 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å den distributörshanterade instansen ska vara sql-mi-distributor (tillsammans med några tecken för slumpmässighet) och det bör finnas i samma virtuella nätverk som den hanterade utgivarens instans.

    Use the publisher VNet for the distributor

Mer information om hur du skapar en hanterad instans finns i Skapa en hanterad instans i portalen.

Kommentar

För enkelhetens skull, och eftersom det är den vanligaste konfigurationen, föreslår den här självstudien att den hanterade distributörsinstansen placeras i samma virtuella nätverk som utgivaren. Det är dock möjligt att skapa distributören i ett separat virtuellt nätverk. För att göra det måste du konfigurera VNet-peering mellan utgivarens och distributörens virtuella nätverk och sedan konfigurera VNet-peering mellan distributörens och prenumerantens virtuella nätverk.

Skapa en virtuell SQL Server-dator

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

  • Namn: sql-vm-sub
  • Bild: SQL Server 2016 eller senare
  • Resursgrupp: samma som den hanterade instansen
  • Virtuellt nätverk: sql-vm-sub-vnet

Mer information om hur du distribuerar en virtuell SQL Server-dator till Azure finns i Snabbstart: Skapa en virtuell SQL Server-dator.

Konfigurera VNet-peering

Konfigurera VNet-peering för att aktivera kommunikation mellan det virtuella nätverket för de två hanterade instanserna och det virtuella nätverket för SQL Server. Om du vill göra det använder du det här PowerShell-kodfragmentet:

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

$virtualNetwork1 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $pubvNet

 $virtualNetwork2 = Get-AzVirtualNetwork `
  -ResourceGroupName $resourceGroup `
  -Name $subvNet  

# Configure VNet peering from publisher to subscriber
Add-AzVirtualNetworkPeering `
  -Name $pubsubName `
  -VirtualNetwork $virtualNetwork1 `
  -RemoteVirtualNetworkId $virtualNetwork2.Id

# Configure VNet peering from subscriber to publisher
Add-AzVirtualNetworkPeering `
  -Name $subpubName `
  -VirtualNetwork $virtualNetwork2 `
  -RemoteVirtualNetworkId $virtualNetwork1.Id

# Check status of peering on the publisher VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $pubvNet `
 | Select PeeringState

# Check status of peering on the subscriber VNet; should say connected
Get-AzVirtualNetworkPeering `
 -ResourceGroupName $resourceGroup `
 -VirtualNetworkName $subvNet `
 | Select PeeringState

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

Test connectivity to the managed instances

Skapa en privat DNS-zon

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

Skapa en privat DNS-zon

  1. Logga in på Azure-portalen.

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

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

  4. Välj den Privat DNS zonresurs som publicerats 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.

    Create private DNS zone

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

Skapa en A-post

  1. Gå till din nya Privat DNS zon och välj Översikt.

  2. Välj + Postuppsättning för att skapa en ny A-post.

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

    Configure an A record

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

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

  2. Markera + Lägg till.

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

  4. Välj din prenumeration i listrutan och välj sedan det virtuella nätverket för den hanterade utgivarens instans.

  5. Markera kryssrutan bredvid Aktivera automatisk registrering.

    Create VNet link

  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 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åtkomstnyckeln anslutningssträng 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.

Skapa en -databas

Skapa en ny databas på den hanterade utgivarens instans. Följ stegen nedan:

  1. Starta SQL Server Management Studio på SQL Server.
  2. Anslut till den hanterade instansensql-mi-publisher.
  3. Öppna ett nytt frågefönster och kör följande T-SQL-fråga för att skapa databasen.
-- Create the databases
USE [master]
GO

-- Drop database if it exists
IF EXISTS (SELECT * FROM sys.sysdatabases WHERE name = 'ReplTutorial')
BEGIN
    DROP DATABASE ReplTutorial
END
GO

-- Create new database
CREATE DATABASE [ReplTutorial]
GO

-- Create table
USE [ReplTutorial]
GO
CREATE TABLE ReplTest (
   ID INT NOT NULL PRIMARY KEY,
   c1 VARCHAR(100) NOT NULL,
   dt1 DATETIME NOT NULL DEFAULT getdate()
)
GO

-- Populate table with data
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
SELECT * FROM ReplTest
GO

Konfigurera distribution

När anslutningen har upprättats och du har en exempeldatabas kan du konfigurera distribution på den sql-mi-distributor hanterade instansen. Följ stegen nedan:

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

  2. Anslut till den hanterade instansensql-mi-distributor.

  3. Öppna ett nytt frågefönster och kör följande Transact-SQL-kod för att konfigurera distributionen på den hanterade distributörsinstansen:

    EXEC sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
    
    EXEC sp_adddistributiondb @database = N'distribution'
    
    EXEC sp_adddistpublisher @publisher = 'sql-mi-publisher.b6bf57.database.windows.net', -- primary publisher
         @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'<storage_connection_string>'
         -- example: @storage_connection_string = N'DefaultEndpointsProtocol=https;AccountName=replstorage;AccountKey=dYT5hHZVu9aTgIteGfpYE64cfis0mpKTmmc8+EP53GxuRg6TCwe5eTYWrQM4AmQSG5lb3OBskhg==;EndpointSuffix=core.windows.net'
    
    

    Kommentar

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

  4. Anslut till den hanterade instansensql-mi-publisher.

  5. Öppna ett nytt frågefönster och kör följande Transact-SQL-kod för att registrera distributören på utgivaren:

    Use MASTER
    EXEC sys.sp_adddistributor @distributor = 'sql-mi-distributor.b6bf57.database.windows.net', @password = '<distributor_admin_password>'
    

Skapa publikationen

När distributionen har konfigurerats kan du nu skapa publikationen. Följ stegen nedan:

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

  2. Anslut till den hanterade instansensql-mi-publisher.

  3. I Object Explorer expanderar du replikeringsnoden 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 Ögonblicksbildsagent markerar du kryssrutan bredvid Skapa ögonblicksbild omedelbart och håller ögonblicksbilden tillgänglig för att initiera prenumerationer. Välj Nästa.

  10. På sidan Agentsäkerhet väljer du Säkerhet Inställningar.... Ange autentiseringsuppgifter för SQL Server-inloggning som ska användas för Ögonblicksbildsagenten och för att ansluta till utgivaren. Välj OK för att stänga sidan Säkerhet för ögonblicksbildsagenten. Välj Nästa.

    Configure 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 ReplTest och väljer Nästa för att skapa publikationen.

  13. När publikationen har skapats uppdaterar du replikeringsnoden 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. Följ stegen nedan:

  1. Starta SQL Server Management Studio på SQL Server.
  2. Anslut till den hanterade instansensql-mi-publisher.
  3. Öppna ett nytt frågefönster och kör följande Transact-SQL-kod för att lägga till prenumerationen och distributionsagenten. Använd DNS som en del av prenumerantnamnet.
use [ReplTutorial]
exec sp_addsubscription
@publication = N'ReplTest',
@subscriber = N'sql-vm-sub.repldns.com', -- include the DNS configured in the private DNS zone
@destination_db = N'ReplSub',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0

exec sp_addpushsubscription_agent
@publication = N'ReplTest',
@subscriber = N'sql-vm-sub.repldns.com', -- include the DNS configured in the private DNS zone
@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

Testa replikering

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:

Use ReplSub
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.

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

Rensa resurser

  1. Gå till resursgruppen i Azure-portalen.
  2. Välj de 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 den hanterade instansen har tagits bort.
  3. När den 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 Agentsäkerhet i publikationsegenskapernafö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 Hämtad Azure Storage-Anslut ionssträng för omlagring 2019-11-19 02:21:05.07 Anslut till Azure Files Storage '\replstorage.file.core.windows.net\replshare' 2019-11-19 02:21:31.21 Det gick inte att ansluta till Azure Storage med OS-fel: 53.

Detta beror troligen på att port 445 är stängd i antingen Azure-brandväggen, Windows-brandväggen 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 omvänt snedstreck i filsökvägen för filresursen kan orsaka det här felet.

  • Det här är okej: \\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-SUB 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-posten ä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 det här felet också orsakas av en äldre version av SQL Server Management Studio. Prova att uppgradera till SQL Server Management Studio 18.0 eller senare för att utesluta detta som en rotorsak.

Nästa steg

Aktivera säkerhetsfunktioner

I artikeln Vad är Azure SQL Managed Instance? finns en omfattande lista över sätt att skydda databasen. Följande säkerhetsfunktioner diskuteras:

SQL Managed Instance-funktioner

En fullständig översikt över funktioner för hanterade instanser finns i: