Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              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 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.
               
              
            
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 SQL-hanterade instanser och virtuella SQL Server-datorer i Azure.
Anmärkning
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
Kontrollera att du har följande nödvändigheter för att slutföra följande självstudie:
- En prenumeration för Azure.
- Erfarenhet av att distribuera två SQL-hanterade instanser i samma virtuella nätverk.
- En SQL Server-prenumerant, antingen lokalt eller på en virtuell Azure-dator. I den här guiden 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 i 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å SQL-hanterade instanser
Skapa två SQL-hanterade instanser i den nya resursgruppen med hjälp av Azure-portalen.
- 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.  
Mer information om hur du skapar en SQL-hanterad instans finns i Skapa en SQL-hanterad instans i portalen.
Anmärkning
För enkelhetens skull, och eftersom det är den vanligaste konfigurationen, föreslår den här självstudien att du placerar distributörens SQL-hanterade instans 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-subscriber
- Bild: SQL Server 2016 eller senare
- Resursgrupp: samma som den SQL-hanterade instansen
- Virtuellt nätverk: sql-vm-subscriber-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å SQL-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-subscriber-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-värden och ansluta till båda SQL-hanterade instanserna. Mer information om hur du ansluter till en SQL-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 SQL-hanterade instanser 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 zoneefter på Azure Marketplace.
- Välj den privata DNS-zonresursen 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 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
- Gå till din nya privata DNS-zon och välj Översikt. 
- Välj + Lägg till post 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 privata DNS-zon och välj Länkar till virtuellt nätverk. 
- Välj + 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 din sql-hanterade utgivare. 
- 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 filresursens sökväg i formatet: \\storage-account-name.file.core.windows.net\file-share-name
Exempel: \\replstorage.file.core.windows.net\replshare
Kopiera anslutningssträngen för lagringsåtkomstnyckeln i formatet: DefaultEndpointsProtocol=https;AccountName=<Storage-Account-Name>;AccountKey=****;EndpointSuffix=core.windows.net
Exempel: 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 utgivarens instans. Gör det genom att följa dessa steg:
- Starta SQL Server Management Studio på SQL Server.
- Anslut till utgivarens SQL-hanterade instans (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å din sql-hanterade distributörsinstans (sql-mi-distributor). Gör det genom att följa dessa steg:
- Starta SQL Server Management Studio på SQL Server. 
- Anslut till sql-hanterad distributörsinstans ( - sql-mi-distributor).
- Öppna ett nytt frågefönster och kör följande Transact-SQL kod för att konfigurera distributionen på distributörens SQL-hanterade instans: - 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=123456789aBcDeFgHiJkLmNoPqRsTuVwXyZ==;EndpointSuffix=core.windows.net'- Anmärkning - 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 fildelningen.
- Anslut till utgivarens SQL-hanterade instans ( - 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 skapa publikationen. Gör det genom att följa dessa steg:
- Starta SQL Server Management Studio på SQL Server. 
- Anslut till utgivarens SQL-hanterade instans ( - 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 - ReplTutorialdatabas 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äkerhetsinstä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 - ReplTestoch 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. Gör det genom att följa dessa steg:
- Starta SQL Server Management Studio på SQL Server.
- Anslut till utgivarens SQL-hanterade instans (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-subscriber.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-subscriber.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
Replikeringstest
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 hos abonnenten.
Use ReplSub
select * from dbo.ReplTest
Kör följande T-SQL-kodfragment för att lägga till fler rader på utgivaren, och kontrollera sedan dessa rader igen hos abonnenten.
Use ReplTutorial
INSERT INTO ReplTest (ID, c1) VALUES (15, 'pub')
Rensa resurser
- Gå till resursgruppen i Azure-portalen.
- Välj DE SQL-hanterade instanserna och välj sedan Ta bort. Skriv yesi 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.
- 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 yesi 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 yesi 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 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 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 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-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 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.
T 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 detta som en rotorsak.