Dela via


Konfigurera länk med skript – Azure SQL Managed Instance

Applies to:Azure SQL Managed Instance

I den här artikeln lär du dig hur du konfigurerar en link mellan SQL Server och Azure SQL Managed Instance med Transact-SQL och PowerShell eller Azure CLI skript. Med länken replikeras databaser från den ursprungliga primära repliken till den sekundära repliken nästan i realtid.

När länken har skapats kan du sedan växla över till den sekundära repliken för migrering eller katastrofåterställning.

Note

Överblick

Använd länkfunktionen för att replikera databaser från den första primära till den sekundära repliken. För SQL Server 2022 kan den första primära vara antingen SQL Server eller Azure SQL Managed Instance. För SQL Server 2019 och tidigare versioner måste den första primära vara SQL Server. När länken har konfigurerats replikeras databasen från den första primära till den sekundära repliken.

Du kan välja att lämna länken på plats för kontinuerlig datareplikering i en hybridmiljö mellan den primära och sekundära repliken, eller så kan du växla över databasen till den sekundära repliken, migrera till Azure eller för haveriberedskap. För SQL Server 2019 och tidigare versioner bryter växling vid fel till Azure SQL Managed Instance länken och återställning vid fel stöds inte. Med SQL Server 2022 kan du behålla länken och växla fram och tillbaka mellan de två replikerna.

Om du planerar att endast använda den sekundära hanterade instansen för haveriberedskap kan du spara på licenskostnaderna genom att aktivera hybridredundansförmånen.

Använd anvisningarna i den här artikeln för att manuellt konfigurera länken mellan SQL Server och Azure SQL Managed Instance. När länken har skapats får källdatabasen en skrivskyddad kopia på din sekundära målreplika.

Tips

För att förenkla användningen av T-SQL-skript med rätt parametrar för din miljö rekommenderar vi starkt att du använder guiden Managed Instance länk i SQL Server Management Studio (SSMS) för att generera ett skript för att skapa länken. På sidan Summary i fönstret Ny Managed Instance länk väljer du Script i stället för Finish.

Förutsättningar

För att replikera dina databaser behöver du följande krav:

Tänk på följande:

  • Länkfunktionen stöder en databas per länk. Om du vill replikera flera databaser på en instans skapar du en länk för varje enskild databas. Om du till exempel vill replikera 10 databaser till SQL Managed Instance skapar du 10 enskilda länkar.
  • Sorteringen mellan SQL Server och SQL Managed Instance bör vara densamma. En skillnad i sorteringen kan leda till en skillnad i versaliseringen av servernamnet och förhindra en lyckad anslutning från SQL Server till SQL Managed Instance.
  • Fel 1475 på din primära SQL Server indikerar att du måste starta en ny säkerhetskopieringskedja genom att skapa en fullständig säkerhetskopia utan alternativet COPY ONLY.
  • Om du vill upprätta en länk eller övergång från SQL Managed Instance till SQL Server 2025 måste ditt SQL Managed Instance konfigureras med uppdateringsprincipen SQL Server 2025. Datareplikering och redundans från SQL Managed Instance till SQL Server 2025 stöds inte av instanser som konfigurerats med en felaktig uppdateringsprincip.
  • För att upprätta en länk, eller redundansväxling, från SQL Managed Instance till SQL Server 2022, måste din SQL Managed Instance vara konfigurerad med SQL Server 2022-uppdateringspolicy. Datareplikering och redundans från SQL Managed Instance till SQL Server 2022 stöds inte av instanser som konfigurerats med en felaktig uppdateringsprincip.
  • Du kan upprätta en länk från en version av SQL Server som stöds till en SQL hanterad instans som konfigurerats med Always-up-to-date uppdateringsprincip, men efter övergång till SQL hanterad instans kommer du inte längre att kunna replikera data eller återgå till din SQL Server instans.

Behörigheter

För SQL Server bör du ha behörigheterna sysadmin.

För Azure SQL Managed Instance bör du vara medlem i SQL Managed Instance Deltagare eller ha följande anpassade rollbehörigheter:

Microsoft.Sql/resurs Nödvändiga behörigheter
Microsoft.Sql/managedInstances /läsa, /skriva
Microsoft.Sql/managedInstances/hybridCertificate /handling
Microsoft.Sql/managedInstances/databaser /läs, /radera, /skriv, /återställningKomplett/åtgärd, /läsBackuper/åtgärd, /återställDetajler/läs
Microsoft.Sql/managedInstances/distributedAvailabilityGroups /läs, /skriv, /radera, /sättRoll/åtgärd
Microsoft.Sql/managedInstances/endpointCertificates /läsa
Microsoft.Sql/managedInstances/hybridLink /läsa, /skriva, /radera
Microsoft. Sql/managedInstances/serverTrustCertificates /skriv, /radera, /läsa

Terminologi och namngivningskonventioner

När du kör skript från den här användarhandboken är det viktigt att inte missta SQL Server och SQL Managed Instance namn för deras fullständigt kvalificerade domännamn (FQDN). I följande tabell förklaras vad de olika namnen exakt representerar och hur de får sina värden:

Terminologi Beskrivning Så här får du reda på det
Första primära 1 Den SQL Server eller SQL Managed Instance där du först skapar länken för att replikera databasen till den sekundära repliken.
Primär kopia Den SQL Server eller SQL Managed Instance som för närvarande är värd för den primära databasen.
Sekundär replik Den SQL Server eller SQL Managed Instance som tar emot replikerade data nästan i realtid från den aktuella primära repliken.
SQL Server namn Kort SQL Server namn med ett ord. Till exempel: sqlserver1. Kör SELECT @@SERVERNAME från T-SQL.
SQL Server FQDN Fullständigt domännamn (FQDN) för din SQL Server. Till exempel: sqlserver1.domain.com. Se din nätverkskonfiguration (DNS) lokalt eller servernamnet om du använder en Azure virtuell dator (VM).
namn för SQL Managed Instance Kort, endordigt namn på SQL Managed Instance. Till exempel: managedinstance1. Se namnet på din hanterade instans i Azure-portalen.
SQL Hanterad instans FQDN Fullständigt domännamn (FQDN) för din SQL Managed Instance. Till exempel: managedinstance1.6d710bcf372b.database.windows.net. Se värdnamnet på översiktssidan för SQL Managed Instance i Azure portalen.
Lösbart domännamn DNS-namn som kan matchas till en IP-adress. Om du till exempel kör nslookup sqlserver1.domain.com ska du returnera en IP-adress, till exempel 10.0.0.1. Kör kommandot nslookup från kommandotolken.
SQL Server IP-adress IP-adressen för din SQL Server. Om det finns flera IP-adresser på SQL Server väljer du IP-adress som är tillgänglig från Azure. Kör kommandot ipconfig från kommandotolken för värdoperativsystemet som kör SQL Server.

1 Konfigurera Azure SQL Managed Instance som din första primära stöds från och med SQL Server 2022 CU10.

Konfigurera databasåterställning och säkerhetskopiering

Om SQL Server är din första primära databas måste databaser som replikeras via länken finnas i den fullständiga återställningsmodellen och ha minst en säkerhetskopia. Eftersom Azure SQL Managed Instance tar säkerhetskopior automatiskt hoppar du över det här steget om SQL Managed Instance är din första primära.

När du skapar en länk sker den första seedingen mellan de primära och sekundära replikerna genom att ta en fullständig säkerhetskopia av databasen på den primära repliken, överföra den till den sekundära repliken och återställa den där. När du gör den fullständiga säkerhetskopieringen WITH CHECKSUM rekommenderar vi att du använder alternativet för att säkerställa att säkerhetskopian är giltig och inte har några skador. Mer information finns i BACKUP (Transact-SQL).

Kör följande kod på SQL Server för alla databaser som du vill replikera. Ersätt <DatabaseName> med det faktiska databasnamnet.

-- Run on SQL Server
-- Set full recovery model for all databases you want to replicate.
ALTER DATABASE [<DatabaseName>] SET RECOVERY FULL
GO

-- Execute backup for all databases you want to replicate.
BACKUP DATABASE [<DatabaseName>] TO DISK = N'<DiskPath>'
GO

Mer information finns i Skapa en fullständig databassäkerhetskopia.

Note

Länken stöder endast replikering av användardatabaser. Replikering av systemdatabaser stöds inte. För att replikera objekt på instansnivå (lagrade i master eller msdb databaser) rekommenderar vi att du skriptar ut dem och kör T-SQL-skript på målinstansen.

Upprätta förtroende mellan instanser

Först måste du upprätta förtroende mellan de två instanserna och skydda de slutpunkter som används för att kommunicera och kryptera data i nätverket. Distribuerade tillgänglighetsgrupper använder den befintliga tillgänglighetsgruppen databasspeglingsslutpunkti stället för att ha en egen dedikerad slutpunkt. Därför måste säkerhet och förtroende konfigureras mellan de två instanserna via tillgänglighetsgruppens databasspeglingsslutpunkt.

Note

Länken baseras på Always On-tillgänglighetsgruppens teknik. Databasspeglingsslutpunkten är en specialslutpunkt som uteslutande används av tillgänglighetsgrupper för att ta emot anslutningar från andra instanser. Termen databasspeglingsslutpunkt bör inte förväxlas med den äldre SQL Server databasspeglingsfunktionen.

Certifikatbaserat förtroende är det enda sättet att skydda databasspeglingsslutpunkter för SQL Server och SQL Managed Instance. Om du har befintliga tillgänglighetsgrupper som använder Windows authentication måste du lägga till certifikatbaserat förtroende till den befintliga speglingsslutpunkten som ett sekundärt autentiseringsalternativ. Du kan göra detta med hjälp av instruktionen ALTER ENDPOINT, som du ser senare i den här artikeln.

Viktig

Certifikat genereras med ett förfallodatum och en förfallotid. De måste förnyas och roteras innan de upphör att gälla.

Följande visar en översikt över processen för att skydda databasspeglingsslutpunkter för både SQL Server och SQL Managed Instance:

  1. Generera ett certifikat på SQL Server och hämta dess offentliga nyckel.
  2. Hämta en offentlig nyckel för SQL Managed Instance-certifikatet.
  3. Byt de offentliga nycklarna mellan SQL Server och SQL Managed Instance.
  4. Importera Azure betrodda rotcertifikatutfärdarnycklar till SQL Server

I följande avsnitt beskrivs de här stegen i detalj.

Skapa ett certifikat på SQL Server och importera dess offentliga nyckel till SQL Managed Instance

Skapa först databashuvudnyckeln i master-databasen, om den inte redan finns. Infoga lösenordet i stället för <strong_password> i följande skript och förvara det på en konfidentiell och säker plats. Kör det här T-SQL-skriptet på SQL Server:

-- Run on SQL Server
-- Create a master key encryption password
-- Keep the password confidential and in a secure place
USE MASTER
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
BEGIN
    PRINT 'Creating master key.' + CHAR(13) + 'Keep the password confidential and in a secure place.'
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>'
END
ELSE
    PRINT 'Master key already exists.'
GO

Generera sedan ett autentiseringscertifikat på SQL Server. Ersätt i följande skript:

  • @cert_expiry_date med önskat certifikatets förfallodatum (framtida datum).

Registrera det här datumet och ange en påminnelse om att rotera (uppdatera) SQL Server-certifikatet före utgångsdatumet för att säkerställa kontinuerlig drift av länken.

Viktig

Vi rekommenderar starkt att du använder det automatiskt genererade certifikatnamnet från det här skriptet. Även om det är tillåtet att anpassa ditt eget certifikatnamn på SQL Server bör namnet inte innehålla några \ tecken.

-- Create the SQL Server certificate for the instance link
USE MASTER

-- Customize SQL Server certificate expiration date by adjusting the date below
DECLARE @cert_expiry_date AS varchar(max)='03/30/2025'

-- Build the query to generate the certificate
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
DECLARE @sqlserver_certificate_subject NVARCHAR(MAX) = N'Certificate for ' + @sqlserver_certificate_name
DECLARE @create_sqlserver_certificate_command NVARCHAR(MAX) = N'CREATE CERTIFICATE [' + @sqlserver_certificate_name + '] ' + char (13) +
'    WITH SUBJECT = ''' + @sqlserver_certificate_subject + ''',' + char (13) +
'    EXPIRY_DATE = '''+ @cert_expiry_date + ''''+ char (13)
IF NOT EXISTS (SELECT name from sys.certificates WHERE name = @sqlserver_certificate_name)
BEGIN
    PRINT (@create_sqlserver_certificate_command)
    -- Execute the query to create SQL Server certificate for the instance link
    EXEC sp_executesql @stmt = @create_sqlserver_certificate_command
END
ELSE
    PRINT 'Certificate ' + @sqlserver_certificate_name + ' already exists.'
GO

Använd sedan följande T-SQL-fråga på SQL Server för att verifiera att certifikatet har skapats:

-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates WHERE pvt_key_encryption_type = 'MK'

I frågeresultatet ser du att certifikatet har krypterats med huvudnyckeln.

Nu kan du hämta den offentliga nyckeln för det genererade certifikatet på SQL Server:

-- Run on SQL Server
-- Show the name and the public key of generated SQL Server certificate
USE MASTER
GO
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
DECLARE @PUBLICKEYENC VARBINARY(MAX) = CERTENCODED(CERT_ID(@sqlserver_certificate_name));
SELECT @sqlserver_certificate_name as 'SQLServerCertName'
SELECT @PUBLICKEYENC AS SQLServerPublicKey;

Spara värden för SQLServerCertName och SQLServerPublicKey från utdata, eftersom du behöver det i nästa steg när du importerar certifikatet.

Kontrollera först att du är inloggad på Azure och att du har valt prenumerationen där den hanterade instansen finns. Det är särskilt viktigt att välja rätt prenumeration om du har fler än en Azure prenumeration på ditt konto.

Ersätt <SubscriptionID> med ditt Azure prenumerations-ID.

# Run in Azure Cloud Shell (select PowerShell console)

# Enter your Azure subscription ID
$SubscriptionID = "<SubscriptionID>"

# Login to Azure and select subscription ID
if ((Get-AzContext ) -eq $null)
{
    echo "Logging to Azure subscription"
    Login-AzAccount
}
Select-AzSubscription -SubscriptionName $SubscriptionID

Använd sedan antingen kommandot New-AzSqlInstanceServerTrustCertificate PowerShell eller az sql mi partner-cert create Azure CLI för att ladda upp den offentliga nyckeln för autentiseringscertifikatet från SQL Server till Azure, till exempel följande PowerShell-exempel.

Fyll i nödvändig användarinformation, kopiera den, klistra in den och kör sedan skriptet. Ersätta:

  • <SQLServerPublicKey> med den offentliga delen av SQL Server certifikatet i binärt format, som du har registrerat i föregående steg. Det är ett långt strängvärde som börjar med 0x.
  • <SQLServerCertName> med det SQL Server certifikatnamnet som du har registrerat i föregående steg.
  • <ManagedInstanceName> med det korta namnet på den hanterade instansen.
# Run in Azure Cloud Shell (select PowerShell console)
# ===============================================================================
# POWERSHELL SCRIPT TO IMPORT SQL SERVER PUBLIC CERTIFICATE TO SQL MANAGED INSTANCE
# ===== Enter user variables here ====

# Enter the name for the server SQLServerCertName certificate – for example, "Cert_sqlserver1_endpoint"
$CertificateName = "<SQLServerCertName>"

# Insert the certificate public key blob that you got from SQL Server – for example, "0x1234567..."
$PublicKeyEncoded = "<SQLServerPublicKey>"

# Enter your managed instance short name – for example, "sqlmi"
$ManagedInstanceName = "<ManagedInstanceName>"

# ==== Do not customize the below cmdlets====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Upload the public key of the authentication certificate from SQL Server to Azure.
New-AzSqlInstanceServerTrustCertificate -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $CertificateName -PublicKey $PublicKeyEncoded 

Resultatet av den här åtgärden är en sammanfattning av det uppladdade SQL Server certifikatet till Azure.

Om du behöver se alla SQL Server certifikat som laddats upp till en hanterad instans använder du kommandot Get-AzSqlInstanceServerTrustCertificate PowerShell eller az sql mi partner-cert list Azure CLI i Azure Cloud Shell. Om du vill ta bort SQL Server certifikat som laddats upp till en SQL-hanterad instans använder du kommandot Remove-AzSqlInstanceServerTrustCertificate PowerShell eller az sql mi partner-cert delete Azure CLI i Azure Cloud Shell.

Hämta certifikatets offentliga nyckel från SQL Managed Instance och importera den till SQL Server

Certifikatet för att skydda länkslutpunkten genereras automatiskt på Azure SQL Managed Instance. Hämta certifikatets offentliga nyckel från SQL Managed Instance och importera den till SQL Server med hjälp av kommandot Get-AzSqlInstanceEndpointCertificate PowerShell eller az sql mi endpoint-cert show Azure CLI, till exempel följande PowerShell-exempel.

Försiktighet

När du använder Azure CLI måste du manuellt lägga till 0x framför PublicKey-utdata när du använder den i efterföljande steg. PublicKey ser till exempel ut som "0x3082033E30...".

Kör följande skript. Ersätta:

  • <SubscriptionID> med ditt Azure prenumerations-ID.
  • <ManagedInstanceName> med det korta namnet på den hanterade instansen.
# Run in Azure Cloud Shell (select PowerShell console)
# ===============================================================================
# POWERSHELL SCRIPT TO EXPORT MANAGED INSTANCE PUBLIC CERTIFICATE
# ===== Enter user variables here ====

# Enter your managed instance short name – for example, "sqlmi"
$ManagedInstanceName = "<ManagedInstanceName>"

# ==== Do not customize the following cmdlet ====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Fetch the public key of the authentication certificate from Managed Instance. Outputs a binary key in the property PublicKey.
Get-AzSqlInstanceEndpointCertificate -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -EndpointType "DATABASE_MIRRORING" | out-string   

Kopiera hela PublicKey-utdata (börjar med 0x) som du behöver i nästa steg.

Om du stöter på problem med att kopiera och klistra in PublicKey kan du också köra T-SQL-kommandot EXEC sp_get_endpoint_certificate 4 på den hanterade instansen för att hämta dess offentliga nyckel för länkslutpunkten.

Importera sedan den hämtade offentliga nyckeln för säkerhetscertifikatet för den hanterade instansen till SQL Server. Kör följande fråga på SQL Server för att skapa MI-slutpunktscertifikatet. Ersätta:

  • <ManagedInstanceFQDN> med det fullständigt kvalificerade domännamnet för den hanterade instansen.
  • <PublicKey> med publickey-värdet som erhölls i föregående steg (från Azure Cloud Shell, från och med 0x). Du behöver inte använda citattecken.

Viktig

Namnet på certifikatet måste vara SQL Managed Instance FQDN och bör inte ändras. Länken fungerar inte om du använder ett anpassat namn.

-- Run on SQL Server
USE MASTER
CREATE CERTIFICATE [<ManagedInstanceFQDN>]
FROM BINARY = <PublicKey> 

Importera Azure betrodda rotcertifikatutfärdarnycklar till SQL Server

Du måste importera nycklar från Azure-betrodd rotcertifikatutfärdare (CA) till SQL Server för att SQL Server ska kunna lita på de offentliga certifikat för SQL Managed Instance som utfärdats av Azure.

Du kan ladda ned de nödvändiga rot-CA-nycklarna från Azure Certificate Authority details. Hämta minst DigiCert Global Root G2 och Microsoft RSA Root Certificate Authority 2017 certifikat och importera dem till din SQL Server-instans. Men om du planerar att köra länken i mer än några månader laddar du ned och importerar alla sju certifikat som anges i avsnittet Root Certificate Authorities för att undvika potentiella störningar om Azure uppdaterar listan över betrodda certifikatutfärdare.

Note

Rotcertifikatet i certifieringssökvägen för ett offentligt nyckelcertifikat i en SQL Managed Instance utfärdas av en betrodd Azure rotcertifikatsutfärdare (CA). Den specifika rotcertifikatutfärdaren kan ändras med tiden när Azure uppdaterar listan över betrodda certifikatutfärdare. För en förenklad installation installerar du alla rot-CA-certifikat som anges i Azure Rotcertifikatutfärdare. Du kan bara installera den nödvändiga CA-nyckeln genom att identifiera utfärdaren av en tidigare importerad SQL Managed Instance offentlig nyckel.

Spara certifikaten lokalt i SQL Server-instansen, till exempel till sökvägen C:\Path\To\<name of certificate>.crt och importera sedan certifikaten från sökvägen med hjälp av följande Transact-SQL skript. Ersätt <name of certificate> med det faktiska certifikatnamnet, till exempel DigiCert Global Root G2 eller Microsoft RSA Root Certificate Authority 2017.

-- Run on SQL Server
-- Import <name of certificate> root-authority certificate (trusted by Azure), if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'<name of certificate>')
BEGIN
    PRINT 'Creating <name of certificate> certificate.'
    CREATE CERTIFICATE [<name of certificate>] FROM FILE = 'C:\Path\To\<name of certificate>.crt'

    --Trust certificates issued by <name of certificate> root authority for Azure database.windows.net domains
    DECLARE @CERTID int
    SELECT @CERTID = CERT_ID('<name of certificate>')
    --For government cloud, use the corresponding SQL Database DNS suffix, e.g. '*.database.usgovcloudapi.net', '*.database.chinacloudapi.cn' etc.
    EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
    PRINT 'Certificate <name of certificate> already exists.'
GO

Note

Den sp_certificate_add_issuer lagrade proceduren som saknas i din SQL Server miljö anger att din SQL Server-instans inte har appropriate-tjänstuppdateringen installerad.

Kontrollera slutligen alla skapade certifikat med hjälp av följande dynamiska hanteringsvy (DMV):

-- Run on SQL Server
USE master
SELECT * FROM sys.certificates

Verifiera certifikatkedjan

Schemalagda eller oavsiktliga ändringar av certifikat kan försämra länken. För att undvika avbrott är det viktigt att regelbundet validera certifikatkedjan på SQL Server.

Hoppa över det här steget om du konfigurerar en ny länk eller nyligen har importerat certifikaten enligt beskrivningen i föregående avsnitt.

Säkerställ databasens speglingsslutpunkt

Om du inte har någon befintlig tillgänglighetsgrupp eller en databasspeglingsslutpunkt på SQL Server är nästa steg att skapa en databasspeglingsslutpunkt på SQL Server och skydda den med det tidigare genererade SQL Server certifikatet. Om du har en befintlig tillgänglighetsgrupp eller speglingsslutpunkt går du vidare till avsnittet Ändra en befintlig slutpunkt.

Skapa och skydda databasspeglingsslutpunkten på SQL Server

Använd följande skript för att kontrollera att du inte har skapat någon befintlig databasspeglingsslutpunkt:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT * FROM sys.database_mirroring_endpoints WHERE type_desc = 'DATABASE_MIRRORING'

Om föregående fråga inte visar en befintlig databasspeglingsslutpunkt kör du följande skript på SQL Server för att hämta namnet på det tidigare genererade SQL Server certifikatet.

-- Run on SQL Server
-- Show the name and the public key of generated SQL Server certificate
USE MASTER
GO
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername  + N'_endpoint'
SELECT @sqlserver_certificate_name as 'SQLServerCertName'

Spara SQLServerCertName från utdata när du behöver det i nästa steg.

Använd följande skript för att skapa en ny databasspeglingsslutpunkt på port <EndpointPort> och skydda slutpunkten med SQL Server-certifikatet. Ersätta:

  • <SQL_SERVER_CERTIFICATE> med namnet på SQLServerCertName som hämtades i föregående steg.
-- Run on SQL Server
-- Create a connection endpoint listener on SQL Server
USE MASTER
CREATE ENDPOINT database_mirroring_endpoint
    STATE=STARTED   
    AS TCP (LISTENER_PORT=<EndpointPort>, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        ROLE=ALL,
        AUTHENTICATION = CERTIFICATE [<SQL_SERVER_CERTIFICATE>],
        ENCRYPTION = REQUIRED ALGORITHM AES
    )  
GO

Kontrollera att speglingsslutpunkten skapades genom att köra följande skript på SQL Server:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc,
    connection_auth_desc, is_encryption_enabled, encryption_algorithm_desc
FROM 
    sys.database_mirroring_endpoints

Den framgångsrikt skapade slutpunktskolumnen state_desc ska ha statusen STARTED.

En ny speglingsslutpunkt skapades med certifikatautentisering och AES-kryptering aktiverat.

Ändra en befintlig slutpunkt

Note

Hoppa över det här steget om du just har skapat en ny speglingsslutpunkt. Använd endast det här steget om du använder befintliga tillgänglighetsgrupper med en befintlig databasspeglingsslutpunkt.

Om du använder befintliga tillgänglighetsgrupper för länken eller om det finns en befintlig databasspeglingsslutpunkt kontrollerar du först att den uppfyller följande obligatoriska villkor för länken:

  • Typen måste vara DATABASE_MIRRORING.
  • Anslutningsautentisering måste vara CERTIFICATE.
  • Kryptering måste vara aktiverat.
  • Krypteringsalgoritmen måste vara AES.

Kör följande fråga på SQL Server för att visa information om en befintlig databasspeglingsslutpunkt:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc, connection_auth_desc,
    is_encryption_enabled, encryption_algorithm_desc
FROM
    sys.database_mirroring_endpoints

Om utdata visar att den befintliga DATABASE_MIRRORING slutpunkten connection_auth_desc inte är CERTIFICATEeller encryption_algorithm_desc inte är AES, måste slutpunkten ändras för att uppfylla kraven.

På SQL Server används samma databasspeglingsslutpunkt för både tillgänglighetsgrupper och distribuerade tillgänglighetsgrupper. Om slutpunkten connection_auth_desc är NTLM (Windows authentication) eller KERBEROS och du behöver Windows authentication för en befintlig tillgänglighetsgrupp kan du ändra slutpunkten så att den använder flera autentiseringsmetoder genom att växla autentiseringsalternativet till NEGOTIATE CERTIFICATE. Med den här ändringen kan den befintliga tillgänglighetsgruppen använda Windows authentication, samtidigt som certifikatautentisering används för SQL Managed Instance.

På samma sätt, om kryptering inte innehåller AES och du behöver RC4-kryptering, är det möjligt att ändra slutpunkten för att använda båda algoritmerna. För detaljer om möjliga alternativ för att ändra slutpunkter, se dokumentationssidan för sys.database_mirroring_endpoints.

Följande skript är ett exempel på hur du ändrar din befintliga databasspeglingsslutpunkt på SQL Server. Ersätta:

  • <YourExistingEndpointName> med ditt befintliga slutpunktsnamn.
  • <SQLServerCertName> med namnet på det genererade SQL Server certifikatet (hämtas i något av ovanstående steg).

Beroende på din specifika konfiguration kan du behöva anpassa skriptet ytterligare. Du kan också använda SELECT * FROM sys.certificates för att hämta namnet på det skapade certifikatet på SQL Server.

-- Run on SQL Server
-- Alter the existing database mirroring endpoint to use CERTIFICATE for authentication and AES for encryption
USE MASTER
ALTER ENDPOINT [<YourExistingEndpointName>]   
    STATE=STARTED   
    AS TCP (LISTENER_PORT=<EndpointPort>, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        ROLE=ALL,
        AUTHENTICATION = WINDOWS NEGOTIATE CERTIFICATE [<SQLServerCertName>],
        ENCRYPTION = REQUIRED ALGORITHM AES
    )
GO

När du har kört slutpunktsfrågan ALTER och angett läget för dubbel autentisering till Windows och certifikat använder du den här frågan igen på SQL Server för att visa information om databasspeglingsslutpunkten:

-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
    name, type_desc, state_desc, role_desc, connection_auth_desc,
    is_encryption_enabled, encryption_algorithm_desc
FROM
    sys.database_mirroring_endpoints

Du har lyckats ändra databasspeglingsslutpunkten för en länk till SQL Managed Instance.

Skapa en tillgänglighetsgrupp på SQL Server

Om du inte har någon befintlig tillgänglighetsgrupp är nästa steg att skapa en på SQL Server, oavsett vilken som är den första primära.

Note

Hoppa över det här avsnittet om du redan har en befintlig tillgänglighetsgrupp.

Kommandon för att skapa tillgänglighetsgruppen skiljer sig om din SQL Managed Instance är den första primära, som endast stöds från och med SQL Server 2022 CU10.

Det går att upprätta flera länkar för samma databas, men länken stöder bara replikering av en databas per länk. Om du vill skapa flera länkar för samma databas använder du samma tillgänglighetsgrupp för alla länkar, men skapar sedan en ny distribuerad tillgänglighetsgrupp för varje databaslänk mellan SQL Server och SQL Managed Instance.

Om SQL Server är din första primära, skapar du en tillgänglighetsgrupp med följande parametrar för en länk:

  • Ursprungligt primärt servernamn
  • Databasnamn
  • Ett redundansläge för MANUAL
  • Ett seedningsläge för AUTOMATIC

Ta först reda på ditt SQL Server namn genom att köra följande T-SQL-instruktion:

-- Run on the initial primary
SELECT @@SERVERNAME AS SQLServerName 

Använd sedan följande skript för att skapa tillgänglighetsgruppen på SQL Server. Ersätta:

  • <AGNameOnSQLServer> med namnet på din tillgänglighetsgrupp på SQL Server. En Managed Instance länk kräver en databas per tillgänglighetsgrupp. För flera databaser måste du skapa flera tillgänglighetsgrupper. Överväg att namnge varje tillgänglighetsgrupp så att dess namn återspeglar motsvarande databas, till exempel AG_<db_name>.
  • <DatabaseName> med namnet på databasen som du vill replikera.
  • <SQLServerName> med namnet på din SQL Server instans som erhölls i föregående steg.
  • <SQLServerIP> med ip-adressen SQL Server. Du kan använda ett matchningsbart SQL Server värddatornamn som ett alternativ, men du måste se till att namnet kan matchas från det SQL Managed Instance virtuella nätverket.
-- Run on SQL Server
-- Create the primary availability group on SQL Server
USE MASTER
CREATE AVAILABILITY GROUP [<AGNameOnSQLServer>]
WITH (CLUSTER_TYPE = NONE) -- <- Delete this line for SQL Server 2016 only. Leave as-is for all higher versions.
    FOR database [<DatabaseName>]  
    REPLICA ON   
        N'<SQLServerName>' WITH   
            (  
            ENDPOINT_URL = 'TCP://<SQLServerIP>:<EndpointPort>',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC
            );
GO

Viktig

För SQL Server 2016 tar du bort WITH (CLUSTER_TYPE = NONE) från ovanstående T-SQL-instruktion. Lämna as-is för alla senare SQL Server versioner.

Skapa sedan den distribuerade tillgänglighetsgruppen på SQL Server. Om du planerar att skapa flera länkar måste du skapa en distribuerad tillgänglighetsgrupp för varje länk, även om du upprättar flera länkar för samma databas.

Ersätt följande värden och kör sedan T-SQL-skriptet för att skapa din distribuerade tillgänglighetsgrupp.

  • <DAGName> med namnet på din distribuerade tillgänglighetsgrupp. Eftersom du kan konfigurera flera länkar för samma databas genom att skapa en distribuerad tillgänglighetsgrupp för varje länk bör du överväga att namnge varje distribuerad tillgänglighetsgrupp i enlighet med detta, till exempel DAG1_<db_name>, DAG2_<db_name>.
  • <AGNameOnSQLServer> med namnet på tillgänglighetsgruppen som du skapade i föregående steg.
  • <AGNameOnSQLMI> med namnet på tillgänglighetsgruppen på SQL Managed Instance. Namnet måste vara unikt för SQL MI. Överväg att namnge varje tillgänglighetsgrupp så att dess namn återspeglar motsvarande databas, till exempel AG_<db_name>_MI.
  • <SQLServerIP> med IP-adressen för SQL Server från föregående steg. Du kan använda ett matchningsbart SQL Server värddatornamn som ett alternativ, men kontrollera att namnet kan matchas från det SQL Managed Instance virtuella nätverket (vilket kräver att du konfigurerar anpassade Azure DNS för undernätet för den hanterade instansen).
  • <ManagedInstanceName> med det korta namnet på den hanterade instansen.
  • <ManagedInstanceFQDN> med det fullständigt kvalificerade domännamnet för din hanterade instans.
-- Run on SQL Server
-- Create a distributed availability group for the availability group and database
-- ManagedInstanceName example: 'sqlmi1'
-- ManagedInstanceFQDN example: 'sqlmi1.73d19f36a420a.database.windows.net'
USE MASTER
CREATE AVAILABILITY GROUP [<DAGName>]
WITH (DISTRIBUTED) 
    AVAILABILITY GROUP ON  
    N'<AGNameOnSQLServer>' WITH 
    (
      LISTENER_URL = 'TCP://<SQLServerIP>:<EndpointPort>',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC,
      SESSION_TIMEOUT = 20
    ),
    N'<AGNameOnSQLMI>' WITH
    (
      LISTENER_URL = 'tcp://<ManagedInstanceFQDN>:5022;Server=[<ManagedInstanceName>]',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC
    );
GO

Verifiera tillgänglighetsgrupper

Använd följande skript för att lista alla tillgänglighetsgrupper och distribuerade tillgänglighetsgrupper på den SQL Server instansen. Nu måste statusen för tillgänglighetsgruppen vara connectedoch tillståndet för dina distribuerade tillgänglighetsgrupper måste vara disconnected. Tillståndet för den distribuerade tillgänglighetsgruppen flyttas till connected bara när den är ansluten till SQL Managed Instance.

-- Run on SQL Server
-- This will show that the availability group and distributed availability group have been created on SQL Server.
SELECT * FROM sys.availability_groups

Du kan också använda SSMS-Object Explorer för att hitta tillgänglighetsgrupper och distribuerade tillgänglighetsgrupper. Expandera mappen Always On High Availability och sedan mappen Availability Groups.

Slutligen kan du skapa länken. Kommandona skiljer sig åt beroende på vilken instans som är den första primära. Använd kommandot New-AzSqlInstanceLink PowerShell eller az sql mi link create Azure CLI för att skapa länken, till exempel PowerShell-exemplet i det här avsnittet. Att skapa länken från en SQL Managed Instance primär stöds inte för närvarande med Azure CLI.

Om du behöver se alla länkar på en hanterad instans använder du kommandot Get-AzSqlInstanceLink PowerShell eller az sql mi link show Azure CLI i Azure Cloud Shell.

För att förenkla processen loggar du in på Azure-portalen och kör följande skript från Azure Cloud Shell. Ersätta:

  • <ManagedInstanceName> med det korta namnet på den hanterade instansen.
  • <AGNameOnSQLServer> med namnet på tillgänglighetsgruppen som skapades på SQL Server.
  • <AGNameOnSQLMI> med namnet på tillgänglighetsgruppen som skapades på SQL Managed Instance.
  • <DAGName> med namnet på den distribuerade tillgänglighetsgruppen som skapades på SQL Server.
  • <DatabaseName> med databasen replikerad i tillgänglighetsgruppen på SQL Server.
  • <SQLServerIP> med IP-adressen för din SQL Server. Den angivna IP-adressen måste vara tillgänglig för den hanterade instansen.

Note

Om du vill upprätta en länk till en tillgänglighetsgrupp som redan finns anger du IP-adressen för lyssnaren när du anger parametern <SQLServerIP> . Kontrollera att förtroende har upprättats mellan alla tillgänglighetsgruppnoder och SQL Managed Instance (se avsnittet Establish trust between instances).

#  Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO CREATE MANAGED INSTANCE LINK
# Instructs Managed Instance to join distributed availability group on SQL Server
# ===== Enter user variables here ====

# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<ManagedInstanceName>"

# Enter the availability group name that was created on SQL Server
$AGNameOnSQLServer = "<AGNameOnSQLServer>"

# Enter the availability group name that was created on SQL Managed Instance
$AGNameOnSQLMI = "<AGNameOnSQLMI>"

# Enter the distributed availability group name that was created on SQL Server
$DAGName = "<DAGName>"

# Enter the database name that was placed in the availability group for replication
$DatabaseName = "<DatabaseName>"

# Enter the SQL Server IP
$SQLServerIP = "<SQLServerIP>"

# ==== Do not customize the following cmdlet ====

# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName

# Build properly formatted connection endpoint
$SourceIP = "TCP://" + $SQLServerIP + ":<EndpointPort>"

# Create link on managed instance. Join distributed availability group on SQL Server.
New-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName |
-PartnerAvailabilityGroupName $AGNameOnSQLServer -InstanceAvailabilityGroupName $AGNameOnSQLMI |
-Database @($DatabaseName) -PartnerEndpoint $SourceIP -InstanceLinkRole Secondary

Resultatet av den här åtgärden är en tidsstämpel för den lyckade körningen av begäran att skapa en länk .

Kontrollera anslutningen mellan SQL Managed Instance och SQL Server genom att köra följande fråga på SQL Server. Anslutningen blir inte omedelbar. Det kan ta upp till en minut innan DMV:en börjar visa en lyckad anslutning. Fortsätt att uppdatera DMV:en tills anslutningen visas som ANSLUTEN för SQL Managed Instance repliken.

-- Run on SQL Server
SELECT
    r.replica_server_name AS [Replica],
    r.endpoint_url AS [Endpoint],
    rs.connected_state_desc AS [Connected state],
    rs.last_connect_error_description AS [Last connection error],
    rs.last_connect_error_number AS [Last connection error No],
    rs.last_connect_error_timestamp AS [Last error timestamp]
FROM
    sys.dm_hadr_availability_replica_states rs
    JOIN sys.availability_replicas r
    ON rs.replica_id = r.replica_id

När anslutningen har upprättats kan Object Explorer i SSMS först visa den replikerade databasen på den sekundära repliken i tillståndet Restoring medan den inledande seedningsfasen pågår och samtidigt som den fullständiga säkerhetskopian av databasen återställs. När databasen har återställts måste replikeringen komma ikapp för att de två databaserna ska få ett synkroniserat tillstånd. Databasen kommer inte längre att vara i återställningsläge efter att den initiala seedingen har slutförts. Det kan gå så snabbt att fylla små databaser att du inte ser det inledande återställningstillståndet i SSMS.

Viktig

  • Länken fungerar inte om inte nätverksanslutningen finns mellan SQL Server och SQL Managed Instance. Om du vill felsöka nätverksanslutningen följer du stegen i Testa nätverksanslutningen.
  • Gör regelbundna säkerhetskopior av loggfilen på SQL Server. Om det använda loggutrymmet når 100 procent stoppas replikeringen till SQL Managed Instance tills utrymmesanvändningen minskar. Vi rekommenderar starkt att du automatiserar loggsäkerhetskopior genom att konfigurera ett dagligt jobb. Mer information finns i Back up log files on SQL Server.

Gör den första säkerhetskopieringen av transaktionsloggen

Om SQL Server är din ursprungliga primära är det viktigt att du tar den första transaktionsloggsäkerhetskopian på SQL Server efter att den inledande seeding har slutförts, när databasen inte längre är i Restoring... tillståndet i Azure SQL Managed Instance. Ta sedan regelbundna säkerhetskopior av SQL Servers transaktionsloggar för att minimera den onödiga loggtillväxten medan SQL Server har den primära rollen.

Om SQL Managed Instance är din primära, behöver du inte vidta några åtgärder eftersom Azure SQL Managed Instance tar loggsäkerhetskopior automatiskt.

Om du vill släppa länken, antingen för att den inte längre behövs eller för att den är i ett irreparabelt tillstånd och måste återskapas, kan du göra det med PowerShell och T-SQL.

Använd först kommandot Remove-AzSqlInstanceLink PowerShell för att släppa länken, till exempel följande exempel:

Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $managedInstanceName -Name $DAGName -Force 

Kör sedan följande T-SQL-skript på SQL Server för att släppa den distribuerade tillgänglighetsgruppen. Ersätt <DAGName> med namnet på den distribuerade tillgänglighetsgrupp som används för att skapa länken:

USE MASTER 
GO 

DROP AVAILABILITY GROUP <DAGName>  
GO 

Slutligen kan du ta bort tillgänglighetsgruppen om du inte längre har någon användning för den. Det gör du genom att ersätta <AGName> med namnet på tillgänglighetsgruppen och sedan köra den på respektive instans:

DROP AVAILABILITY GROUP <AGName>  
GO 

Felsöka

Om du får ett felmeddelande när du skapar länken läser du felmeddelandet i frågeutdatafönstret för mer information. Mer information finns i felsöka problem med länken.

Så här använder du länken:

Om du vill veta mer om länken:

Överväg följande för andra replikerings- och migreringsscenarier: