Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Applies to:Azure SQL Managed Instance
In dit artikel leert u hoe u een link 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 SQL Server Management Studio (SSMS).
- Het configureren van Azure SQL Managed Instance als eerste primaire 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 instantie een SQL Server- of Azure SQL Managed Instance zijn. Voor SQL Server 2019 en eerdere versies moet de eerste primaire 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 voor herstel na noodgevallen. Voor SQL Server 2019 en eerdere versies wordt bij een failover naar Azure SQL Managed Instance de koppeling verbroken, en is failback niet 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 op de pagina Summary van het venster Nieuwe Beheerde InstantieScript in plaats van Voltooien.
Voorwaarden
Als u uw databases wilt repliceren, hebt u de volgende vereisten nodig:
- Een actief Azure-abonnement. Als u nog geen account hebt, een gratis account maken.
- Ondersteunde versie van SQL Server waarop de vereiste service-update is geïnstalleerd.
- Azure SQL Managed Instance. Begin als je het niet hebt.
- PowerShell-module Az.SQL 6.0.0 of hoger of Azure CLI 2.67.0 of hoger. Of gebruik bij voorkeur Azure Cloud Shell online vanuit de webbrowser om de opdrachten uit te voeren, omdat deze altijd wordt bijgewerkt met de nieuwste moduleversies.
- Een goed voorbereide omgeving.
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 moet hetzelfde zijn. Een verschil in sortering kan leiden tot een verschil in hoofdlettergebruik van de servernaam en voorkomen dat er een geslaagde verbinding van SQL Server met SQL Managed Instance tot stand komt.
- Fout 1475 op uw eerste SQL Server primaire 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, from SQL Managed Instance naar SQL Server 2025, moet uw SQL managed instance zijn geconfigureerd met het updatebeleid SQL Server 2025. Gegevensreplicatie en failover from SQL Managed Instance naar SQL Server 2025 worden niet ondersteund door exemplaren die zijn geconfigureerd met een niet-overeenkomend updatebeleid.
- Als u een koppeling tot stand wilt brengen of een failover wilt uitvoeren van SQL Managed Instance naar SQL Server 2022, moet uw SQL Managed Instance zijn geconfigureerd met het updatebeleid voor SQL Server 2022. Gegevensreplicatie en failover from SQL Managed Instance naar SQL Server 2022 worden niet ondersteund door exemplaren die zijn geconfigureerd met een niet-overeenkomend updatebeleid.
- Hoewel u een koppeling kunt maken van een ondersteunde versie van SQL Server naar een SQL managed instance geconfigureerd met de Always-up-to-date-updatebeleid, kunt u na een failover naar SQL Managed Instance geen gegevens meer repliceren of failback uitvoeren naar uw SQL Server-exemplaar.
Machtigingen
Voor SQL Server moet u sysadmin machtigingen hebben.
Voor Azure SQL Managed Instance moet u lid zijn van de SQL Managed Instance Inzender of de volgende aangepaste rolmachtigingen hebben:
| Microsoft.Sql/resource | 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 | /lezen, /schrijven, /verwijderen, /rolInstellen/actie |
| Microsoft.Sql/managedInstances/endpointCertificates | /lezen |
| Microsoft.Sql/managedInstances/hybridLink | /lezen, /schrijven, /verwijderen |
| Microsoft. Sql/managedInstances/serverTrustCertificates | /schrijven, /verwijderen, /lezen |
Terminologie- en naamconventies
Wanneer u scripts uitvoert vanuit deze gebruikershandleiding, is het belangrijk dat u SQL Server en SQL Managed Instance namen niet vergist voor hun FQDN's (Fully Qualified Domain Names). 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 waar 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 bijna realtime gerepliceerde gegevens van de huidige primaire replica ontvangt. | |
| SQL Server naam | Korte, één woord SQL Server naam. 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 Azure virtuele machine (VM) gebruikt. |
| Naam van beheerde SQL-instantie | Korte, enkel woord SQL Managed Instance naam. Bijvoorbeeld: managedinstance1. | Bekijk de naam van uw beheerde exemplaar in de 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 de 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. |
| SQL SERVER IP | IP-adres van uw SQL Server. In het geval van meerdere IP-adressen op SQL Server, 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 je aanvankelijke primaire wordt ondersteund vanaf SQL Server 2022 CU10.
Instellen van databaseherstel en back-up
Als SQL Server de eerste primaire database 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 de eerste primaire is.
Wanneer u een koppeling maakt, vindt de eerste seeding tussen de primaire en secundaire replica's plaats door een volledige back-up van de database op de primaire replica te maken, deze over te dragen naar de secundaire replica en deze daar te herstellen. Wanneer u de volledige back-up maakt, wordt u aangeraden de WITH CHECKSUM optie te gebruiken om ervoor te zorgen dat de back-up geldig is en geen beschadiging heeft. Zie BACKUP (Transact-SQL) voor meer informatie.
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 database-mirroring-eindpunt moet niet worden verward met de verouderde SQL Server-databasespiegelingfunctie.
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 authentication, 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:
- Genereer een certificaat op SQL Server en haal de bijbehorende openbare sleutel op.
- Haal een openbare sleutel van het SQL Managed Instance-certificaat op.
- Exchange de openbare sleutels tussen SQL Server en SQL Managed Instance.
- Rootcertificaten van door Azure vertrouwde certificeringsinstanties importeren in SQL Server
In de volgende secties worden deze stappen gedetailleerd beschreven.
Een certificaat maken op SQL Server en de 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_datemet 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 ophalen op 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;
Sla waarden op van SQLServerCertName en SQLServerPublicKey uit de uitvoer, omdat u deze nodig hebt voor de volgende stap wanneer u het certificaat importeert.
Controleer eerst of u bent aangemeld bij Azure en of 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 op uw account hebt.
Vervang <SubscriptionID> door de abonnements-id van uw Azure.
# 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 opdracht New-AzSqlInstanceServerTrustCertificate PowerShell of az sql mi partner-cert create Azure CLI om de openbare sleutel van het verificatiecertificaat te uploaden van SQL Server naar Azure, 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 met0x. -
<SQLServerCertName>met de SQL Server certificaatnaam die 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 opdracht Get-AzSqlInstanceServerTrustCertificate PowerShell of az sql mi partner-cert list Azure CLI in Azure Cloud Shell. Als u SQL Server certificaat wilt verwijderen dat is geüpload naar een met SQL beheerd exemplaar, gebruikt u de opdracht 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 op 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, 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 in 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 (vanaf Azure Cloud Shell, te beginnen met0x). U hoeft geen aanhalingstekens te gebruiken.
Belangrijk
De naam van het certificaat moet de SQL Managed Instance FQDN 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>
Rootcertificaten van door Azure vertrouwde certificeringsinstanties importeren in SQL Server
Het importeren van Azure ca-sleutels (Trusted Root Certificate Authority) in SQL Server is vereist voor uw SQL Server om de SQL Managed Instance certificaten van openbare sleutel te vertrouwen die zijn uitgegeven door Azure.
U kunt de benodigde root-CA-certificaatsleutels downloaden uit Azure certificeringsinstantie-details. Download minimaal de DigiCert Global Root G2 en Microsoft RSA Root Certificate Authority 2017 certificaten en importeer deze in uw SQL Server exemplaar. Als u echter van plan bent om de koppeling langer dan een paar maanden uit te voeren, downloadt en importeert u alle zeven certificaten die worden vermeld in de sectie Root-certificeringsinstanties om mogelijke onderbrekingen te voorkomen voor het geval Azure de lijst met vertrouwde CA's bijwerken.
Notitie
Het basiscertificaat in het certificeringspad voor het openbare-sleutelcertificaat van een SQL Managed Instance wordt uitgegeven door een vertrouwde root-certificeringsinstantie van Azure (CA). De specifieke basis-CA kan na verloop van tijd veranderen wanneer Azure de lijst met vertrouwde CA's bijwerkt. Installeer voor een vereenvoudigde installatie alle basis-CA-certificaten die worden vermeld in Azure basiscertificeringsinstanties. U kunt alleen de vereiste CA-sleutel installeren door de verlener van een eerder geïmporteerde SQL Managed Instance openbare sleutel te identificeren.
Sla de certificaten lokaal op in het SQL Server-exemplaar, zoals het voorbeeldpad C:\Path\To\<name of certificate>.crt, en importeer vervolgens de certificaten uit dat pad met behulp van het volgende Transact-SQL script. Vervang <name of certificate> door de werkelijke certificaatnaam, zoals DigiCert Global Root G2 of 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
Notitie
De ontbrekende opgeslagen procedure in uw SQL Server-omgeving geeft aan dat uw SQL Server-exemplaar niet beschikt over de juiste service-update die is geïnstalleerd.
Controleer ten slotte alle gemaakte certificaten met behulp van de volgende dynamische beheerweergave (DMV):
-- Run on SQL Server
USE master
SELECT * FROM sys.certificates
De certificaatketen valideren
Geplande of onbedoelde wijzigingen in certificaten kunnen de koppeling verminderen. Om onderbrekingen te voorkomen, is het belangrijk dat u de certificaatketen regelmatig valideert op SQL Server.
Sla deze stap over als u een nieuwe koppeling configureert of onlangs de certificaten hebt geïmporteerd zoals beschreven in de vorige secties.
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 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 weer te geven voor een bestaand 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
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 authentication) of KERBEROS en u Windows authentication 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 authentication 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 SQL Server op te halen.
-- 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 dubbele verificatiemodus 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 met succes het eindpunt voor database-spiegeling gewijzigd voor een koppeling met een SQL Managed Instance.
Een beschikbaarheidsgroep maken op SQL Server
Als u geen bestaande beschikbaarheidsgroep hebt, is de volgende stap het maken van een beschikbaarheidsgroep op SQL Server, ongeacht de eerste primaire groep.
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 eerste primaire is, die 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 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 Managed Instance koppeling 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, bijvoorbeeldAG_<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 de SQL Server. U kunt een oplossingsbare SQL Server hostmachinenaam als alternatief gebruiken, maar u moet ervoor zorgen dat de naam kan worden omgezet vanuit het SQL Managed Instance virtuele 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
Voor SQL Server 2016 verwijdert u WITH (CLUSTER_TYPE = NONE) uit de bovenstaande T-SQL-instructie. Laat as-is voor alle latere SQL Server versies staan.
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, bijvoorbeeldDAG1_<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 op 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, bijvoorbeeldAG_<db_name>_MI. -
<SQLServerIP>met het IP-adres van SQL Server uit de vorige stap. U kunt een omzetbare SQL Server hostmachinenaam als alternatief gebruiken, maar zorg ervoor dat de naam kan worden omgezet vanuit het SQL Managed Instance virtuele 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 zodra 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.
Een koppeling maken
Ten slotte kunt u de koppeling maken. De opdrachten verschillen afhankelijk van welke instantie de eerste primaire is. Gebruik de opdracht New-AzSqlInstanceLink PowerShell of az sql mi link create Azure CLI om de koppeling te maken, zoals het PowerShell-voorbeeld in deze sectie. Het maken van de koppeling van een primaire SQL Managed Instance wordt momenteel niet ondersteund met de Azure CLI.
Als u alle koppelingen in een beheerd exemplaar wilt zien, gebruikt u de opdracht Get-AzSqlInstanceLink PowerShell of az sql mi link show Azure CLI in Azure Cloud Shell.
- SQL Server initiële primaire
- eerste primaire van SQL MI
Om het proces te vereenvoudigen, meldt u zich aan bij de 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 op 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 <SQLServerIP> parameter. Zorg ervoor dat er een vertrouwensrelatie tot stand is gebracht tussen alle knooppunten van de beschikbaarheidsgroep en SQL Managed Instance (zie de sectie Etablish 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
Het resultaat van deze bewerking is een tijdstempel van de geslaagde uitvoering van het verzoek om een koppeling te maken.
De koppeling controleren
Als u de verbinding tussen SQL Managed Instance en SQL Server wilt controleren, voert u de volgende query uit op SQL Server. 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 Herstellenstatus wanneer de eerste 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 een netwerkverbinding 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 de ruimte verminderd wordt. We raden u ten zeerste aan logboekback-ups te automatiseren door een dagelijkse taak in te stellen. Zie Back-up van logboekbestanden op SQL Server voor meer informatie.
Eerste back-up van transactielogboek maken
Als SQL Server je eerste primaire server is, is het belangrijk dat u de eerste transactielogboekback-up op SQL Server maakt nadat de initiële seeding is voltooid, wanneer de database niet meer in de Herstellen...-status op Azure SQL Managed Instance is. Neem vervolgens regelmatig SQL Server back-ups van transactielogboeken om overmatige logboekgroei te minimaliseren terwijl SQL Server de primaire rol heeft.
Als SQL Managed Instance uw primaire account is, hoeft u geen actie te ondernemen, omdat Azure SQL Managed Instance automatisch logboekback-ups maakt.
Een koppeling neerzetten
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.
Verwante inhoud
De koppeling gebruiken:
- Voorpare-omgeving voor de Managed Instance koppeling
- Koppeling tussen SQL Server en SQL Managed Instance configureren met SSMS
- Failover via de koppeling
- Migreren met de koppeling
- aanbevolen procedures voor het onderhouden van de koppeling
- Problemen met de koppeling oplossen
Voor meer informatie over de koppeling:
Voor andere replicatie- en migratiescenario's kunt u het volgende overwegen: