Delen via


Koppeling met scripts configureren - Azure SQL Managed Instance

van toepassing op:Azure SQL Managed Instance

In dit artikel leert u hoe u een koppeling configureert tussen SQL Server en Azure SQL Managed Instance met Transact-SQL en PowerShell- of Azure CLI-scripts. Met de koppeling worden databases van uw eerste primaire replica in bijna realtime gerepliceerd naar uw secundaire replica.

Nadat de koppeling is gemaakt, kunt u vervolgens een failover naar uw secundaire replica uitvoeren voor migratie of herstel na noodgevallen.

Notitie

  • Het is ook mogelijk om de koppeling te configureren met SSMS -(SQL Server Management Studio).
  • Het configureren van Azure SQL Managed Instance als uw initiële primaire instantie wordt ondersteund vanaf SQL Server 2022 CU10.

Overzicht

Gebruik de koppelingsfunctie om databases van uw eerste primaire naar uw secundaire replica te repliceren. Voor SQL Server 2022 kan de initiële primaire ofwel SQL Server ofwel Azure SQL Managed Instance zijn. Voor SQL Server 2019 en eerdere versies moet de eerste primaire versie SQL Server zijn. Nadat de koppeling is geconfigureerd, wordt de database van de eerste primaire replica gerepliceerd naar de secundaire replica.

U kunt ervoor kiezen om de koppeling te behouden voor continue gegevensreplicatie in een hybride omgeving tussen de primaire en secundaire replica, of u kunt een failover van de database naar de secundaire replica uitvoeren, migreren naar Azure of herstel na noodgevallen. Voor SQL Server 2019 en eerdere versies leidt een failover naar Azure SQL Managed Instance tot een verbroken koppeling en kan failback niet worden ondersteund. Met SQL Server 2022 hebt u de mogelijkheid om de koppeling te behouden en heen en weer te schakelen tussen de twee replica's.

Als u van plan bent om uw secundaire beheerde exemplaar alleen te gebruiken voor herstel na noodgevallen, kunt u besparen op licentiekosten door het voordeel van hybride failover te activeren.

Gebruik de instructies in dit artikel om de koppeling tussen SQL Server en Azure SQL Managed Instance handmatig in te stellen. Nadat de koppeling is gemaakt, krijgt uw brondatabase een alleen-lezen kopie op uw secundaire doelreplica.

Fooi

Om het gebruik van T-SQL-scripts met de juiste parameters voor uw omgeving te vereenvoudigen, raden we u ten zeerste aan de wizard Managed Instance-koppeling te gebruiken in SQL Server Management Studio (SSMS) om een script te genereren om de koppeling te maken. Selecteer Script in plaats van Finishin het venster Nieuwe beheerde instantie-koppeling op de pagina Samenvatting.

Voorwaarden

Als u uw databases wilt repliceren, hebt u de volgende vereisten nodig:

Houd rekening met het volgende:

  • De koppelingsfunctie ondersteunt één database per koppeling. Als u meerdere databases op een exemplaar wilt repliceren, maakt u een koppeling voor elke afzonderlijke database. Als u bijvoorbeeld 10 databases wilt repliceren naar SQL Managed Instance, maakt u 10 afzonderlijke koppelingen.
  • De collatie tussen SQL Server en SQL Managed Instance dient hetzelfde te zijn. Een niet-overeenkomende sortering kan ertoe leiden dat de naam van de server niet overeenkomt en dat er geen verbinding kan worden gemaakt tussen SQL Server en SQL Managed Instance.
  • Fout 1475 op de eerste SQL Server-primaire versie geeft aan dat u een nieuwe back-upketen moet starten door een volledige back-up te maken zonder de optie COPY ONLY.
  • Als u een koppeling tot stand wilt brengen of een failover wilt uitvoeren, van SQL Managed Instance naar SQL Server 2022, moet uw beheerde exemplaar worden geconfigureerd met het updatebeleid voor SQL Server 2022. Gegevensreplicatie en failover van SQL Managed Instance naar SQL Server 2022 worden niet ondersteund door exemplaren die zijn geconfigureerd met het always-up-to-datum-updatebeleid.
  • Hoewel u een koppeling kunt maken van SQL Server 2022 naar een met SQL beheerd exemplaar dat is geconfigureerd met het beleid voor altijd-up-to-datumupdate, kunt u na een failover naar SQL Managed Instance geen gegevens meer repliceren of failback uitvoeren naar SQL Server 2022.

Machtigingen

Voor SQL Server moet u sysadmin machtigingen hebben.

Voor Azure SQL Managed Instance moet u lid zijn van de inzender voor SQL Managed Instanceof de volgende aangepaste rolmachtigingen hebben:

Microsoft.Sql/ bron Benodigde machtigingen
Microsoft.Sql/managedInstances /lezen, /schrijven
Microsoft.Sql/managedInstances/hybridCertificate /actie
Microsoft.Sql/managedInstances/databases /read, /delete, /write, /completeRestore/action, /readBackups/action, /restoreDetails/read
Microsoft.Sql/managedInstances/distributedAvailabilityGroups /read, /write, /delete, /setRole/action
Microsoft.Sql/managedInstances/endpointCertificates /lezen
Microsoft.Sql/managedInstances/hybridLink /read, /write, /delete
Microsoft.Sql/managedInstances/serverTrustCertificates /write, /delete, /read

Terminologie- en naamconventies

Wanneer u scripts uitvoert vanuit deze gebruikershandleiding, is het belangrijk om de namen van SQL Server en SQL Managed Instance niet te verwarren met hun volledig gekwalificeerde domeinnamen (FQDN's). In de volgende tabel wordt uitgelegd wat de verschillende namen precies vertegenwoordigen en hoe u hun waarden kunt verkrijgen:

Terminologie Beschrijving Hoe erachter te komen
Eerste primaire 1 De SQL Server- of SQL Managed Instance waarin u in eerste instantie de koppeling maakt om uw database te repliceren naar de secundaire replica.
Primaire replica De SQL Server of SQL Managed Instance die momenteel als host fungeert voor de primaire database.
Secundaire replica De SQL Server of SQL Managed Instance die gerepliceerde gegevens bijna in realtime van de huidige primaire replica ontvangt.
SQL Server-naam Korte, SQL Server-naam met één woord. Bijvoorbeeld: sqlserver1. Voer SELECT @@SERVERNAME uit vanuit T-SQL.
SQL Server FQDN FQDN (Fully Qualified Domain Name) van uw SQL Server. Bijvoorbeeld: sqlserver1.domain.com. Bekijk uw netwerkconfiguratie (DNS) on-premises of de servernaam als u een virtuele Azure-machine (VM) gebruikt.
SQL Managed Instance-naam Korte naam van SQL Managed Instance met één woord. Bijvoorbeeld: managedinstance1. Bekijk de naam van uw beheerde exemplaar in Azure Portal.
SQL Managed Instance FQDN FQDN (Fully Qualified Domain Name) van uw SQL Managed Instance. Bijvoorbeeld: managedinstance1.6d710bcf372b.database.windows.net. Zie de hostnaam op de overzichtspagina van SQL Managed Instance in Azure Portal.
Omzetbare domeinnaam DNS-naam die kan worden omgezet in een IP-adres. Als u bijvoorbeeld nslookup sqlserver1.domain.com uitvoert, moet u een IP-adres retourneren, zoals 10.0.0.1. Voer nslookup opdracht uit vanaf de opdrachtprompt.
IP-adres van SQL Server IP-adres van uw SQL Server. Als u meerdere IP-adressen op SQL Server gebruikt, kiest u het IP-adres dat toegankelijk is vanuit Azure. Voer ipconfig opdracht uit vanaf de opdrachtprompt van het host-besturingssysteem waarop de SQL Server wordt uitgevoerd.

1 Het configureren van Azure SQL Managed Instance als uw eerste primaire exemplaar wordt ondersteund vanaf SQL Server 2022 CU10-.

Instellen van databaseherstel en back-up

Als SQL Server de eerste primaire server is, moeten databases die via de koppeling worden gerepliceerd, zich in het volledige herstelmodel bevinden en ten minste één back-up hebben. Aangezien Azure SQL Managed Instance automatisch back-ups maakt, slaat u deze stap over als SQL Managed Instance uw eerste primaire exemplaar is.

Voer de volgende code uit op SQL Server voor alle databases die u wilt repliceren. Vervang <DatabaseName> door de werkelijke databasenaam.

-- 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

Zie Een volledige databaseback-up makenvoor meer informatie.

Notitie

De koppeling ondersteunt alleen replicatie van gebruikersdatabases. Replicatie van systeemdatabases wordt niet ondersteund. Als u objecten op exemplaarniveau wilt repliceren (opgeslagen in master of msdb databases), raden we u aan deze uit te voeren en T-SQL-scripts uit te voeren op het doelexemplaren.

Vertrouwen tussen instanties tot stand brengen

Eerst moet u een vertrouwensrelatie tussen de twee instanties tot stand brengen en de eindpunten beveiligen die worden gebruikt om gegevens in het netwerk te communiceren en te versleutelen. Gedistribueerde beschikbaarheidsgroepen gebruiken de bestaande beschikbaarheidsgroep eindpunt voor databasespiegeling, in plaats van hun eigen toegewezen eindpunt. Daarom moeten beveiliging en vertrouwen worden geconfigureerd tussen de twee exemplaren via het eindpunt voor het spiegelen van de beschikbaarheidsgroepdatabase.

Notitie

De koppeling is gebaseerd op de AlwaysOn-technologie voor beschikbaarheidsgroepen. Het eindpunt voor databasespiegeling is een eindpunt voor speciaal gebruik dat uitsluitend wordt gebruikt door beschikbaarheidsgroepen om verbindingen van andere exemplaren te ontvangen. Het eindpunt voor database mirroring moet niet worden verward met de verouderde functie voor SQL Server-databasespiegeling.

Vertrouwen op basis van certificaten is de enige ondersteunde manier om eindpunten voor databasespiegeling te beveiligen voor SQL Server en SQL Managed Instance. Als u bestaande beschikbaarheidsgroepen hebt die gebruikmaken van Windows-verificatie, moet u een vertrouwensrelatie op basis van certificaten toevoegen aan het bestaande mirroring-eindpunt als een secundaire verificatieoptie. U kunt dit doen met behulp van de ALTER ENDPOINT-instructie, zoals verderop in dit artikel wordt weergegeven.

Belangrijk

Certificaten worden gegenereerd met een vervaldatum en -tijd. Ze moeten worden vernieuwd en gewisseld voordat ze verlopen.

Hieronder vindt u een overzicht van het proces voor het beveiligen van eindpunten voor databasespiegeling voor zowel SQL Server als SQL Managed Instance:

  1. Genereer een certificaat op SQL Server en haal de bijbehorende openbare sleutel op.
  2. Haal een openbare sleutel op van het SQL Managed Instance-certificaat.
  3. De openbare sleutels uitwisselen tussen SQL Server en SQL Managed Instance.
  4. Azure-vertrouwde basiscertificeringsinstantiesleutels importeren in SQL Server

In de volgende secties worden deze stappen gedetailleerd beschreven.

Een certificaat maken op SQL Server en de bijbehorende openbare sleutel importeren in SQL Managed Instance

Maak eerst de hoofdsleutel van de database in de master-database als deze nog niet aanwezig is. Voeg uw wachtwoord in plaats van <strong_password> in het volgende script en bewaar het op een vertrouwelijke en veilige plaats. Voer dit T-SQL-script uit op 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

Genereer vervolgens een verificatiecertificaat op SQL Server. Vervang in het volgende script:

  • @cert_expiry_date met de gewenste vervaldatum van het certificaat (toekomstige datum).

Noteer deze datum en stel een herinnering in om het SQL Server-certificaat vóór de vervaldatum te draaien (bij te werken) om continue werking van de koppeling te garanderen.

Belangrijk

Het wordt sterk aanbevolen om de automatisch gegenereerde certificaatnaam van dit script te gebruiken. Hoewel het aanpassen van uw eigen certificaatnaam op SQL Server is toegestaan, mag de naam geen \ tekens bevatten.

-- 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

Gebruik vervolgens de volgende T-SQL-query op SQL Server om te controleren of het certificaat is gemaakt:

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

In de queryresultaten ziet u dat het certificaat is versleuteld met de hoofdsleutel.

Nu kunt u de openbare sleutel van het gegenereerde certificaat op SQL Server ophalen:

-- 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;

Sla waarden op van SQLServerCertName en SQLServerPublicKey uit de uitvoer, omdat u deze nodig hebt voor de volgende stap wanneer u het certificaat importeert.

Zorg er eerst voor dat u bent aangemeld bij Azure en dat u het abonnement hebt geselecteerd waarop uw beheerde exemplaar wordt gehost. Het selecteren van het juiste abonnement is vooral belangrijk als u meer dan één Azure-abonnement in uw account hebt.

Vervang <SubscriptionID> door uw Azure-abonnements-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

Gebruik vervolgens de New-AzSqlInstanceServerTrustCertificate PowerShell of az sql mi partner-cert create Azure CLI-opdracht om de openbare sleutel van het verificatiecertificaat van SQL Server naar Azure te uploaden, zoals het volgende PowerShell-voorbeeld.

Vul de benodigde gebruikersgegevens in, kopieer deze, plak deze en voer het script uit. Vervangen:

  • <SQLServerPublicKey> met het openbare gedeelte van het SQL Server-certificaat in binaire indeling, die u in de vorige stap hebt vastgelegd. Het is een lange tekenreekswaarde die begint met 0x.
  • <SQLServerCertName> met de naam van het SQL Server-certificaat dat u in de vorige stap hebt vastgelegd.
  • <ManagedInstanceName> met de verkorte naam van uw beheerde instantie.
# 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 

Het resultaat van deze bewerking is een samenvatting van het geüploade SQL Server-certificaat naar Azure.

Als u alle SQL Server-certificaten wilt zien die zijn geüpload naar een beheerd exemplaar, gebruikt u de Get-AzSqlInstanceServerTrustCertificate PowerShell of az sql mi partner-cert list Azure CLI-opdracht in Azure Cloud Shell. Als u het SQL Server-certificaat wilt verwijderen dat is geüpload naar een met SQL beheerd exemplaar, gebruikt u de Remove-AzSqlInstanceServerTrustCertificate PowerShell of az sql mi partner-cert delete Azure CLI-opdracht in Azure Cloud Shell.

Haal de openbare sleutel van het certificaat op uit SQL Managed Instance en importeer deze in SQL Server

Het certificaat voor het beveiligen van het koppelingseindpunt wordt automatisch gegenereerd in Azure SQL Managed Instance. Haal de openbare sleutel van het certificaat op uit SQL Managed Instance en importeer deze in SQL Server met behulp van de opdracht Get-AzSqlInstanceEndpointCertificate PowerShell of az sql mi endpoint-cert show Azure CLI-opdracht, zoals het volgende PowerShell-voorbeeld.

Voorzichtigheid

Wanneer u de Azure CLI gebruikt, moet u handmatig 0x toevoegen aan de voorzijde van de PublicKey-uitvoer wanneer u deze in de volgende stappen gebruikt. De PublicKey ziet er bijvoorbeeld uit als '0x3082033E30...'.

Voer het volgende script uit. Vervangen:

  • <SubscriptionID> met uw Azure-abonnements-id.
  • <ManagedInstanceName> met de verkorte naam van uw beheerde instantie.
# 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   

Kopieer de volledige PublicKey-uitvoer (begint met 0x) omdat u deze in de volgende stap nodig hebt.

Als u problemen ondervindt bij het kopiëren en plakken van de PublicKey, kunt u ook de T-SQL-opdracht uitvoeren EXEC sp_get_endpoint_certificate 4 op het beheerde exemplaar om de openbare sleutel voor het koppelingseindpunt te verkrijgen.

Importeer vervolgens de verkregen openbare sleutel van het beveiligingscertificaat van het beheerde exemplaar naar SQL Server. Voer de volgende query uit op SQL Server om het MI-eindpuntcertificaat te maken. Vervangen:

  • <ManagedInstanceFQDN> met de volledig gekwalificeerde domeinnaam van de beheerde instantie.
  • <PublicKey> met de PublicKey-waarde die u in de vorige stap hebt verkregen (vanuit Azure Cloud Shell, te beginnen met 0x). U hoeft geen aanhalingstekens te gebruiken.

Belangrijk

De naam van het certificaat moet de FQDN van het SQL Managed Instance zijn en mag niet worden gewijzigd. De koppeling is niet operationeel als u een aangepaste naam gebruikt.

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

Azure-vertrouwde basiscertificeringsinstantiesleutels importeren in SQL Server

Het importeren van openbare basiscertificaatsleutels van Microsoft en DigiCert-certificeringsinstanties (CA) naar SQL Server is vereist voor uw SQL Server om certificaten te vertrouwen die zijn uitgegeven door Azure voor database.windows.net domeinen.

Voorzichtigheid

Zorg ervoor dat de PublicKey begint met een 0x. Mogelijk moet u deze handmatig toevoegen aan het begin van de PublicKey als deze nog niet aanwezig is.

Importeer eerst het Microsoft PKI-basiscertificeringsinstantiecertificaat op SQL Server:

-- Run on SQL Server
-- Import Microsoft PKI root-authority certificate (trusted by Azure), if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'MicrosoftPKI')
BEGIN
    PRINT 'Creating MicrosoftPKI certificate.'
    CREATE CERTIFICATE [MicrosoftPKI] FROM BINARY = 0x308205A830820390A00302010202101ED397095FD8B4B347701EAABE7F45B3300D06092A864886F70D01010C05003065310B3009060355040613025553311E301C060355040A13154D6963726F736F667420436F72706F726174696F6E313630340603550403132D4D6963726F736F66742052534120526F6F7420436572746966696361746520417574686F726974792032303137301E170D3139313231383232353132325A170D3432303731383233303032335A3065310B3009060355040613025553311E301C060355040A13154D6963726F736F667420436F72706F726174696F6E313630340603550403132D4D6963726F736F66742052534120526F6F7420436572746966696361746520417574686F72697479203230313730820222300D06092A864886F70D01010105000382020F003082020A0282020100CA5BBE94338C299591160A95BD4762C189F39936DF4690C9A5ED786A6F479168F8276750331DA1A6FBE0E543A3840257015D9C4840825310BCBFC73B6890B6822DE5F465D0CC6D19CC95F97BAC4A94AD0EDE4B431D8707921390808364353904FCE5E96CB3B61F50943865505C1746B9B685B51CB517E8D6459DD8B226B0CAC4704AAE60A4DDB3D9ECFC3BD55772BC3FC8C9B2DE4B6BF8236C03C005BD95C7CD733B668064E31AAC2EF94705F206B69B73F578335BC7A1FB272AA1B49A918C91D33A823E7640B4CD52615170283FC5C55AF2C98C49BB145B4DC8FF674D4C1296ADF5FE78A89787D7FD5E2080DCA14B22FBD489ADBACE479747557B8F45C8672884951C6830EFEF49E0357B64E798B094DA4D853B3E55C428AF57F39E13DB46279F1EA25E4483A4A5CAD513B34B3FC4E3C2E68661A45230B97A204F6F0F3853CB330C132B8FD69ABD2AC82DB11C7D4B51CA47D14827725D87EBD545E648659DAF5290BA5BA2186557129F68B9D4156B94C4692298F433E0EDF9518E4150C9344F7690ACFC38C1D8E17BB9E3E394E14669CB0E0A506B13BAAC0F375AB712B590811E56AE572286D9C9D2D1D751E3AB3BC655FD1E0ED3740AD1DAAAEA69B897288F48C407F852433AF4CA55352CB0A66AC09CF9F281E1126AC045D967B3CEFF23A2890A54D414B92AA8D7ECF9ABCD255832798F905B9839C40806C1AC7F0E3D00A50203010001A3543052300E0603551D0F0101FF040403020186300F0603551D130101FF040530030101FF301D0603551D0E0416041409CB597F86B2708F1AC339E3C0D9E9BFBB4DB223301006092B06010401823715010403020100300D06092A864886F70D01010C05000382020100ACAF3E5DC21196898EA3E792D69715B813A2A6422E02CD16055927CA20E8BAB8E81AEC4DA89756AE6543B18F009B52CD55CD53396D624C8B0D5B7C2E44BF83108FF3538280C34F3AC76E113FE6E3169184FB6D847F3474AD89A7CEB9D7D79F846492BE95A1AD095333DDEE0AEA4A518E6F55ABBAB59446AE8C7FD8A2502565608046DB3304AE6CB598745425DC93E4F8E355153DB86DC30AA412C169856EDF64F15399E14A75209D950FE4D6DC03F15918E84789B2575A94B6A9D8172B1749E576CBC156993A37B1FF692C919193E1DF4CA337764DA19FF86D1E1DD3FAECFBF4451D136DCFF759E52227722B86F357BB30ED244DDC7D56BBA3B3F8347989C1E0F20261F7A6FC0FBB1C170BAE41D97CBD27A3FD2E3AD19394B1731D248BAF5B2089ADB7676679F53AC6A69633FE5392C846B11191C6997F8FC9D66631204110872D0CD6C1AF3498CA6483FB1357D1C1F03C7A8CA5C1FD9521A071C193677112EA8F880A691964992356FBAC2A2E70BE66C40C84EFE58BF39301F86A9093674BB268A3B5628FE93F8C7A3B5E0FE78CB8C67CEF37FD74E2C84F3372E194396DBD12AFBE0C4E707C1B6F8DB332937344166DE8F4F7E095808F965D38A4F4ABDE0A308793D84D00716245274B3A42845B7F65B76734522D9C166BAAA8D87BA3424C71C70CCA3E83E4A6EFB701305E51A379F57069A641440F86B02C91C63DEAAE0F84

    --Trust certificates issued by Microsoft PKI root authority for Azure database.windows.net domains
    DECLARE @CERTID int
    SELECT @CERTID = CERT_ID('MicrosoftPKI')
    EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
    PRINT 'Certificate MicrosoftPKI already exists.'
GO

Importeer vervolgens het DigiCert PKI-basiscertificeringsinstantiecertificaat op SQL Server:

-- Run on SQL Server
-- Import DigiCert PKI root-authority certificate trusted by Azure to SQL Server, if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'DigiCertPKI')
BEGIN
    PRINT 'Creating DigiCertPKI certificate.'
    CREATE CERTIFICATE [DigiCertPKI] FROM BINARY = 0x3082038E30820276A0030201020210033AF1E6A711A9A0BB2864B11D09FAE5300D06092A864886F70D01010B05003061310B300906035504061302555331153013060355040A130C446967694365727420496E6331193017060355040B13107777772E64696769636572742E636F6D3120301E06035504031317446967694365727420476C6F62616C20526F6F74204732301E170D3133303830313132303030305A170D3338303131353132303030305A3061310B300906035504061302555331153013060355040A130C446967694365727420496E6331193017060355040B13107777772E64696769636572742E636F6D3120301E06035504031317446967694365727420476C6F62616C20526F6F7420473230820122300D06092A864886F70D01010105000382010F003082010A0282010100BB37CD34DC7B6BC9B26890AD4A75FF46BA210A088DF51954C9FB88DBF3AEF23A89913C7AE6AB061A6BCFAC2DE85E092444BA629A7ED6A3A87EE054752005AC50B79C631A6C30DCDA1F19B1D71EDEFDD7E0CB948337AEEC1F434EDD7B2CD2BD2EA52FE4A9B8AD3AD499A4B625E99B6B00609260FF4F214918F76790AB61069C8FF2BAE9B4E992326BB5F357E85D1BCD8C1DAB95049549F3352D96E3496DDD77E3FB494BB4AC5507A98F95B3B423BB4C6D45F0F6A9B29530B4FD4C558C274A57147C829DCD7392D3164A060C8C50D18F1E09BE17A1E621CAFD83E510BC83A50AC46728F67314143D4676C387148921344DAF0F450CA649A1BABB9CC5B1338329850203010001A3423040300F0603551D130101FF040530030101FF300E0603551D0F0101FF040403020186301D0603551D0E041604144E2254201895E6E36EE60FFAFAB912ED06178F39300D06092A864886F70D01010B05000382010100606728946F0E4863EB31DDEA6718D5897D3CC58B4A7FE9BEDB2B17DFB05F73772A3213398167428423F2456735EC88BFF88FB0610C34A4AE204C84C6DBF835E176D9DFA642BBC74408867F3674245ADA6C0D145935BDF249DDB61FC9B30D472A3D992FBB5CBBB5D420E1995F534615DB689BF0F330D53E31E28D849EE38ADADA963E3513A55FF0F970507047411157194EC08FAE06C49513172F1B259F75F2B18E99A16F13B14171FE882AC84F102055D7F31445E5E044F4EA879532930EFE5346FA2C9DFF8B22B94BD90945A4DEA4B89A58DD1B7D529F8E59438881A49E26D56FADDD0DC6377DED03921BE5775F76EE3C8DC45D565BA2D9666EB33537E532B6

    --Trust certificates issued by DigiCert PKI root authority for Azure database.windows.net domains
    DECLARE @CERTID int
    SELECT @CERTID = CERT_ID('DigiCertPKI')
    EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
    PRINT 'Certificate DigiCertPKI already exists.'
GO

Controleer ten slotte alle gemaakte certificaten met behulp van de volgende dynamische beheerweergave (DMV):

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

Het certificaat valideren

Nadat u de certificaten hebt gemaakt, controleert u of het MI-eindpuntcertificaat juist is geconfigureerd.

Bepaal eerst de certificate_id van het geëxporteerde MI-certificaat door de waarde van <ManagedInstanceFQDN> te vervangen en vervolgens de volgende query uit te voeren op SQL Server:

-- Run on SQL Server 
USE MASTER 
GO 

SELECT name, subject, certificate_id, start_date, expiry_date 
FROM sys.certificates 
WHERE issuer_name LIKE '%Microsoft Corporation%' AND name = '<ManagedInstanceFQDN>' 
GO 

Valideer vervolgens het certificaat door de waarde van <certificate_id> te vervangen door het resultaat van de vorige query en voer vervolgens de volgende query uit op SQL Server:

-- Run on SQL Server 

USE MASTER 
GO 

EXEC sp_validate_certificate_ca_chain <certificate_id> 
GO 

Een antwoord van Commands completed successfully. Completion time: … geeft aan dat het MI-eindpuntcertificaat is gevalideerd.

Als er een fout optreedt, verwijdert u het certificaat en volgt u de stappen in de Haal de openbare sleutel van het certificaat op uit SQL Managed Instance en importeert u het in de sectie SQL Server om het certificaat opnieuw te importeren.

Voer de volgende query uit op SQL Server om het certificaat te verwijderen:

-- Run on SQL Server 

USE MASTER 
GO 

DROP CERTIFICATE [<ManagedInstanceFQDN>] 
GO 

Het eindpunt voor databasespiegeling beveiligen

Als u geen bestaande beschikbaarheidsgroep of een eindpunt voor databasespiegeling op SQL Server hebt, is de volgende stap het maken van een eindpunt voor databasespiegeling op SQL Server en het beveiligen met het eerder gegenereerde SQL Server-certificaat. Als u wel een bestaande beschikbaarheidsgroep of een spiegelingseindpunt hebt, gaat u naar de sectie Een bestaand eindpunt wijzigen.

Het eindpunt voor databasespiegeling maken en beveiligen op SQL Server

Gebruik het volgende script om te controleren of u geen bestaand eindpunt voor databasespiegeling hebt gemaakt:

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

Als in de voorgaande query geen bestaand eindpunt voor databasespiegeling wordt weergegeven, voert u het volgende script uit op SQL Server om de naam van het eerder gegenereerde SQL Server-certificaat op te halen.

-- 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'

Sla SQLServerCertName op uit de uitvoer, omdat u deze in de volgende stap nodig hebt.

Gebruik het volgende script om een nieuw eindpunt voor databasespiegeling te maken op poort <EndpointPort> en het eindpunt te beveiligen met het SQL Server-certificaat. Vervangen:

  • <SQL_SERVER_CERTIFICATE> met de naam van SQLServerCertName die u in de vorige stap hebt verkregen.
-- 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

Controleer of het eindpunt voor spiegeling is gemaakt door het volgende script uit te voeren op 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

Het succesvol aangemaakte eindpunt moet in de kolom staat_desc de status STARTEDaangeven.

Er is een nieuw mirroring-eindpunt gemaakt met certificaatverificatie en AES-versleuteling ingeschakeld.

Een bestaand eindpunt wijzigen

Notitie

Sla deze stap over als u zojuist een nieuw mirroring-eindpunt hebt gemaakt. Gebruik deze stap alleen als u bestaande beschikbaarheidsgroepen gebruikt met een bestaand eindpunt voor databasespiegeling.

Als u bestaande beschikbaarheidsgroepen voor de koppeling gebruikt of als er een bestaand eindpunt voor databasespiegeling is, controleert u eerst of het voldoet aan de volgende verplichte voorwaarden voor de koppeling:

  • Het type moet DATABASE_MIRRORINGzijn.
  • Authenticatie van de verbinding moet CERTIFICATEzijn.
  • Versleuteling moet zijn ingeschakeld.
  • Het versleutelingsalgoritme moet AESzijn.

Voer de volgende query uit op SQL Server om details voor een bestaand databasespiegelingseindpunt weer te geven:

-- 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

Als de uitvoer laat zien dat het bestaande DATABASE_MIRRORING eindpunt connection_auth_desc niet CERTIFICATEis of encryption_algorithm_desc niet is AES, moet het eindpunt worden gewijzigd om te voldoen aan de vereisten.

Op SQL Server wordt hetzelfde eindpunt voor databasespiegeling gebruikt voor zowel beschikbaarheidsgroepen als gedistribueerde beschikbaarheidsgroepen. Als uw connection_auth_desc-eindpunt is NTLM (Windows-verificatie) of KERBEROSen u Windows-verificatie nodig hebt voor een bestaande beschikbaarheidsgroep, is het mogelijk om het eindpunt te wijzigen om meerdere verificatiemethoden te gebruiken door de verificatieoptie over te schakelen naar NEGOTIATE CERTIFICATE. Met deze wijziging kan de bestaande beschikbaarheidsgroep Windows-verificatie gebruiken, terwijl de certificaatverificatie voor SQL Managed Instance wordt gebruikt.

Als versleuteling geen AES bevat en u RC4-versleuteling nodig hebt, is het mogelijk om het eindpunt te wijzigen om beide algoritmen te gebruiken. Zie de documentatiepagina voor sys.database_mirroring_endpointsvoor meer informatie over mogelijke opties voor het wijzigen van eindpunten.

Het volgende script is een voorbeeld van het wijzigen van uw bestaande eindpunt voor databasespiegeling op SQL Server. Vervangen:

  • <YourExistingEndpointName> met de naam van uw bestaande eindpunt.
  • <SQLServerCertName> met de naam van het gegenereerde SQL Server-certificaat (verkregen in een van de bovenstaande stappen).

Afhankelijk van uw specifieke configuratie moet u het script mogelijk verder aanpassen. U kunt ook SELECT * FROM sys.certificates gebruiken om de naam van het gemaakte certificaat op te halen in 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

Nadat u de ALTER eindpuntquery hebt uitgevoerd en de modus voor dubbele verificatie hebt ingesteld op Windows en certificaat, gebruikt u deze query opnieuw op SQL Server om details weer te geven voor het eindpunt voor databasespiegeling:

-- 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

U hebt het eindpunt voor database-mirroring gewijzigd voor een SQL Managed Instance-koppeling.

Een beschikbaarheidsgroep maken in SQL Server

Als u geen bestaande beschikbaarheidsgroep hebt, is de volgende stap het maken van een beschikbaarheidsgroep op SQL Server, ongeacht de eerste primaire.

Notitie

Sla deze sectie over als u al een bestaande beschikbaarheidsgroep hebt.

Opdrachten voor het maken van de beschikbaarheidsgroep verschillen als uw SQL Managed Instance de oorspronkelijke primaire is, wat alleen wordt ondersteund vanaf SQL Server 2022 CU10.

Hoewel het mogelijk is om meerdere koppelingen voor dezelfde database tot stand te brengen, ondersteunt de koppeling alleen replicatie van één database per koppeling. Als u meerdere koppelingen voor dezelfde database wilt maken, gebruikt u dezelfde beschikbaarheidsgroep voor alle koppelingen, maar maakt u vervolgens een nieuwe gedistribueerde beschikbaarheidsgroep voor elke databasekoppeling tussen SQL Server en SQL Managed Instance.

Als SQL Server de eerste primaire server is, maakt u een beschikbaarheidsgroep met de volgende parameters voor een koppeling:

  • Oorspronkelijke primaire servernaam
  • Databasenaam
  • Een failover-modus van MANUAL
  • Een seedingmodus van AUTOMATIC

Zoek eerst uw SQL Server-naam op door de volgende T-SQL-instructie uit te voeren:

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

Gebruik vervolgens het volgende script om de beschikbaarheidsgroep op SQL Server te maken. Vervangen:

  • <AGNameOnSQLServer> met de naam van uw beschikbaarheidsgroep op SQL Server. Voor een koppeling naar een beheerd exemplaar is één database per beschikbaarheidsgroep vereist. Voor meerdere databases moet u meerdere beschikbaarheidsgroepen maken. Overweeg elke beschikbaarheidsgroep een naam te geven zodat de naam overeenkomt met de bijbehorende database, bijvoorbeeld AG_<db_name>.
  • <DatabaseName> met de naam van de database die u wilt repliceren.
  • <SQLServerName> met de naam van uw SQL Server-exemplaar dat u in de vorige stap hebt verkregen.
  • <SQLServerIP> met het IP-adres van SQL Server. U kunt de naam van een om te zetten SQL Server-hostmachine als alternatief gebruiken, maar u moet ervoor zorgen dat de naam kan worden omgezet vanuit het virtuele SQL Managed Instance-netwerk.
-- 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

Belangrijk

Verwijder voor SQL Server 2016 WITH (CLUSTER_TYPE = NONE) uit de bovenstaande T-SQL-instructie. Laat as-is staan voor alle latere SQL Server-versies.

Maak vervolgens de gedistribueerde beschikbaarheidsgroep op SQL Server. Als u van plan bent om meerdere koppelingen te maken, moet u voor elke koppeling een gedistribueerde beschikbaarheidsgroep maken, zelfs als u meerdere koppelingen voor dezelfde database tot stand wilt brengen.

Vervang de volgende waarden en voer vervolgens het T-SQL-script uit om uw gedistribueerde beschikbaarheidsgroep te maken.

  • <DAGName> met de naam van uw gedistribueerde beschikbaarheidsgroep. Aangezien u meerdere koppelingen voor dezelfde database kunt configureren door voor elke koppeling een gedistribueerde beschikbaarheidsgroep te maken, kunt u overwegen om elke gedistribueerde beschikbaarheidsgroep dienovereenkomstig een naam te geven, bijvoorbeeld DAG1_<db_name>, DAG2_<db_name>.
  • <AGNameOnSQLServer> met de naam van de beschikbaarheidsgroep die u in de vorige stap hebt gemaakt.
  • <AGNameOnSQLMI> met de naam van uw beschikbaarheidsgroep in SQL Managed Instance. De naam moet uniek zijn in SQL MI. Overweeg elke beschikbaarheidsgroep een naam te geven zodat de naam overeenkomt met de bijbehorende database, bijvoorbeeld AG_<db_name>_MI.
  • <SQLServerIP> met het IP-adres van SQL Server uit de vorige stap. U kunt de naam van een om te zetten SQL Server-hostmachine als alternatief gebruiken, maar zorg ervoor dat de naam kan worden omgezet vanuit het virtuele SQL Managed Instance-netwerk (waarvoor aangepaste Azure DNS moet worden geconfigureerd voor het subnet van het beheerde exemplaar).
  • <ManagedInstanceName> met de verkorte naam van uw beheerde instantie.
  • <ManagedInstanceFQDN> met de volledig gekwalificeerde domeinnaam van uw beheerde exemplaar.
-- 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

Beschikbaarheidsgroepen controleren

Gebruik het volgende script om alle beschikbaarheidsgroepen en gedistribueerde beschikbaarheidsgroepen op het SQL Server-exemplaar weer te geven. Op dit moment moet de status van uw beschikbaarheidsgroep worden connecteden moet de status van uw gedistribueerde beschikbaarheidsgroepen worden disconnected. De status van de gedistribueerde beschikbaarheidsgroep wordt verplaatst naar connected slechts nadat deze is gekoppeld aan 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

U kunt ook SSMS-objectverkenner gebruiken om beschikbaarheidsgroepen en gedistribueerde beschikbaarheidsgroepen te vinden. Vouw de map AlwaysOn High Availability uit en vervolgens de map Beschikbaarheidsgroepen.

Ten slotte kunt u de koppeling maken. De opdrachten verschillen afhankelijk van welke instantie de eerste primaire is. Gebruik de New-AzSqlInstanceLink PowerShell of az sql mi link create Azure CLI-opdracht om de koppeling te maken, zoals het PowerShell-voorbeeld in deze sectie. Het maken van de koppeling vanuit een primaire SQL Managed Instance wordt momenteel niet ondersteund met de Azure CLI.

Als u alle koppelingen in een beheerde instantie wilt zien, kunt u de Get-AzSqlInstanceLink PowerShell- of az sql mi link show Azure CLI-opdracht in Azure Cloud Shell gebruiken.

Om het proces te vereenvoudigen, meldt u zich aan bij Azure Portal en voert u het volgende script uit vanuit De Azure Cloud Shell. Vervangen:

  • <ManagedInstanceName> met de verkorte naam van uw beheerde instantie.
  • <AGNameOnSQLServer> met de naam van de beschikbaarheidsgroep die is gemaakt op SQL Server.
  • <AGNameOnSQLMI> met de naam van de beschikbaarheidsgroep die is gemaakt in SQL Managed Instance.
  • <DAGName> met de naam van de gedistribueerde beschikbaarheidsgroep die is gemaakt op SQL Server.
  • <DatabaseName> met de gerepliceerde database in de beschikbaarheidsgroep op SQL Server.
  • <SQLServerIP> met het IP-adres van uw SQL Server. Het opgegeven IP-adres moet toegankelijk zijn voor het beheerde exemplaar.

Notitie

Als u een koppeling wilt maken naar een beschikbaarheidsgroep die al bestaat, geeft u het IP-adres van de listener op bij het opgeven van de parameter <SQLServerIP>. Zorg ervoor dat er een vertrouwensrelatie tot stand is gebracht tussen alle knooppunten van de beschikbaarheidsgroep en sql Managed Instance (zie Een vertrouwensrelatie tot stand brengen tussen exemplaren sectie).

#  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

Het resultaat van deze bewerking is een tijdstempel van de geslaagde uitvoering van de een koppeling aanvraag te maken.

Voer de volgende query uit op SQL Server om de verbinding tussen SQL Managed Instance en SQL Server te controleren. De verbinding wordt niet onmiddellijk uitgevoerd. Het kan tot een minuut duren voordat de DMV een geslaagde verbinding weergeeft. Vernieuw de DMV totdat de verbinding wordt weergegeven als VERBONDEN voor de SQL Managed Instance-replica.

-- 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

Nadat de verbinding tot stand is gebracht, kan Objectverkenner- in SSMS in eerste instantie de gerepliceerde database op de secundaire replica weergeven in een Restoring-status, omdat de initiële seedingfase de volledige back-up van de database verplaatst en herstelt. Nadat de database is hersteld, moet de replicatie worden bijgehaald om de twee databases naar een gesynchroniseerde status te brengen. De database bevindt zich niet meer in Herstellen van nadat de eerste seeding is voltooid. Het seeden van kleine databases is mogelijk zo snel dat je de initiële Herstel status in SSMS niet te zien krijgt.

Belangrijk

  • De koppeling werkt alleen als er netwerkconnectiviteit bestaat tussen SQL Server en SQL Managed Instance. Volg de stappen in Netwerkconnectiviteit testenom problemen met netwerkconnectiviteit op te lossen.
  • Maak regelmatig back-ups van het logboekbestand op SQL Server. Als de gebruikte logboekruimte 100 procent bereikt, stopt de replicatie naar SQL Managed Instance totdat het gebruik van ruimte is verminderd. We raden u ten zeerste aan logboekback-ups te automatiseren door een dagelijkse taak in te stellen. Zie Back-up maken van logboekbestanden op SQL Servervoor meer informatie.

Eerste back-up van transactielogboek maken

Als SQL Server de eerste primaire server is, is het belangrijk om de eerste back-up van het transactielogboek op SQL Server te maken nadat eerste seeding is voltooid, wanneer de database niet meer in de herstellen... status in Azure SQL Managed Instance heeft. Neem vervolgens regelmatig back-ups van SQL Server-transactielogboeken om overmatige logboekgroei te minimaliseren terwijl SQL Server de primaire rol vervult.

Als SQL Managed Instance uw primaire exemplaar is, hoeft u geen actie te ondernemen, omdat met Azure SQL Managed Instance automatisch logboekback-ups worden gemaakt.

Als u de koppeling wilt verwijderen, omdat deze niet meer nodig is of omdat deze een onherstelbare status heeft en opnieuw moet worden gemaakt, kunt u dit doen met PowerShell en T-SQL.

Gebruik eerst de opdracht Remove-AzSqlInstanceLink PowerShell om de koppeling neer te zetten, zoals in het volgende voorbeeld:

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

Voer vervolgens het volgende T-SQL-script uit op SQL Server om de gedistribueerde beschikbaarheidsgroep te verwijderen. Vervang <DAGName> door de naam van de gedistribueerde beschikbaarheidsgroep die wordt gebruikt om de koppeling te maken:

USE MASTER 
GO 

DROP AVAILABILITY GROUP <DAGName>  
GO 

Ten slotte kunt u desgewenst de beschikbaarheidsgroep verwijderen als u er geen gebruik meer voor hebt. Vervang hiervoor de <AGName> door de naam van de beschikbaarheidsgroep en voer deze vervolgens uit op het respectieve exemplaar:

DROP AVAILABILITY GROUP <AGName>  
GO 

Problemen oplossen

Als er een foutbericht wordt weergegeven bij het maken van de koppeling, raadpleegt u het foutbericht in het uitvoervenster van de query voor meer informatie. Raadpleeg voor meer informatie over het oplossen van problemen met de koppeling.

De koppeling gebruiken:

Voor meer informatie over de koppeling:

Voor andere replicatie- en migratiescenario's kunt u het volgende overwegen: