Hivatkozás konfigurálása szkriptekkel – Felügyelt Azure SQL-példány

A következőre vonatkozik: Felügyelt Azure SQL-példány

Ez a cikk bemutatja, hogyan konfigurálhat kapcsolatot az SQL Server és a felügyelt Azure SQL-példány 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álás vagy vészhelyreállítás céljából feladatátvételt végezhet a másodlagos replikán.

Feljegyzés

  • A hivatkozást az SQL Server Management Studióval (SSMS) is konfigurálhatja.
  • Az Azure SQL Managed Instance kezdeti elsődlegesként való konfigurálása jelenleg előzetes verzióban érhető el, és csak az SQL Server 2022 CU10-től kezdve támogatott.

Áttekintés

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

Dönthet úgy, hogy az elsődleges és a másodlagos replika közötti hibrid környezetben hagyja meg a kapcsolatot a folyamatos adatreplikáláshoz, vagy feladatátvételt végezhet az adatbázison a másodlagos replikán, migrálhat az Azure-ba, vagy vészhelyreállítás céljából. Az SQL Server 2019-ben és a korábbi verziókban a felügyelt Azure SQL-példányra való feladatátvétel megszakítja a hivatkozást, és a feladat-visszavétel nem támogatott. Az SQL Server 2022-ben fenntarthatja a kapcsolatot, és a két replika között vissza-vissza meghiúsulhat – ez a funkció jelenleg előzetes verzióban érhető el.

Ha a másodlagos felügyelt példányt csak vészhelyreállításhoz szeretné használni, a hibrid feladatátvételi előny aktiválásával csökkentheti a licencelési költségeket.

A cikkben található utasítások segítségével manuálisan állíthatja be a kapcsolatot az SQL Server és a felügyelt Azure SQL-példány között. 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.

Tipp.

  • Ha egyszerűsíteni szeretné a T-SQL-szkriptek használatát a környezetének megfelelő paraméterekkel, javasoljuk, hogy az SQL Server Management Studio (SSMS) Felügyelt példány hivatkozás varázslójával hozzon létre egy szkriptet a hivatkozás létrehozásához. Az Új felügyelt példány hivatkozásablak Összegzés lapján válassza a Szkript lehetőséget a Befejezés helyett.

Előfeltételek

Feljegyzés

A hivatkozás néhány funkciója általánosan elérhető, míg néhány jelenleg előzetes verzióban érhető el. További információért tekintse át a verziótámogatási lehetőségeket .

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

A következőket kell fontolóra venni:

  • 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 felügyelt SQL-példányba, hozzon létre 10 különálló hivatkozást.
  • Az SQL Server és a felügyelt SQL-példány közötti rendezésnek meg kell egyeznie. A rendezés eltérése a kiszolgálónévház eltérését okozhatja, és megakadályozhatja az SQL Server és a felügyelt SQL-példány közötti sikeres kapcsolatot.
  • Az elsődleges SQL Server kezdeti 1475-ös hibája azt jelzi, hogy új biztonsági mentési láncot kell elindítania egy teljes biztonsági mentés beállítás nélkül COPY ONLY történő létrehozásával.

Jogosultságok

AZ SQL Server esetében sysadmin engedélyekkel kell rendelkeznie.

Felügyelt Azure SQL-példány esetén a felügyelt SQL-példány közreműködőjének 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 /read, /write
Microsoft.Sql/managedInstances/hybridCertificate /művelet
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 /Olvasni
Microsoft.Sql/managedInstances/hybridLink /read, /write, /delete
Microsoft.Sql/managedInstances/serverTrustCertificates /write, /delete, /read

Terminológiai és elnevezési konvenciók

Amikor szkripteket futtat ebből a felhasználói útmutatóból, fontos, hogy ne tévessze meg az SQL Server és a felügyelt SQL-példányok teljes tartományneveit (FQDN-eket). 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
Elsődleges elsődleges 1 Az SQL Server vagy a felügyelt SQL-példány, ahol először hozza létre 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 FELÜGYELT SQL-példány.
Másodlagos replika Az SQL Server vagy felügyelt SQL-példány, amely közel valós idejű replikált adatokat fogad az aktuális elsődleges replikától.
SQL Server neve Rövid, egyszavas SQL Server-név. Például: sqlserver1. Futtassa SELECT @@SERVERNAME a T-SQL-ből.
SQL Server teljes tartománynév Az 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-beli virtuális gépet használ.
Felügyelt SQL-példány neve Rövid, egyszavas felügyelt SQL-példány neve. Például: managedinstance1. Tekintse meg a felügyelt példány nevét az Azure Portalon.
FELÜGYELT SQL-példány teljes tartományneve A felügyelt SQL-példány teljes tartományneve (FQDN). Például: managedinstance1.6d710bcf372b.database.windows.net. Tekintse meg a gazdagép nevét a felügyelt SQL-példány áttekintési oldalán az Azure Portalon.
Feloldható tartománynév IP-címmel feloldható DNS-név. A futtatásnak nslookup sqlserver1.domain.com például egy OLYAN IP-címet kell visszaadnia, mint például a 10.0.0.1. Futtassa nslookup a parancsot a parancssorból.
SQL Server IP-címe Az SQL Server IP-címe. Ha több IP-címet használ az SQL Serveren, válassza az Azure-ból elérhető IP-címet. Futtassa ipconfig a parancsot az SQL Servert futtató gazda operációs rendszer parancssorából.

1 A felügyelt Azure SQL-példány kezdeti elsődlegesként való konfigurálása jelenleg előzetes verzióban érhető el, és csak az SQL Server 2022 CU10-től kezdve támogatott.

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

Ha az 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 a felügyelt Azure SQL-példány automatikusan készít biztonsági másolatot, hagyja ki ezt a lépést, ha a felügyelt SQL-példány a kezdeti elsődleges példány. elsődleges

Futtassa az alábbi kódot az SQL Serveren minden replikálni kívánt adatbázishoz. Cserélje le <DatabaseName> 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.

Feljegyzés

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ű (vagy msdb adatbázisokban master 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égpontját haszná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.

Feljegyzés

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ázistükrözési végpontok védelmére az SQL Server és a felügyelt SQL-példány esetében. Ha windowsos hitelesítést használó rendelkezésre állási csoportokkal rendelkezik, másodlagos hitelesítési lehetőségként tanúsítványalapú megbízhatóságot kell hozzáadnia a meglévő tükrözési végponthoz. Ezt az ALTER ENDPOINT utasítással teheti meg, ahogyan a cikk későbbi részében is látható.

Fontos

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

Az alábbi lista áttekintést nyújt az adatbázis-tükrözési végpontok védelmének folyamatáról mind az SQL Server, mind a felügyelt SQL-példány esetében:

  1. Hozzon létre egy tanúsítványt az SQL Serveren, és szerezze be a nyilvános kulcsát.
  2. Szerezze be a felügyelt SQL-példány tanúsítványának nyilvános kulcsát.
  3. Cserélje le a nyilvános kulcsokat az SQL Server és a felügyelt SQL-példány között.
  4. Azure-beli megbízható főtanúsítvány-szolgáltatói kulcsok importálása az SQL Serverre

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

Tanúsítvány létrehozása az SQL Serveren, és a nyilvános kulcs importálása felügyelt SQL-példányba

Először hozza létre az adatbázis főkulcsát az master adatbázisban, ha még nincs megadva. Szúrja be a jelszót <strong_password> a következő szkript helyett, é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 az SQL Serveren. 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 az automatikusan létrehozott tanúsítványnév használata ebből a szkriptből. Bár a saját tanúsítványnév testreszabása engedélyezett az SQL Serveren, 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 az alábbi T-SQL-lekérdezést az SQL Serveren 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 az SQL Serveren:

-- 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 kimenet értékeit SQLServerCertNameSQLServerPublicKey , 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 az Azure-ba, é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> értékét a saját Azure-előfizetése azonosítójára.

# 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 azure CLI-parancs használatával töltse fel a hitelesítési tanúsítvány nyilvános kulcsát az SQL Serverről az Azure-ba, például a következő PowerShell-mintát.

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

  • <SQLServerPublicKey> az SQL Server-tanúsítvány nyilvános része bináris formátumban, amelyet az előző lépésben rögzített. Ez egy hosszú sztringérték, amely a következővel 0xkezdődik: .
  • <SQLServerCertName> az előző lépésben rögzített SQL Server-tanúsítványnévvel.
  • <ManagedInstanceName> a 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 a feltöltött SQL Server-tanúsítvány összegzése az Azure-ba.

Ha egy felügyelt példányra feltöltött összes SQL Server-tanúsítványt látnia kell, használja a Get-AzSqlInstanceServerTrustCertificate PowerShellt vagy az sql mi partner-cert list Azure CLI-parancsot az Azure Cloud Shellben. A felügyelt SQL-példányra feltöltött SQL Server-tanúsítvány eltávolításához használja a Remove-AzSqlInstanceServerTrustCertificate PowerShellt vagy az sql mi partner-cert delete Azure CLI-parancsot az Azure Cloud Shellben.

A tanúsítvány nyilvános kulcsának lekérése a felügyelt SQL-példányból, és importálása az SQL Serverre

A kapcsolatvégpont védelmét szolgáló tanúsítvány automatikusan létrejön a felügyelt Azure SQL-példányon. Kérje le a tanúsítvány nyilvános kulcsát a felügyelt SQL-példányból, és importálja azt az SQL Serverre a Get-AzSqlInstanceEndpointCertificate PowerShell vagy az sql mi endpoint-cert show Azure CLI-parancs használatával, például a következő PowerShell-mintával.

Figyelem

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

Futtassa az alábbi parancsfájlt. Csere:

  • <SubscriptionID> Az Azure-előfizetés azonosítójával.
  • <ManagedInstanceName> a 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 (a 0xkövetkező lépésben ezt kell használnia).

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

Ezután importálja a felügyelt példány biztonsági tanúsítványának beszerzett nyilvános kulcsát az SQL Serverre. Futtassa a következő lekérdezést az SQL Serveren. Csere:

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

Fontos

A tanúsítvány nevének a felügyelt SQL-példány teljes tartománynevének kell lennie, ezért nem módosítható. 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-beli megbízható főtanúsítvány-szolgáltatói kulcsok importálása az SQL Serverre

A Microsoft és a DigiCert tanúsítványszolgáltatóinak (CA) nyilvános főtanúsítványkulcsainak az SQL Serverre való importálásához az SQL Servernek meg kell bíznia az Azure által database.windows.net tartományokhoz kiadott tanúsítványokban.

Figyelem

Győződjön meg arról, hogy a PublicKey egy 0x. Előfordulhat, hogy manuálisan kell hozzáadnia a PublicKey elejéhez, ha még nincs ott.

Először importálja a Microsoft PKI főhatósági tanúsítványát az SQL Serveren:

-- 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 = 0x308205A830820390A00302010202101ED397095FD8B4B347701EAABE7F45B3

    --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 exsits.'
GO

Ezután importálja a DigiCert PKI főkiszolgálói tanúsítványát az SQL Serverre:

-- 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 = 0x3082038E30820276A0030201020210033AF1E6A711A9A0BB2864B11D0

    --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 exsits.'
GO

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
SELECT * FROM sys.certificates

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

Ha nem rendelkezik meglévő rendelkezésre állási csoporttal vagy adatbázis-tü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 a korábban létrehozott SQL Server-tanúsítvánnyal való biztonságossá tétel. Ha rendelkezik meglévő rendelkezésre állási csoport vagy tükrözési végpont, 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 az SQL Serveren

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 az alábbi szkriptet az SQL Serveren 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á.

Az alábbi szkripttel hozzon létre egy új adatbázistükrözési végpontot az 5022-s porton, és biztonságossá tegye a végpontot az SQL Server-tanúsítvánnyal. Csere:

  • <SQL_SERVER_CERTIFICATE> az előző lépésben beszerzett SQLServerCertName névvel.
-- 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=5022, 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 az SQL Serveren:

-- 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égpontnak state_desc oszlopnak állapotnak kell lennie STARTED.

Ú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

Feljegyzés

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 meg kell lennie DATABASE_MIRRORING.
  • Csatlakozás ion-hitelesítésnek kell lennieCERTIFICATE.
  • A titkosítást engedélyezni kell.
  • A titkosítási algoritmusnak kell lennie AES.

Futtassa a következő lekérdezést az SQL Serveren egy meglévő adatbázistü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 CERTIFICATEvagy encryption_algorthm_desc nem AES, a végpontot módosítani kell a követelményeknek megfelelően.

Az SQL Serveren ugyanazt az adatbázis-tükrözési végpontot használja mind a rendelkezésre állási csoportok, mind az elosztott rendelkezésre állási csoportok esetében. Ha a connection_auth_desc végpont NTLM (Windows-hitelesítés) vagy KERBEROSwindowsos hitelesítésre van szüksége egy meglévő rendelkezésre állási csoporthoz, a végpontot több hitelesítési módszer használatára is módosíthatja a hitelesítési beállítás NEGOTIATE CERTIFICATEváltásával. 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 a felügyelt SQL-példány tanúsítványhitelesítését használja.

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 további információt a sys.database_mirroring_endpoints dokumentációs oldalán talál.

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

  • <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 létrehozott tanúsítvány nevét az SQL Serveren is lekérheti.

-- 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=5022, 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 Windowsra és tanúsítványra, használja újra ezt a lekérdezést az SQL Serveren 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 felügyelt SQL-példány hivatkozásához.

Rendelkezésre állási csoport létrehozása az SQL Serveren

Ha nincs meglévő rendelkezésre állási csoportja, a következő lépés az, hogy létrehoz egyet az SQL Serveren, függetlenül attól, hogy melyik lesz a kezdeti elsődleges. A rendelkezésre állási csoport létrehozásához szükséges parancsok eltérőek, ha a felügyelt SQL-példány a kezdeti elsődleges példány, amely csak az SQL Server 2022 CU10-től 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 minden adatbázis-kapcsolathoz az SQL Server és a felügyelt SQL-példány között.

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

  • Kezdeti elsődleges kiszolgáló neve
  • Adatbázis neve
  • Feladatátvételi mód: MANUAL
  • A vetés módja a AUTOMATIC

Először keresse meg az 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 az alábbi szkripttel hozza létre a rendelkezésre állási csoportot az SQL Serveren. Csere:

  • <AGName> a rendelkezésre állási csoport nevével. A felügyelt példány hivatkozásaihoz 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ímével. 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ó a felügyelt SQL-példány virtuális hálózatáról.
-- Run on SQL Server
-- Create the primary availability group on SQL Server
USE MASTER
CREATE AVAILABILITY GROUP [<AGName>]
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>:5022',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC
            );
GO

Fontos

SQL Server 2016 esetén törölje WITH (CLUSTER_TYPE = NONE) a fenti T-SQL utasításból. A kilépés az összes későbbi SQL Server-verzióra is.

Ezután hozza létre az elosztott rendelkezésre állási csoportot az SQL Serveren. 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 több hivatkozást is konfigurálhat ugyanahhoz az adatbázishoz egy elosztott rendelkezésre állási csoport létrehozásával minden hivatkozáshoz, fontolja meg az egyes elosztott rendelkezésre állási csoportok elnevezését ennek megfelelően – például DAG1_<db_name>: . DAG2_<db_name>
  • <AGName> az előző lépésben létrehozott rendelkezésre állási csoport nevével.
  • <SQLServerIP> az előző lépésben az 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 felügyelt SQL-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 felügyelt példány rövid nevével.
  • <ManagedInstanceFQDN> a 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'<AGName>' WITH 
    (
      LISTENER_URL = 'TCP://<SQLServerIP>:5022',
      AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
      FAILOVER_MODE = MANUAL,
      SEEDING_MODE = AUTOMATIC,
      SESSION_TIMEOUT = 20
    ),
    N'<ManagedInstanceName>' 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

Az alábbi szkripttel listázhatja az SQL Server-példány összes rendelkezésre állási csoportját és elosztott rendelkezésre állási csoportját. Ezen a ponton a rendelkezésre állási csoport állapotának kell lennie connected, és az elosztott rendelkezésre állási csoportok állapotának kell lennie disconnected. Az elosztott rendelkezésre állási csoport állapota csak a felügyelt SQL-példányhoz való csatlakozás után lép át connected .

-- 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 Explorerrel 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 a kezdeti elsődleges példány. A hivatkozás létrehozásához használja a New-AzSqlInstanceLink PowerShell vagy az sql mi link azure CLI-parancsot, például a jelen szakaszban található PowerShell-példát. A felügyelt SQL-példányból történő hivatkozás létrehozása jelenleg nem támogatott az Azure CLI-vel.

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

A folyamat egyszerűsítése érdekében jelentkezzen be az Azure Portalra, és futtassa a következő szkriptet az Azure Cloud Shellből. Csere:

  • <ManagedInstanceName> a felügyelt példány rövid nevével.
  • <AGName> az SQL Serveren létrehozott rendelkezésre állási csoport nevével.
  • <DAGName> az SQL Serveren létrehozott elosztott rendelkezésre állási csoport nevével.
  • <DatabaseName> az 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.
#  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
$AGName = "<AGName>"

# 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 + ":5022"

# Create link on managed instance. Join distributed availability group on SQL Server.
New-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName |
-PrimaryAvailabilityGroupName $AGName -SecondaryAvailabilityGroupName $ManagedInstanceName |
-TargetDatabase $DatabaseName -SourceEndpoint $SourceIP

Ennek a műveletnek az eredménye a hivatkozáskérelem létrehozásának sikeres végrehajtásának időbélyege.

A felügyelt SQL-példány és az SQL Server közötti kapcsolat ellenőrzéséhez futtassa az alábbi lekérdezést az SQL Serveren. A kapcsolat nem lesz azonnali. Akár egy percig is eltarthat, amíg a DMV sikeres kapcsolatot mutat. Frissítse a DMV-t, amíg a kapcsolat csatlakoztatva nem jelenik meg a felügyelt SQL-példány replikájához.

-- 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 előfordulhat, hogy az SSMS Objektumkezelője kezdetben visszaállítási állapotban jeleníti meg a replikált adatbázist a másodlagos replikán, amikor a kezdeti bevezetési fázis á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 zárnia, hogy a két adatbázis szinkronizált állapotba kerüljön. Az adatbázis a kezdeti vetés befejezése után már nem lesz visszaállítás alatt. A kis adatbázisok üzembe helyezése elég gyors lehet ahhoz, hogy az SSMS-ben ne jelenjön meg a kezdeti visszaállítási állapot.

Fontos

  • A kapcsolat csak akkor működik, ha az SQL Server és a felügyelt SQL-példány között hálózati kapcsolat áll fenn. A hálózati kapcsolat hibaelhárításához kövesse a hálózati kapcsolat tesztelése című témakör lépéseit.
  • Készítsen rendszeres biztonsági másolatot a naplófájlról az SQL Serveren. Ha a felhasznált naplóterület eléri a 100%-ot, a felügyelt SQL-példányra történő replikáció 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 az SQL Serveren.

Számítási feladat leállítása

Az adatbázis másodlagos replikába való feladatátvételéhez először állítsa le az elsődleges alkalmazás számítási feladatait a karbantartási órák során. Ez lehetővé teszi, hogy az adatbázis-replikáció felzárkózjon a másodlagos o-ra, amely adatvesztés nélkül migrálható vagy feladatátvételt végezhet az Azure-ba. Bár az elsődleges adatbázis egy Always On rendelkezésre állási csoport része, nem állíthatja be írásvédett üzemmódra. Győződjön meg arról, hogy az alkalmazások nem véglegesítik a tranzakciókat az elsődleges replika számára a feladatátvétel előtt.

A replikációs mód váltása

Az SQL Server és a felügyelt SQL-példány közötti replikáció alapértelmezés szerint aszinkron. Mielőtt átállítja az adatbázist a másodlagosra, váltson a hivatkozás szinkron módra. A nagy hálózati távolságok közötti szinkron replikáció lelassíthatja az elsődleges replika tranzakcióit.

Az aszinkron módról szinkronizálási módra váltáshoz replikációs módváltásra van szükség mind a felügyelt SQL-példányon, mind az SQL Serveren.

Replikációs mód váltása (felügyelt SQL-példány)

A felügyelt SQL-példány replikációs módjának váltásához használja az Azure PowerShellt vagy az Azure CLI-t.

Először győződjön meg arról, hogy bejelentkezett az Azure-ba, és a Select-AzSubscription PowerShell vagy az az account set Azure CLI paranccsal 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.

Az alábbi PowerShell-példában cserélje le <SubscriptionID> az Azure-előfizetés azonosítóját.

# 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

Győződjön meg arról, hogy ismeri a feladatátvételre kívánt hivatkozás nevét. Használhatja a Get-AzSqlInstanceLink PowerShellt vagy az sql mi link listázási Azure CLI-parancsot.

Az alábbi PowerShell-szkripttel listázhatja a felügyelt SQL-példány összes aktív hivatkozását. Cserélje le <ManagedInstanceName> a felügyelt példány rövid nevére.

# Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO LIST ALL LINKS ON MANAGED INSTANCE
# ===== Enter user variables here ====

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

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

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

# List all links on the specified managed instance
Get-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName 

Az előző szkript kimenetéből jegyezze fel a Name feladatátvételre kívánt hivatkozás tulajdonságát.

Ezután az Update-AzSqlInstanceLink PowerShell vagy az az sql mi link update Azure CLI parancsával állítsa át a replikációs módot az aszinkron módról a felügyelt SQL-példány szinkronizálására az azonosított hivatkozáshoz.

A következő PowerShell-példában cserélje le a következőt:

  • <ManagedInstanceName> a felügyelt példány rövid nevével.
  • <DAGName> az előző lépésben talált hivatkozás nevével (az Name előző lépés tulajdonságával).
# Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO SWITCH LINK REPLICATION MODE (ASYNC\SYNC)
# ===== Enter user variables here ====

# Enter the link name 
$LinkName = "<DAGName>"  

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

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

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

# Update replication mode of the specified link
Update-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName |
-Name $LinkName -ReplicationMode "Sync"

Az előző parancs a sikerességet jelzi a művelet összegzésének megjelenítésével, a tulajdonság ReplicationMode pedig a következőképpen jelenik meg Sync: .

Ha vissza kell állítania a műveletet, hajtsa végre az előző szkriptet a replikációs mód váltásához, de cserélje le a sztringet Sync a -ReplicationMode következőre Async.

Replikációs mód váltása (SQL Server)

Az SQL Serveren a következő T-SQL-szkripttel módosíthatja az SQL Server elosztott rendelkezésre állási csoportjának replikációs módját aszinkronról szinkronizálásra. Helyettesít:

  • <DAGName> az elosztott rendelkezésre állási csoport nevével (a hivatkozás létrehozásához használatos).
  • <AGName> az SQL Serveren létrehozott rendelkezésre állási csoport nevével (a hivatkozás létrehozásához használatos).
  • <ManagedInstanceName> a felügyelt példány nevével.
-- Run on SQL Server
-- Sets the distributed availability group to a synchronous commit.
-- ManagedInstanceName example: 'sqlmi1'
USE master
GO
ALTER AVAILABILITY GROUP [<DAGName>] 
MODIFY 
AVAILABILITY GROUP ON
    '<AGName>' WITH
    (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
    '<ManagedInstanceName>' WITH
    (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);

A hivatkozás replikációs módjának sikeres módosításához használja az alábbi dinamikus felügyeleti nézetet. Az eredmények az állapotot SYNCHRONOUS_COMIT jelzik.

-- Run on SQL Server
-- Verifies the state of the distributed availability group
SELECT
    ag.name, ag.is_distributed, ar.replica_server_name,
    ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc,
    ars.operational_state_desc, ars.synchronization_health_desc
FROM
    sys.availability_groups ag
    join sys.availability_replicas ar
    on ag.group_id=ar.group_id
    left join sys.dm_hadr_availability_replica_states ars
    on ars.replica_id=ar.replica_id
WHERE
    ag.is_distributed=1

Most, hogy a felügyelt SQL-példányt és az SQL Servert is szinkronizálási módra kapcsolta, a két példány közötti replikáció szinkron módon történik. Ha vissza kell fordítania ezt az állapotot, kövesse ugyanazokat a lépéseket, és állítsa be az állapotot async az SQL Server és a felügyelt SQL-példány esetében is.

LSN-értékek ellenőrzése az SQL Serveren és a felügyelt SQL-példányon

A feladatátvétel vagy az áttelepítés befejezéséhez ellenőrizze, hogy a replikáció befejeződött-e. Ehhez győződjön meg arról, hogy az SQL Server és a felügyelt SQL-példány naplórekordjaiban szereplő naplóütemezési számok (LSN-ek) megegyeznek.

Kezdetben várható, hogy az elsődleges LSN magasabb lesz, mint a másodlagos LSN. A hálózati késés azt okozhatja, hogy a replikáció kissé elmarad az elsődlegesétől. Mivel a számítási feladat le lett állítva az elsődlegesen, az LSN-eknek egyeznie kell, és egy idő után le kell állítania a módosítást.

Az SQL Server következő T-SQL-lekérdezésével olvassa be az utolsó rögzített tranzakciónapló LSN-ét. Csere:

  • <DatabaseName> az adatbázis nevével, és keresse meg az utolsó megkeményített LSN-számot.
-- Run on SQL Server
-- Obtain the last hardened LSN for the database on SQL Server.
SELECT
    ag.name AS [Replication group],
    db.name AS [Database name], 
    drs.database_id AS [Database ID], 
    drs.group_id, 
    drs.replica_id, 
    drs.synchronization_state_desc AS [Sync state], 
    drs.end_of_log_lsn AS [End of log LSN],
    drs.last_hardened_lsn AS [Last hardened LSN] 
FROM
    sys.dm_hadr_database_replica_states drs
    inner join sys.databases db on db.database_id = drs.database_id
    inner join sys.availability_groups ag on drs.group_id = ag.group_id
WHERE
    ag.is_distributed = 1 and db.name = '<DatabaseName>'

A felügyelt SQL-példányon a következő T-SQL-lekérdezéssel olvassa be az adatbázis utolsó megkeményített LSN-ét. Cserélje le <DatabaseName> az adatbázis nevét.

Ez a lekérdezés egy általános célú felügyelt SQL-példányon működik. A felügyelt SQL-példányok üzletileg kritikus esetében a szkript végén bontsa ki a megjegyzéstand drs.is_primary_replica = 1. A üzletileg kritikus szolgáltatásszinten ez a szűrő biztosítja, hogy a részletek csak az elsődleges replikából legyenek beolvasva.

-- Run on SQL managed instance
-- Obtain the LSN for the database on SQL Managed Instance.
SELECT
    db.name AS [Database name],
    drs.database_id AS [Database ID], 
    drs.group_id, 
    drs.replica_id, 
    drs.synchronization_state_desc AS [Sync state],
    drs.end_of_log_lsn AS [End of log LSN],
    drs.last_hardened_lsn AS [Last hardened LSN]
FROM
    sys.dm_hadr_database_replica_states drs
    inner join sys.databases db on db.database_id = drs.database_id
WHERE
    db.name = '<DatabaseName>'
    -- for Business Critical, add the following as well
    -- AND drs.is_primary_replica = 1

Másik lehetőségként használhatja a Get-AzSqlInstanceLink PowerShellt vagy az sql mi link show Azure CLI-parancsot is a felügyelt SQL-példányon található hivatkozás tulajdonságának lekéréséhezLastHardenedLsn, hogy ugyanazokat az információkat adja meg, mint az előző T-SQL-lekérdezés.

Fontos

Ellenőrizze ismét, hogy a számítási feladat le van-e állítva az elsődlegesen. Ellenőrizze, hogy az SQL Server és az SQL Managed Instance LSN-jei egyeznek-e, és hogy egy ideig nem egyeznek-e meg és nem változnak-e. A stabil LSN-k mindkét példányon azt jelzik, hogy a tail napló replikálva lett a másodlagosra, és a számítási feladat hatékonyan leállt.

Adatbázis feladatátvétele

Ha a PowerShell használatával szeretne feladatátvételt végezni egy adatbázison az SQL Server 2022 és a felügyelt SQL-példány között, miközben továbbra is fenntartja a kapcsolatot, vagy az SQL Server bármely verziójában adatvesztéssel szeretne feladatátvételt végrehajtani, használja az SQL Server és a Felügyelt példány varázsló közötti feladatátvételt az SSMS-ben a környezet szkriptjének létrehozásához. Tervezett feladatátvételt az elsődleges vagy a másodlagos replikából is végrehajthat. Kényszerített feladatátvételhez csatlakozzon a másodlagos replikához.

Ha meg szeretné szüntetni a csatolást, és le szeretné állítani a replikációt, amikor az adatbázist az SQL Server-verziótól függetlenül feladatátvételre vagy migrálásra használja a Remove-AzSqlInstanceLink PowerShell vagy az sql mi link delete Azure CLI parancsot.

Figyelem

  • A feladatátvétel előtt állítsa le a számítási feladatot a forrásadatbázison, hogy a replikált adatbázis teljes mértékben felzárkózhasson és feladatátvételt hajtson létre adatvesztés nélkül. Ha kényszerített feladatátvételt hajt végre, vagy az LSN-k egyeztetése előtt megszakítja a hivatkozást, adatvesztést eredményezhet.
  • Az SQL Server 2019-es és korábbi verzióiban lévő adatbázisok feladatátvétele megszakad, és eltávolítja a két replika közötti kapcsolatot. A kezdeti elsődlegesre való visszalépés nem sikerült.
  • Az adatbázis feladatátvétele az SQL Server 2022-vel való kapcsolat fenntartása közben jelenleg előzetes verzióban érhető el.

Az alábbi példaszkript megszakítja a csatolást, és véget vet a replikák közötti replikációnak, így az adatbázis mindkét példányon olvasható/írható. Csere:

  • <ManagedInstanceName> a felügyelt példány nevével.
  • <DAGName> a feladatátvétel alatt álló hivatkozás nevével (a tulajdonság Name kimenete a korábban végrehajtott parancsból Get-AzSqlInstanceLink ).
# Run in Azure Cloud Shell (select PowerShell console) 
# =============================================================================
# POWERSHELL SCRIPT TO FAIL OVER OR MIGRATE DATABASE TO AZURE
# ===== Enter user variables here ====

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

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

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

# Failover the specified link
Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup |
-InstanceName $ManagedInstanceName -Name $LinkName -Force

Ha a feladatátvétel sikeres, a hivatkozás el lesz dobva, és már nem létezik. Az SQL Server-adatbázis és a felügyelt SQL-példány adatbázisa egyaránt képes olvasási/írási számítási feladat végrehajtására. Teljesen függetlenek. Az alkalmazás kapcsolati sztring újra a használni kívánt adatbázishoz.

Fontos

Miután sikeresen feladatátvételt végzett a felügyelt SQL-példányon, manuálisan küldje át az alkalmazás(ok) kapcsolati sztring a felügyelt SQL-példány teljes tartománynevéhez a migrálási vagy feladatátvételi folyamat befejezéséhez, majd futtassa tovább az Azure-ban.

Rendelkezésre állási csoportok törlése

Mivel az SQL Server 2022-vel végzett feladatátvétel nem szakítja meg a hivatkozást, dönthet úgy, hogy a hivatkozást és a rendelkezésre állási csoportokat helyben hagyja.

Ha úgy dönt, hogy megszakítja a hivatkozást, vagy ha az SQL Server 2019-es és korábbi verzióival van feladatátvétele, el kell távolítania az elosztott rendelkezésre állási csoportot, hogy eltávolíthassa a hivatkozás metaadatait az SQL Serverről. Azonban dönthet úgy is, hogy megtartja a rendelkezésre állási csoportot az SQL Serveren.

A rendelkezésre állási csoport erőforrásainak törléséhez cserélje le a következő értékeket, majd futtassa a mintakódot: A következő kódban cserélje le a következőt:

  • <DAGName> az SQL Server elosztott rendelkezésre állási csoportjának nevével (a hivatkozás létrehozásához használatos).
  • <AGName> az SQL Server rendelkezésre állási csoportjának nevével (a hivatkozás létrehozásához használatos).
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName> --mandatory
GO
-- DROP AVAILABILITY GROUP <AGName> --optional
-- GO

Hibaelhárítás

A szakasz útmutatást nyújt a hivatkozás konfigurálásával és használatával kapcsolatos problémák megoldásához.

Hibák

Ha hibaüzenet jelenik meg a hivatkozás létrehozásakor vagy egy adatbázis feladatátvételekor, további információért tekintse át a hibaüzenetet a lekérdezés kimeneti ablakában.

Ha a hivatkozás használatakor hibaüzenet jelenik meg, a lekérdezés a sikertelen lépésnél leáll. A hibafeltétel feloldása után futtassa újra a parancsot a művelet folytatásához.

Inkonzisztens állapot a kényszerített feladatátvétel után

A kényszerített feladatátvétel inkonzisztens állapotot eredményezhet az elsődleges és a másodlagos replikák között, ami megosztott agyforgatókönyvet okoz mindkét replika esetében ugyanabban a szerepkörben. Az adatreplikálás ebben az állapotban meghiúsul, amíg a felhasználó meg nem oldja a helyzetet azáltal, hogy manuálisan jelöli ki az egyik replikát elsődlegesként, a másik replikát pedig másodlagosként.

A hivatkozás funkcióval kapcsolatos további információkért tekintse meg a következő erőforrásokat: