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.
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 varavnet-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.
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.
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
Logga in på Azure-portalen.
Välj Skapa en resurs för att skapa en ny Azure-resurs.
Sök
private dns zone
efter på Azure Marketplace.Välj den Privat DNS zonresurs som publicerats av Microsoft och välj sedan Skapa för att skapa DNS-zonen.
Välj prenumerationen och resursgruppen i listrutan.
Ange ett godtyckligt namn för DNS-zonen, till exempel
repldns.com
.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
Gå till din nya Privat DNS zon och välj Översikt.
Välj + Postuppsättning för att skapa en ny A-post.
Ange namnet på den virtuella SQL Server-datorn samt den privata interna IP-adressen.
Välj OK för att skapa A-posten.
Länka det virtuella nätverket
Gå till din nya Privat DNS zon och välj Virtuella nätverkslänkar.
Markera + Lägg till.
Ange ett namn för länken, till exempel
Pub-link
.Välj din prenumeration i listrutan och välj sedan det virtuella nätverket för den hanterade utgivarens instans.
Markera kryssrutan bredvid Aktivera automatisk registrering.
Välj OK för att länka ditt virtuella nätverk.
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:
- Starta SQL Server Management Studio på SQL Server.
- Anslut till den hanterade instansen
sql-mi-publisher
. - Ö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:
Starta SQL Server Management Studio på SQL Server.
Anslut till den hanterade instansen
sql-mi-distributor
.Ö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.Anslut till den hanterade instansen
sql-mi-publisher
.Ö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:
Starta SQL Server Management Studio på SQL Server.
Anslut till den hanterade instansen
sql-mi-publisher
.I Object Explorer expanderar du replikeringsnoden och högerklickar på mappen Lokal publikation. Välj Ny publikation....
Välj Nästa för att gå förbi välkomstsidan.
På sidan Publikationsdatabas väljer du den
ReplTutorial
databas som du skapade tidigare. Välj Nästa.På sidan Publikationstyp väljer du Transaktionspublikation. Välj Nästa.
På sidan Artiklar markerar du kryssrutan bredvid Tabeller. Välj Nästa.
På sidan Filtrera tabellrader väljer du Nästa utan att lägga till några filter.
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.
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.
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.
På sidan Slutför guiden namnger du publikationen
ReplTest
och väljer Nästa för att skapa publikationen.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:
- Starta SQL Server Management Studio på SQL Server.
- Anslut till den hanterade instansen
sql-mi-publisher
. - Ö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
- Gå till resursgruppen i Azure-portalen.
- 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. - 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. - 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. - Ta bort resursgruppen genom att välja Ta bort resursgrupp, skriva in namnet på resursgruppen
myResourceGroup
och 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 publikationsegenskaperna 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 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-granskning
- Alltid krypterad
- Hotidentifiering
- Dynamisk datamaskning
- Säkerhet på radnivå
- Transparent datakryptering (TDE)
SQL Managed Instance-funktioner
En fullständig översikt över funktioner för hanterade instanser finns i: