Megosztás a következőn keresztül:


Hivatkozás konfigurálása szkriptekkel – Azure SQL Managed Instance

A következőre vonatkozik: :Azure SQL Managed Instance

Ez a cikk bemutatja, hogyan konfigurálhat link SQL Server és Azure SQL Managed Instance között Transact-SQL és PowerShell- vagy Azure CLI-szkriptekkel. A hivatkozással a kezdeti elsődleges adatbázis adatbázisai közel valós időben replikálódnak a másodlagos replikába.

A hivatkozás létrehozása után migráció vagy katasztrófa utáni helyreállítás céljából átállhat a másodlagos replikára.

Jegyzet

Áttekintés

A hivatkozás funkcióval az adatbázisokat replikálhatja a kezdeti elsődlegesről a másodlagos replikára. A 2022-SQL Server esetében a kezdeti elsődleges lehet SQL Server vagy Azure SQL Managed Instance. A 2019-SQL Server és a korábbi verziók esetében a kezdeti elsődlegesnek SQL Server kell lennie. A hivatkozás konfigurálása után a rendszer replikálja a kezdeti elsődleges adatbázist a másodlagos replikába.

Dönthet úgy, hogy az elsődleges és a másodlagos replika közötti hibrid környezetben biztosítja a folyamatos adatreplikációt, vagy feladatátvételt végezhet az adatbázison a másodlagos replikán, illetve migrálhat az Azure-ba vagy végrehajthatja a vészhelyreállítást. Az SQL Server 2019 és a korábbi verziók esetében az Azure SQL Managed Instance-ra történő átállás megszakítja az összekapcsolást, és a visszaállás nem támogatott. A 2022-es SQL Server lehetővé teszi a kapcsolat fenntartását, és a két replika közötti hibatűrő átváltást.

Ha a másodlagos felügyelt példányt csak katasztrófa utáni helyreállításra tervezi használni, úgy takaríthat meg a licencelési költségeken, hogy aktiválja a hibrid feladatátvételi előnyt.

A cikkben található utasítások segítségével manuálisan állíthatja be a SQL Server és a Azure SQL Managed Instance közötti kapcsolatot. A hivatkozás létrehozása után a forrásadatbázis egy írásvédett másolatot kap a másodlagos célreplikán.

Borravaló

Ha egyszerűsíteni szeretné a T-SQL-szkriptek használatát a környezetének megfelelő paraméterekkel, javasoljuk, hogy használja a SQL Server Management Studio (SSMS) Managed Instance hivatkozás varázslóját a hivatkozás létrehozásához. A SummaryNew Managed Instance link ablakban válassza a Script lehetőséget a Finish helyett.

Előfeltételek

Az adatbázisok replikálásához a következő előfeltételekre van szükség:

Vegye figyelembe a következőket:

  • A hivatkozás funkció hivatkozásonként egy adatbázist támogat. Ha több adatbázist szeretne replikálni egy példányon, hozzon létre egy hivatkozást minden egyes adatbázishoz. Ha például 10 adatbázist szeretne replikálni SQL Managed Instance, hozzon létre 10 különálló hivatkozást.
  • A SQL Server és a SQL Managed Instance közötti kollációnak azonosnak kell lennie. Eltérés a rendezési sorrendben okozhatja a kiszolgálónév kis- és nagybetűs eltérését, és megakadályozhatja a sikeres kapcsolat létesítését az SQL Server és az SQL Managed Instance között.
  • Az SQL Server kezdeti elsődleges 1475 hiba azt jelzi, hogy új biztonsági mentési láncot kell elindítania egy teljes biztonsági mentés készítésével a COPY ONLY beállítás nélkül.
  • A SQL Managed Instance és a 2025-ös SQL Server közötti hivatkozás vagy feladatátvétel létrehozásához az SQL managed instance-et a SQL Server 2025-ös frissítési szabályzattal kell konfigurálni. Az SQL Managed Instance adatainak replikálása és feladatátvitele az SQL Server 2025-re nem támogatott az olyan példányok esetében, amelyeknél nem egyeznek a frissítési szabályzatok.
  • A kapcsolat vagy feladatátvétel létrehozásához a SQL Managed Instance-ból a SQL Server 2022-be, a SQL managed instance-t a SQL Server 2022 frissítési szabályzattal kell konfigurálni. Az SQL Managed Instance-ról az SQL Server 2022-re történő adatreplikálást és feladatátvételt nem támogatják az eltérő frissítési szabályzat szerint konfigurált példányok.
  • Bár létrehozhat egy hivatkozást az SQL Server támogatott verziójából egy Always-up-to-date frissítési szabályzattal konfigurált SQL kezelt példányra, a SQL Managed Instance-re történő feladatátvétel után már nem tudja replikálni az adatokat, és nem lehetséges a visszaállítás az SQL Server-példányba.

Engedélyek

A SQL Server számára rendelkeznie kell sysadmin engedélyekkel.

A Azure SQL Managed Instance esetében a SQL Managed Instance Közreműködő tagjának kell lennie, vagy az alábbi egyéni szerepkör-engedélyekkel kell rendelkeznie:

Microsoft. Sql/ erőforrás Szükséges engedélyek
Microsoft.Sql/managedInstances /olvas, /ír
Microsoft.Sql/managedInstances/hybridCertificate /akció
Microsoft.Sql/managedInstances/databases /olvas, /töröl, /ír, /teljesVisszaállítás/művelet, /mentésekOlvasása/művelet, /visszaállításRészletek/olvas
Microsoft.Sql/managedInstances/distributedAvailabilityGroups /olvas, /ír, /töröl, /szerepBeállítása/művelet
Microsoft.Sql/managedInstances/endpointCertificates /olvas
Microsoft.Sql/managedInstances/hybridLink /olvas, /ír, /töröl
Microsoft. Sql/managedInstances/serverTrustCertificates /ír, /töröl, /olvas

Terminológiai és elnevezési konvenciók

Amikor szkripteket futtat ebből a felhasználói útmutatóból, fontos, hogy ne tévessze össze az SQL Server és az SQL Managed Instance neveket a teljesen képzett tartományneveikkel (FQDN-ekkel). Az alábbi táblázat bemutatja, hogy a különböző nevek pontosan mit jelentenek, és hogyan szerezhetik be az értékeiket:

Terminológia Leírás Útmutató a kereséshez
Kezdeti elsődleges 1 Az a SQL Server vagy SQL Managed Instance, ahol először létrehozza a hivatkozást az adatbázis másodlagos replikába való replikálásához.
Elsődleges replika Az elsődleges adatbázist jelenleg üzemeltető SQL Server vagy SQL Managed Instance.
Másodlagos replika Az a SQL Server vagy SQL Managed Instance, amely közel valós idejű replikált adatokat fogad az aktuális elsődleges replikától.
SQL Server név Rövid, egyszavas SQL Server név. Például: sqlserver1. Hajtsd végre a SELECT @@SERVERNAME-t T-SQL-ből.
SQL Server teljes tartománynév A SQL Server teljes tartományneve (FQDN). Például: sqlserver1.domain.com. Tekintse meg a helyszíni hálózati (DNS-) konfigurációt vagy a kiszolgáló nevét, ha Azure virtuális gépet használ.
SQL-felügyelt példány neve Rövid, egyszavas SQL Managed Instance név. Például: managedinstance1. A felügyelt példány nevét a Azure portálon tekintheti meg.
SQL Managed Instance teljes tartománynév A SQL Managed Instance teljes tartományneve (FQDN). Például: managedinstance1.6d710bcf372b.database.windows.net. A kiszolgáló nevét az Azure portál SQL Managed Instance áttekintési lapján tekintheti meg.
Feloldható tartománynév DNS-név, amely feloldható egy IP-címre. A nslookup sqlserver1.domain.com futtatásának például egy IP-címet kell visszaadnia, például a 10.0.0.1-et. Futtassa nslookup parancsot a parancssorból.
SQL SERVER IP-cím Az SQL Server IP-címe. Ha több IP-címet használ SQL Server, válassza a Azure elérhető IP-címet. Futtassa ipconfig parancsot a SQL Server futtató gazda operációs rendszer parancssorából.

1 A Azure SQL Managed Instance kezdeti elsődlegesként való konfigurálása a SQL Server 2022 CU10 kezdettől támogatott.

Adatbázis-helyreállítás és mentés beállítása

Ha SQL Server a kezdeti elsődleges, akkor a hivatkozáson keresztül replikált adatbázisoknak a teljes helyreállítási modellben kell lenniük, és legalább egy biztonsági mentéssel kell rendelkezniük. Mivel az Azure SQL Managed Instance automatikusan készít biztonsági másolatot, hagyja ki ezt a lépést, ha a kezdő elsődleges példány az SQL Managed Instance.

Hivatkozás létrehozásakor az elsődleges és a másodlagos replikák közötti kezdeti vetés az adatbázis teljes biztonsági mentésével történik az elsődleges replikán, átviszi a másodlagos replikába, és ott állítja vissza. A teljes biztonsági mentés készítésekor azt javasoljuk, hogy használja a WITH CHECKSUM lehetőséget annak biztosítására, hogy a biztonsági mentés érvényes legyen, és ne legyen sérülés. További információ: BACKUP (Transact-SQL).

Futtassa az alábbi kódot az SQL Serveren a replikálni kívánt összes adatbázison. Cserélje le a <DatabaseName>-t a tényleges adatbázisnévre.

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

További információ: Teljes adatbázis biztonsági mentése.

Jegyzet

A hivatkozás csak a felhasználói adatbázisok replikálását támogatja. A rendszeradatbázisok replikálása nem támogatott. A példányszintű (master vagy msdb adatbázisokban tárolt) objektumok replikálásához javasoljuk, hogy szkriptelje ki őket, és futtassa a T-SQL-szkripteket a célpéldányon.

Megbízhatóság létrehozása példányok között

Először meg kell állapítania a két példány közötti megbízhatóságot, és biztonságossá kell tennie az adatokat a hálózaton keresztüli kommunikációhoz és titkosításhoz használt végpontokat. Az elosztott rendelkezésre állási csoportok a meglévő rendelkezésre állási csoport adatbázis-tükrözési végpontothasználják ahelyett, hogy saját dedikált végpontjukkal rendelkeznék. Ezért a biztonságot és a megbízhatóságot a rendelkezésre állási csoport adatbázistükrözési végponton keresztül kell konfigurálni a két példány között.

Jegyzet

A hivatkozás az Always On rendelkezésre állási csoport technológiáján alapul. Az adatbázis tükrözési végpontja egy speciális célú végpont, amelyet kizárólag a rendelkezésre állási csoportok használnak más példányok kapcsolatainak fogadásához. Az adatbázis-tükrözési végpont kifejezés nem tévesztendő össze az örökölt SQL Server adatbázis-tükrözési funkcióval.

A tanúsítványalapú megbízhatóság az egyetlen támogatott módszer az adatbázis-tükrözési végpontok védelmére SQL Server és SQL Managed Instance számára. Ha meglévő rendelkezésre állási csoportokkal rendelkezik, amelyek Windows authentication használnak, tanúsítványalapú megbízhatóságot kell hozzáadnia a meglévő tükrözési végponthoz másodlagos hitelesítési lehetőségként. Ezt a cikk későbbi részében látható ALTER ENDPOINT utasítással teheti meg.

Fontos

A tanúsítványok lejárati dátummal és idővel jönnek létre. Lejáratuk előtt meg kell újítani és cserélni kell őket.

Az alábbi lista áttekintést nyújt az adatbázis-tükrözési végpontok SQL Server és SQL Managed Instance történő védelmének folyamatáról:

  1. Hozzon létre egy tanúsítványt SQL Server, és szerezze be a nyilvános kulcsát.
  2. Szerezze be a SQL Managed Instance tanúsítvány nyilvános kulcsát.
  3. Cserélje ki a nyilvános kulcsokat az SQL Server és az SQL Managed Instance között.
  4. Azure megbízható gyökér tanúsítvány kibocsátó kulcsok importálása SQL Serverhez

A következő szakaszok részletesen ismertetik ezeket a lépéseket.

Hozzon létre egy tanúsítványt az SQL Serveren, és importálja annak nyilvános kulcsát az SQL Kezelt Példányba.

Először hozza létre az adatbázis főkulcsát a master adatbázisban, ha még nincs megadva. Szúrja be a jelszót <strong_password> helyett a következő szkriptbe, és tartsa azt bizalmas és biztonságos helyen. Futtassa ezt a T-SQL-szkriptet az SQL Serveren:

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

Ezután hozzon létre egy hitelesítési tanúsítványt a SQL Server. A következő szkriptben cserélje le a következőt:

  • @cert_expiry_date a kívánt tanúsítvány lejárati dátumával (jövőbeli dátummal).

Jegyezze fel ezt a dátumot, és állítson be egy emlékeztetőt az SQL Server-tanúsítvány lejárati dátuma előtti elforgatására (frissítésére), hogy biztosítsa a hivatkozás folyamatos működését.

Fontos

Erősen ajánlott a szkriptből származó automatikus tanúsítványnév használata. Bár a saját tanúsítvány nevének testreszabása SQL Server engedélyezett, a név nem tartalmazhat \ karaktereket.

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

Ezután használja a következő T-SQL-lekérdezést a SQL Server a tanúsítvány létrehozásának ellenőrzéséhez:

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

A lekérdezés eredményei között láthatja, hogy a tanúsítvány a fő kulccsal lett titkosítva.

Most lekérheti a létrehozott tanúsítvány nyilvános kulcsát a 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;

Mentse a SQLServerCertName és SQLServerPublicKey értékeit a kimenetből, mert a következő lépéshez szüksége lesz rá a tanúsítvány importálásakor.

Először győződjön meg arról, hogy bejelentkezett a Azure, és hogy kiválasztotta azt az előfizetést, amelyben a felügyelt példány üzemel. A megfelelő előfizetés kiválasztása különösen fontos, ha több Azure előfizetéssel rendelkezik a fiókjában.

Cserélje le a <SubscriptionID> az Azure előfizetés-azonosítójával.

# 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

Ezután a New-AzSqlInstanceServerTrustCertificate PowerShell vagy az sql mi partner-cert create Azure CLI paranccsal töltse fel a hitelesítési tanúsítvány nyilvános kulcsát SQL Server Azure, például az alábbi PowerShell-mintát.

Töltse ki a szükséges felhasználói adatokat, másolja ki, illessze be, majd futtassa a szkriptet. Helyettesít:

  • <SQLServerPublicKey> a SQL Server tanúsítvány nyilvános részének bináris formátumával, amelyet az előző lépésben rögzítettél. Ez egy hosszú sztringérték, amely a 0x-ával kezdődik.
  • <SQLServerCertName> az előző lépésben rögzített SQL Server tanúsítványnévvel.
  • <ManagedInstanceName> a(z) felügyelt példány rövid nevével.
# 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 

A művelet eredménye az, hogy feltöltötték az SQL Server tanúsítványát az Azure-ba és annak összegzése megtörtént.

Ha egy felügyelt példányba feltöltött összes SQL Server tanúsítványt látnia kell, használja a Get-AzSqlInstanceServerTrustCertificate PowerShell vagy az sql mi partner-cert list Azure CLI parancsot Azure Cloud Shell. Az SQL Server tanúsítványnak a felügyelt SQL-példányról történő eltávolításához használja a Remove-AzSqlInstanceServerTrustCertificate PowerShell vagy az az sql mi partner-cert delete Azure CLI parancsot az Azure Cloud Shellben.

Kérje le a tanúsítvány nyilvános kulcsát az SQL Managed Instance példányból, és importálja az SQL Server szerverbe.

A hivatkozásvégpont védelmét szolgáló tanúsítvány automatikusan létrejön a Azure SQL Managed Instance. Kérje le a tanúsítvány nyilvános kulcsát az SQL Managed Instance-ből, majd importálja azt az SQL Server-be a Get-AzSqlInstanceEndpointCertificate PowerShell vagy az sql mi endpoint-cert show Azure CLI paranccsal, a következő PowerShell-minta segítségével.

Figyelem

Az Azure CLI használatakor manuálisan kell hozzáadnia a 0x-t a PublicKey-kimenet elejére, amikor a következő lépések során használja. A PublicKey például a következőhöz hasonló: "0x3082033E30...".

Futtassa a következő szkriptet. Helyettesít:

  • <SubscriptionID> az Azure-előfizetés azonosítójával.
  • <ManagedInstanceName> a(z) felügyelt példány rövid nevével.
# 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   

Másolja ki a teljes PublicKey-kimenetet (0x-vel kezdődik), ahogy a következő lépésben szükség lesz rá.

Másik lehetőségként, ha problémákat tapasztal a PublicKey másolása során, a T-SQL-parancsot is futtathatja a felügyelt példányon EXEC sp_get_endpoint_certificate 4 a nyilvános kulcs lekéréséhez a hivatkozásvégponthoz.

Ezután importálja a felügyelt példány biztonsági tanúsítványának beszerzett nyilvános kulcsát a SQL Server. Futtassa a következő lekérdezést az SQL Serveren az MI-végpont tanúsítvány létrehozásához. Helyettesít:

  • <ManagedInstanceFQDN> a felügyelt példány teljes minősített tartománynevével.
  • <PublicKey> az előző lépésben kapott PublicKey értékkel (kezdve az Azure Cloud Shell-lel 0x). Nem kell idézőjeleket használnia.

Fontos

A tanúsítvány nevének az SQL Managed Instance teljes tartománynevét (FQDN) kell tartalmaznia, és azt nem szabad módosítani. A hivatkozás nem működik, ha egyéni nevet használ.

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

Azure megbízható gyökér tanúsítvány kibocsátó kulcsok importálása SQL Serverhez

A(z) SQL Server számára szükséges az Azure által kibocsátott, SQL Managed Instance nyilvános kulcstanúsítványainak megbízhatóságát biztosító, Azure-megbízható legfelső szintű hitelesítésszolgáltató (CA) kulcsok importálása.

A szükséges legfelső szintű hitelesítésszolgáltatói kulcsokat Azure hitelesítésszolgáltató adataiból töltheti le. Legalább töltse le a DigiCert Global Root G2 és Microsoft RSA főtanúsítvány-szolgáltató 2017 tanúsítványokat, és importálja őket a SQL Server-példányba. Ha azonban néhány hónapnál tovább szeretné futtatni a hivatkozást, töltse le és importálja a Root hitelesítésszolgáltatók szakaszban felsorolt mind a 7 tanúsítványt, hogy elkerülje a lehetséges fennakadásokat, ha Azure frissíti a megbízható hitelesítésszolgáltatói listát.

Jegyzet

Egy SQL Managed Instance nyilvános kulcsú tanúsítvány tanúsítványútvonalában található főtanúsítványt egy Azure megbízható főtanúsítvány (CA) állítja ki. Az adott legfelső szintű hitelesítésszolgáltató idővel változhat, amikor Azure frissíti a megbízható hitelesítésszolgáltatói listát. Az egyszerűbb beállítás érdekében telepítse az Azure főtanúsítvány-hitelesítésszolgáltatók listában felsorolt összes legfelső szintű hitelesítésszolgáltatói tanúsítványt. A korábban importált SQL Managed Instance nyilvános kulcs kiállítójának azonosításával csak a szükséges ca-kulcsot telepítheti.

Mentse a helyi tanúsítványokat a SQL Server-példányra, például a minta C:\Path\To\<name of certificate>.crt elérési útra, majd importálja a tanúsítványokat az elérési útról az alábbi Transact-SQL szkript használatával. Cserélje le <name of certificate> a tényleges tanúsítványnévre, például DigiCert Global Root G2 vagy 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

Jegyzet

Az SQL Server környezetből hiányzó sp_certificate_add_issuer tárolt eljárás azt jelzi, hogy az SQL Server példányon nincs telepítve a megfelelő szolgáltatásfrissítés.

Végül ellenőrizze az összes létrehozott tanúsítványt a következő dinamikus felügyeleti nézet (DMV) használatával:

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

A tanúsítványlánc ellenőrzése

A tanúsítványok ütemezett vagy nem szándékos módosítása ronthatja a hivatkozást. A fennakadások elkerülése érdekében fontos, hogy rendszeresen értékelje a tanúsítványláncot a SQL Server.

Hagyja ki ezt a lépést, ha új hivatkozást konfigurál, vagy nemrég importálta a tanúsítványokat az előző szakaszokban leírtak szerint.

Az adatbázis tükrözési végpontjának védelme

Ha nem rendelkezik meglévő rendelkezésre állási csoporttal vagy adatbázistükrözési végponttal az SQL Serveren, a következő lépés egy adatbázistükrözési végpont létrehozása az SQL Serveren, és annak biztonságossá tétele a korábban létrehozott SQL Server-tanúsítvánnyal. Ha rendelkezik egy meglévő rendelkezésre állási csoporttal vagy tükrözési végponttal, ugorjon a Meglévő végpont módosítása szakaszra.

Az adatbázis tükrözési végpontjának létrehozása és védelme a SQL Server

Annak ellenőrzéséhez, hogy nincs-e meglévő adatbázistükrözési végpontja, használja a következő szkriptet:

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

Ha az előző lekérdezés nem jelenít meg meglévő adatbázistükrözési végpontot, futtassa a következő szkriptet a SQL Server a korábban létrehozott SQL Server tanúsítvány nevének lekéréséhez.

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

Mentse az SQLServerCertName fájlt a kimenetből, ahogy a következő lépésben szüksége lesz rá.

A következő szkripttel hozzon létre egy új adatbázistükrözési végpontot a porton <EndpointPort>, és biztonságossá tegye a végpontot a SQL Server tanúsítvánnyal. Helyettesít:

  • <SQL_SERVER_CERTIFICATE> az előző lépésben beszerzett SQLServerCertName nevével.
-- 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

Ellenőrizze, hogy a tükrözési végpont a következő szkript futtatásával jött-e létre 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

A sikeresen létrehozott végponti state_desc oszlopnak STARTEDkell lennie.

Új tükrözési végpont jött létre a tanúsítványhitelesítéssel és az AES-titkosítás engedélyezésével.

Meglévő végpont módosítása

Jegyzet

Hagyja ki ezt a lépést, ha most hozott létre egy új tükrözési végpontot. Ezt a lépést csak akkor használja, ha meglévő rendelkezésre állási csoportokat használ egy meglévő adatbázistükrözési végponttal.

Ha meglévő rendelkezésre állási csoportokat használ a hivatkozáshoz, vagy ha már létezik adatbázistükrözési végpont, először ellenőrizze, hogy megfelel-e a hivatkozás következő kötelező feltételeinek:

  • A típusnak DATABASE_MIRRORINGkell lennie.
  • A kapcsolathitelesítésnek CERTIFICATEkell lennie.
  • A titkosítást engedélyezni kell.
  • A titkosítási algoritmusnak AESkell lennie.

Futtassa a következő lekérdezést a SQL Serveren egy meglévő adatbázis-tükrözési végpont részleteinek megtekintéséhez:

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

Ha a kimenet azt mutatja, hogy a meglévő DATABASE_MIRRORING végpont connection_auth_desc nem CERTIFICATE, vagy encryption_algorithm_desc nem AES, a végpontot módosítani kell, hogy megfeleljen a követelményeknek.

A SQL Server ugyanazt az adatbázis-tükrözési végpontot használja mind a rendelkezésre állási csoportokhoz, mind az elosztott rendelkezésre állási csoportokhoz. Ha a connection_auth_desc végpontja NTLM (Windows-hitelesítés) vagy KERBEROS, és egy meglévő rendelkezésre állási csoporthoz Windows-hitelesítésre van szüksége, a végpontot több hitelesítési módszer használatára is módosíthatja, ha a hitelesítési lehetőséget NEGOTIATE CERTIFICATE-ra váltja. Ez a módosítás lehetővé teszi, hogy a meglévő rendelkezésre állási csoport Windows-hitelesítést használjon, miközben tanúsítványhitelesítést alkalmaz az SQL Managed Instance esetében.

Hasonlóképpen, ha a titkosítás nem tartalmazza az AES-t, és RC4-titkosításra van szüksége, akkor mindkét algoritmus használatához módosíthatja a végpontot. A végpontok módosításának lehetséges lehetőségeiről a sys.database_mirroring_endpointsdokumentációjának oldalán talál további információt.

Az alábbi szkript egy példa arra, hogyan módosíthatja a meglévő adatbázistükrözési végpontot a SQL Server. Helyettesít:

  • <YourExistingEndpointName> a meglévő végpont nevével.
  • <SQLServerCertName> a létrehozott SQL Server tanúsítvány nevével (a fenti lépések egyikében).

Az adott konfigurációtól függően előfordulhat, hogy tovább kell szabnia a szkriptet. A SELECT * FROM sys.certificates használatával is lekérheti a létrehozott tanúsítvány nevét a 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

Miután futtatta a ALTER végpontlekérdezést, és beállította a kettős hitelesítési módot Windows és tanúsítványra, használja újra ezt a lekérdezést a SQL Server az adatbázis tükrözési végpontjának részleteinek megjelenítéséhez:

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

Sikeresen módosította az adatbázis tükrözési végpontját egy SQL Managed Instance kapcsolat számára.

Rendelkezésre állási csoport létrehozása a SQL Server

Ha nincs meglévő rendelkezésre állási csoportja, a következő lépés az, hogy létrehoz egyet a SQL Server, függetlenül attól, hogy melyik lesz a kezdeti elsődleges.

Jegyzet

Hagyja ki ezt a szakaszt, ha már rendelkezik meglévő rendelkezésre állási csoportval.

A rendelkezésre állási csoport létrehozására szolgáló parancsok eltérőek, ha a SQL Managed Instance a kezdeti elsődleges, amely csak SQL Server 2022 CU10 kezdve támogatott.

Bár ugyanahhoz az adatbázishoz több hivatkozás is létrehozható, a hivatkozás hivatkozásonként csak egy adatbázis replikálását támogatja. Ha több hivatkozást szeretne létrehozni ugyanahhoz az adatbázishoz, használja ugyanazt a rendelkezésre állási csoportot az összes hivatkozáshoz, majd hozzon létre egy új elosztott rendelkezésre állási csoportot az egyes adatbázis-kapcsolatokhoz SQL Server és SQL Managed Instance között.

Ha SQL Server a kezdeti elsődleges, hozzon létre egy rendelkezésre állási csoportot a következő paraméterekkel egy hivatkozáshoz:

  • Kezdeti elsődleges kiszolgáló neve
  • Adatbázis neve
  • A MANUAL feladatátvételi módja
  • A AUTOMATIC vetésmódja

Először keresse meg a SQL Server nevét a következő T-SQL utasítás futtatásával:

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

Ezután a következő szkripttel hozza létre a rendelkezésre állási csoportot a SQL Server. Helyettesít:

  • <AGNameOnSQLServer> a rendelkezésre állási csoport nevével az SQL Serveren. A Managed Instance hivatkozáshoz rendelkezésre állási csoportonként egy adatbázis szükséges. Több adatbázis esetén több rendelkezésre állási csoportot kell létrehoznia. Fontolja meg az egyes rendelkezésre állási csoportok elnevezését, hogy a neve tükrözze a megfelelő adatbázist – például AG_<db_name>.
  • <DatabaseName> a replikálni kívánt adatbázis nevével.
  • <SQLServerName> az előző lépésben beszerzett SQL Server példány nevével.
  • <SQLServerIP> az SQL Server IP-címmel. Alternatív megoldásként használhat feloldható SQL Server-gazdagépnevet, de meg kell győződnie arról, hogy a név feloldható az SQL Managed Instance virtuális hálózatról.
-- 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

Fontos

2016 SQL Server esetén törölje WITH (CLUSTER_TYPE = NONE) a fenti T-SQL-utasításból. Hagyja változatlanul a későbbi SQL Server verziók esetén.

Ezután hozza létre az elosztott rendelkezésre állási csoportot a SQL Server. Ha több hivatkozást szeretne létrehozni, akkor minden hivatkozáshoz létre kell hoznia egy elosztott rendelkezésre állási csoportot, még akkor is, ha több hivatkozást hoz létre ugyanahhoz az adatbázishoz.

Cserélje le a következő értékeket, majd futtassa a T-SQL-szkriptet az elosztott rendelkezésre állási csoport létrehozásához.

  • <DAGName> az elosztott rendelkezésre állási csoport nevével. Mivel ugyanahhoz az adatbázishoz több hivatkozást is konfigurálhat úgy, hogy minden hivatkozáshoz létrehoz egy elosztott rendelkezésre állási csoportot, fontolja meg az egyes elosztott rendelkezésre állási csoportok elnevezését – például DAG1_<db_name>, DAG2_<db_name>.
  • <AGNameOnSQLServer> az előző lépésben létrehozott rendelkezésre állási csoport nevével.
  • <AGNameOnSQLMI> a rendelkezésre állási csoport nevével az SQL Managed Instance-en. A névnek egyedinek kell lennie az SQL MI-ben. Fontolja meg az egyes rendelkezésre állási csoportok elnevezését, hogy a neve tükrözze a megfelelő adatbázist – például AG_<db_name>_MI.
  • <SQLServerIP> az előző lépésben SQL Server IP-címével. Alternatív megoldásként használhat feloldható SQL Server gazdagépnevet, de győződjön meg arról, hogy a név feloldható a SQL-felügyelt példány virtuális hálózatáról (ehhez egyéni Azure DNS-t kell konfigurálni a felügyelt példány alhálózatához).
  • <ManagedInstanceName> a(z) felügyelt példány rövid nevével.
  • <ManagedInstanceFQDN> az Ön által felügyelt példány teljes tartománynevével.
-- 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

Rendelkezésre állási csoportok ellenőrzése

A következő szkripttel listázhatja az összes rendelkezésre állási csoportot és elosztott rendelkezésre állási csoportot a SQL Server-példányon. Ezen a ponton a rendelkezésre állási csoport állapota connectedlegyen, és az elosztott rendelkezésre állási csoportok állapota pedig disconnected. Az elosztott rendelkezésre állási csoport állapota csak akkor változik connected, ha az SQL Managed Instance-hoz csatlakozik.

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

Másik lehetőségként az SSMS-Object Explorer is megkeresheti a rendelkezésre állási csoportokat és az elosztott rendelkezésre állási csoportokat. Bontsa ki az Always On High Availability mappát, majd a rendelkezésre állási csoportok mappát.

Végül létrehozhatja a hivatkozást. A parancsok attól függően különböznek, hogy melyik példány az elsődleges példány. A New-AzSqlInstanceLink PowerShell vagy az sql mi link create Azure CLI paranccsal hozza létre a hivatkozást, például a jelen szakaszban található PowerShell-példát. Az SQL Managed Instance elsődleges példányáról történő hivatkozás létrehozása jelenleg nem támogatott az Azure CLI-ben.

Ha egy felügyelt példány összes hivatkozását látnia kell, használja a Get-AzSqlInstanceLink PowerShell vagy az sql mi link show Azure CLI parancsot Azure Cloud Shell.

A folyamat egyszerűsítése érdekében jelentkezzen be a Azure portálra, és futtassa a következő szkriptet a Azure Cloud Shell. Helyettesít:

  • <ManagedInstanceName> a(z) felügyelt példány rövid nevével.
  • <AGNameOnSQLServer> a SQL Serveren létrehozott rendelkezésre állási csoport nevével.
  • <AGNameOnSQLMI> a SQL Managed Instance-ben létrehozott rendelkezésre állási csoport nevével.
  • <DAGName> a SQL Serveren létrehozott elosztott rendelkezésre állási csoport neve.
  • <DatabaseName> a SQL Server rendelkezésre állási csoportjában replikált adatbázissal.
  • <SQLServerIP> az SQL Server IP-címével. A megadott IP-címnek felügyelt példány által elérhetőnek kell lennie.

Jegyzet

Ha egy már létező rendelkezésre állási csoportra mutató hivatkozást szeretne létrehozni, adja meg a figyelő IP-címét a <SQLServerIP> paraméter megadásakor. Győződjön meg arról, hogy az összes rendelkezésre állási csoport csomópontja és SQL Managed Instance között létrejött a megbízhatóság (lásd: Establish trust between instances section).

#  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

Ennek a műveletnek az eredménye a hozzászólási link létrehozására vonatkozó kérés sikeres végrehajtásának időbélyegzője.

A SQL Managed Instance és SQL Server közötti kapcsolat ellenőrzéséhez futtassa a következő lekérdezést SQL Server. A kapcsolat nem lesz azonnali. A DMV-nek akár egy percbe is telhet, mire elkezdi jelezni a sikeres kapcsolatot. Frissítse folyamatosan a DMV-t, amíg a kapcsolat "kapcsolódva" állapotban nem jelenik meg a SQL Managed Instance replikánál.

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

A kapcsolat létrejötte után az SSMS-ben Object Explorer kezdetben egy Restoring állapotban jelenítheti meg a replikált adatbázist a másodlagos replikán, amint a kezdeti vetés fázisa áthelyezi és visszaállítja az adatbázis teljes biztonsági mentését. Az adatbázis visszaállítása után a replikációnak fel kell hoznia a két adatbázist egy szinkronizált állapotba. Az adatbázis a kezdeti feltöltés befejezése után már nem lesz visszaállítási állapotban. A kis adatbázisok kezdeti feltöltése elég gyors lehet ahhoz, hogy a kezdeti Visszaállítás állapot ne jelenjen meg az SSMS-ben.

Fontos

  • A kapcsolat csak akkor működik, ha hálózati kapcsolat áll fenn SQL Server és SQL Managed Instance között. A hálózati kapcsolatok hibaelhárításához kövesse a Hálózati kapcsolat tesztelésecímű témakör lépéseit.
  • Készítsen rendszeresen biztonsági másolatokat a naplófájlról az SQL Serveren. Ha a felhasznált naplóterület eléri a 100%-ot, a SQL Managed Instance replikálás leáll, amíg a helyhasználat nem csökken. Javasoljuk, hogy napi feladat beállításával automatizálja a naplók biztonsági mentését. További információ: Naplófájlok biztonsági mentése a SQL Server.

Készítse el az első tranzakciónapló biztonsági mentést

Ha az SQL Server a kezdeti elsődleges kiszolgáló, fontos, hogy az első tranzakciós napló biztonsági mentése az SQL Server-en történjen meg azután, hogy a kezdeti vetés befejeződik, amikor az adatbázis már nincs a Visszaállítás... állapotban az Azure SQL Managed Instance-on. Ezután rendszeresen készítsen SQL Server tranzakciónaplók biztonsági mentését a naplók túlzott növekedésének minimalizálása érdekében, amíg a SQL Server az elsődleges szerepkörben van.

Ha SQL Managed Instance az elsődleges, nem kell semmilyen műveletet elvégeznie, mivel Azure SQL Managed Instance automatikusan elvégzi a naplók biztonsági mentését.

Ha el szeretné dobni a hivatkozást, vagy azért, mert már nincs rá szükség, vagy mert helyrehozhatatlan állapotban van, és újra létre kell hoznia, ezt a PowerShell és a T-SQL használatával teheti meg.

Először használja a Remove-AzSqlInstanceLink PowerShell parancsot a hivatkozás elvetéséhez, például a következő példában:

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

Ezután futtassa a következő T-SQL-szkriptet a SQL Server az elosztott rendelkezésre állási csoport elvetéséhez. Cserélje le a <DAGName> a hivatkozás létrehozásához használt elosztott rendelkezésre állási csoport nevére:

USE MASTER 
GO 

DROP AVAILABILITY GROUP <DAGName>  
GO 

Végül, ha már nincs használatban, eltávolíthatja a rendelkezésre állási csoportot. Ehhez cserélje le a <AGName> a rendelkezésre állási csoport nevére, majd futtassa a megfelelő példányon:

DROP AVAILABILITY GROUP <AGName>  
GO 

Hibaelhárítás

Ha a hivatkozás létrehozásakor hibaüzenet jelenik meg, további információért tekintse át a hibaüzenetet a lekérdezés kimeneti ablakában. További információért tekintse meg a hivatkozás problémáinak elhárítását.

A hivatkozás használata:

További információ a hivatkozásról:

Egyéb replikációs és migrálási forgatókönyvek esetén fontolja meg a következő szempontokat: