Sdílet prostřednictvím


Konfigurace odkazu pomocí skriptů – Azure SQL Managed Instance

Platí pro:Azure SQL Managed Instance

V tomto článku se dozvíte, jak nakonfigurovat propojení mezi SQL Serverem a azure SQL Managed Instance pomocí skriptů Jazyka Transact-SQL a PowerShellu nebo Azure CLI. S odkazem se databáze z vaší počáteční primární repliky replikují do sekundární repliky téměř v reálném čase.

Po vytvoření propojení můžete převzít služby při selhání sekundární repliky za účelem migrace nebo zotavení po havárii.

Poznámka:

Přehled

Pomocí funkce propojení můžete replikovat databáze z počáteční primární do sekundární repliky. Pro SQL Server 2022 může být počáteční primární instance SQL Server nebo Azure SQL Managed Instance. Pro SQL Server 2019 a starší verze musí být počáteční primární server SQL Server. Po nakonfigurování propojení se databáze z počáteční primární repliky replikují do sekundární repliky.

Můžete se rozhodnout ponechat propojení pro průběžnou replikaci dat v hybridním prostředí mezi primární a sekundární replikou nebo můžete převzít služby při selhání databáze na sekundární repliku, migrovat do Azure nebo pro zotavení po havárii. U SQL Serveru 2019 a starších verzí přeruší převzetí služeb při selhání službou Azure SQL Managed Instance propojení a navrácení služeb po obnovení se nepodporuje. S SQL Serverem 2022 máte možnost udržovat propojení a navrátit služby po obnovení mezi těmito dvěma replikami – tato funkce je aktuálně ve verzi Preview.

Pokud plánujete používat sekundární spravovanou instanci pouze pro zotavení po havárii, můžete ušetřit náklady na licencování aktivací zvýhodnění hybridního převzetí služeb při selhání.

Pokyny v tomto článku použijte k ručnímu nastavení propojení mezi SQL Serverem a službou Azure SQL Managed Instance. Po vytvoření odkazu získá zdrojová databáze kopii jen pro čtení na cílové sekundární replice.

Tip

  • Pokud chcete zjednodušit používání skriptů T-SQL se správnými parametry pro vaše prostředí, důrazně doporučujeme použít průvodce propojením spravované instance v sadě SQL Server Management Studio (SSMS) a vygenerovat skript pro vytvoření odkazu. Na stránce Souhrn okna odkazu Nová spravovaná instance vyberte Místo dokončení skript.

Požadavky

Poznámka:

Některé funkce odkazu jsou obecně dostupné, zatímco některé jsou aktuálně ve verzi Preview. Další informace najdete v možnostech podpory verzí.

K replikaci databází potřebujete následující požadavky:

Zvažte použití těchto zdrojů:

  • Funkce propojení podporuje jednu databázi na odkaz. Pokud chcete replikovat více databází v instanci, vytvořte odkaz pro každou jednotlivou databázi. Pokud chcete například replikovat 10 databází do služby SQL Managed Instance, vytvořte 10 jednotlivých odkazů.
  • Kolace mezi SQL Serverem a spravovanou instancí SQL by měla být stejná. Neshoda v kolaci může způsobit neshodu v názvových osách serveru a zabránit úspěšnému připojení z SQL Serveru ke spravované instanci SQL.
  • Chyba 1475 na počátečním primárním serveru SQL Server indikuje, že je potřeba spustit nový řetěz zálohování vytvořením úplného zálohování bez COPY ONLY možnosti.
  • Pokud chcete vytvořit propojení nebo převzít služby při selhání, musí být spravovaná instance z SQL Managed Instance na SQL Server 2022 nakonfigurovaná pomocí zásad aktualizace SQL Serveru 2022. Replikace dat a převzetí služeb při selhání ze služby SQL Managed Instance na SQL Server 2022 nejsou podporovány instancemi nakonfigurovanými pomocí zásad aktualizace always-up-to-date.
  • I když můžete vytvořit odkaz z SQL Serveru 2022 na spravovanou instanci SQL nakonfigurovanou pomocí zásad aktualizace Always-up-to-date, po převzetí služeb při selhání do služby SQL Managed Instance už nebudete moci replikovat data nebo po obnovení na SQL Server 2022.

Oprávnění

Pro SQL Server byste měli mít oprávnění správce systému.

Pro službu Azure SQL Managed Instance byste měli být členem přispěvatele služby SQL Managed Instance nebo mít následující vlastní oprávnění role:

Microsoft.Sql/ prostředek Potřebná oprávnění
Microsoft.Sql/managedInstances /read, /write
Microsoft.Sql/managedInstances/hybridCertificate za akci
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 /Číst
Microsoft.Sql/managedInstances/hybridLink /read, /write, /delete
Microsoft.Sql/managedInstances/serverTrustCertificates /write, /delete, /read

Terminologie a zásady vytváření názvů

Při spouštěnískriptch Následující tabulka vysvětluje, co přesně představují různé názvy a jak získat jejich hodnoty:

Terminologie Popis Jak zjistit
Počáteční primární 1 SQL Server nebo SQL Managed Instance, kde jste původně vytvořili odkaz pro replikaci databáze do sekundární repliky.
Primární replika SQL Server nebo spravovaná instance SQL, která je aktuálně hostitelem primární databáze.
Sekundární replika SQL Server nebo spravovaná instance SQL, která přijímá data replikovaná téměř v reálném čase z aktuální primární repliky.
Název SQL Serveru Krátký jednoslovný název SQL Serveru. Příklad: sqlserver1. Spusťte SELECT @@SERVERNAME z T-SQL.
Plně kvalifikovaný název domény SQL Serveru Plně kvalifikovaný název domény (FQDN) vašeho SQL Serveru Příklad: sqlserver1.domain.com. Pokud používáte virtuální počítač Azure, podívejte se na místní konfiguraci sítě (DNS) nebo název serveru.
Název spravované instance SQL Krátký název jednoslovné spravované instance SQL. Příklad: managedinstance1. Podívejte se na název vaší spravované instance na webu Azure Portal.
Plně kvalifikovaný název domény spravované instance SQL Plně kvalifikovaný název domény (FQDN) vaší spravované instance SQL Příklad: managedinstance1.6d710bcf372b.database.windows.net. Na stránce přehledu služby SQL Managed Instance na webu Azure Portal se podívejte na název hostitele.
Přeložitelný název domény Název DNS, který se dá přeložit na IP adresu. Spuštění by například nslookup sqlserver1.domain.com mělo vrátit IP adresu, například 10.0.0.1. Spusťte nslookup příkaz z příkazového řádku.
IP adresa SQL Serveru IP adresa vašeho SQL Serveru. V případě několika IP adres na SQL Serveru zvolte IP adresu, která je přístupná z Azure. Spusťte ipconfig příkaz z příkazového řádku hostitelského operačního systému, na kterém běží SQL Server.

1 Konfigurace služby Azure SQL Managed Instance, protože vaše počáteční primární instance je aktuálně ve verzi Preview a podporuje se pouze od SQL Serveru 2022 CU10.

Nastavení obnovení a zálohování databáze

Pokud je SQL Server vaším počátečním primárním serverem, pak databáze, které se budou replikovat přes propojení, musí být v úplném modelu obnovení a musí mít aspoň jednu zálohu. Vzhledem k tomu, že Služba Azure SQL Managed Instance provádí zálohování automaticky, přeskočte tento krok, pokud je sql Managed Instance vaší počáteční primární instancí. primární

Na SQL Serveru spusťte následující kód pro všechny databáze, které chcete replikovat. Nahraďte <DatabaseName> skutečným názvem databáze.

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

Další informace naleznete v tématu Vytvoření úplné zálohy databáze.

Poznámka:

Propojení podporuje pouze replikaci uživatelských databází. Replikace systémových databází není podporována. Pokud chcete replikovat objekty na úrovni instance (uložené v master databázích nebo msdb v databázích), doporučujeme je skriptovat a spouštět skripty T-SQL v cílové instanci.

Navázání vztahu důvěryhodnosti mezi instancemi

Nejprve musíte mezi těmito dvěma instancemi navázat vztah důvěryhodnosti a zabezpečit koncové body používané ke komunikaci a šifrování dat v síti. Distribuované skupiny dostupnosti používají existující koncový bod zrcadlení databáze skupiny dostupnosti místo vlastního vyhrazeného koncového bodu. Zabezpečení a vztah důvěryhodnosti je proto potřeba nakonfigurovat mezi těmito dvěma instancemi prostřednictvím koncového bodu zrcadlení databáze skupiny dostupnosti.

Poznámka:

Odkaz je založený na technologii skupiny dostupnosti AlwaysOn. Koncový bod zrcadlení databáze je koncový bod pro zvláštní účely, který používá výhradně skupiny dostupnosti k příjmu připojení z jiných instancí. Koncový bod zrcadlení databáze by neměl být chybný se starší funkcí zrcadlení databáze SQL Serveru.

Důvěryhodnost založená na certifikátech je jediným podporovaným způsobem zabezpečení koncových bodů zrcadlení databáze pro SQL Server a spravovanou instanci SQL. Pokud máte existující skupiny dostupnosti, které používají ověřování systému Windows, musíte do existujícího koncového bodu zrcadlení přidat vztah důvěryhodnosti založené na certifikátech jako sekundární možnost ověřování. Můžete to provést pomocí ALTER ENDPOINT příkazu, jak je znázorněno dále v tomto článku.

Důležité

Certifikáty se generují s datem a časem vypršení platnosti. Před vypršením jejich platnosti je nutné je obnovit a otočit.

Následující seznam obsahuje přehled procesu zabezpečení koncových bodů zrcadlení databáze pro SQL Server i spravovanou instanci SQL:

  1. Vygenerujte certifikát na SQL Serveru a získejte jeho veřejný klíč.
  2. Získejte veřejný klíč certifikátu služby SQL Managed Instance.
  3. Vyměňte veřejné klíče mezi SQL Serverem a spravovanou instancí SQL.
  4. Import klíčů kořenové autority důvěryhodných kořenových certifikátů Azure do SQL Serveru

Následující části podrobně popisují tyto kroky.

Vytvoření certifikátu na SQL Serveru a import jeho veřejného klíče do služby SQL Managed Instance

Nejprve vytvořte hlavní klíč databáze v master databázi, pokud ještě není k dispozici. Místo následujícího skriptu vložte heslo <strong_password> a uchovávejte ho na důvěrném a bezpečném místě. Spusťte tento skript T-SQL na SQL Serveru:

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

Potom vygenerujte ověřovací certifikát na SQL Serveru. V následujícím skriptu nahraďte:

  • @cert_expiry_date s požadovaným datem vypršení platnosti certifikátu (budoucí datum).

Poznamenejte si toto datum a nastavte připomenutí, že chcete otočit (aktualizovat) certifikát SQL Serveru před datem vypršení platnosti, aby se zajistilo průběžné fungování odkazu.

Důležité

Důrazně doporučujeme použít automaticky vygenerovaný název certifikátu z tohoto skriptu. Při přizpůsobení vlastního názvu certifikátu na SQL Serveru by název neměl obsahovat žádné \ znaky.

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

Potom pomocí následujícího dotazu T-SQL na SQL Serveru ověřte, že se certifikát vytvořil:

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

Ve výsledcích dotazu uvidíte, že certifikát je zašifrovaný pomocí hlavního klíče.

Teď můžete získat veřejný klíč vygenerovaného certifikátu na SQL Serveru:

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

Uložte hodnoty SQLServerCertName výstupu a SQLServerPublicKey z něj, protože je budete potřebovat pro další krok při importu certifikátu.

Nejprve se ujistěte, že jste přihlášeni k Azure a že jste vybrali předplatné, ve kterém je vaše spravovaná instance hostovaná. Výběr správného předplatného je zvlášť důležitý, pokud máte ve svém účtu více než jedno předplatné Azure.

<SubscriptionID> nahraďte ID vašeho předplatného Azure.

# Run in Azure Cloud Shell (select PowerShell console)

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

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

Pak pomocí rutiny New-AzSqlInstanceServerTrustCertificate PowerShellu nebo az sql mi partner-cert vytvořte příkaz Azure CLI k nahrání veřejného klíče ověřovacího certifikátu z SQL Serveru do Azure, jako je například následující ukázka PowerShellu.

Vyplňte potřebné informace o uživateli, zkopírujte je, vložte a spusťte skript. Nahrazení:

  • <SQLServerPublicKey> s veřejnou částí certifikátu SQL Serveru v binárním formátu, který jste si poznamenali v předchozím kroku. Jedná se o dlouhou řetězcovou hodnotu, která začíná řetězcem 0x.
  • <SQLServerCertName> s názvem certifikátu SQL Serveru, který jste si poznamenali v předchozím kroku.
  • <ManagedInstanceName> s krátkým názvem vaší spravované instance.
# 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 

Výsledkem této operace je souhrn nahraného certifikátu SQL Serveru do Azure.

Pokud potřebujete zobrazit všechny certifikáty SQL Serveru nahrané do spravované instance, použijte příkaz Get-AzSqlInstanceServerTrustCertificate PowerShellu nebo az sql mi partner-cert list Azure CLI v Azure Cloud Shellu. Pokud chcete odebrat certifikát SQL Serveru nahraný do spravované instance SQL, použijte příkaz Remove-AzSqlInstanceServerTrustCertificate PowerShellu nebo az sql mi partner-cert delete Azure CLI v Azure Cloud Shellu.

Získání veřejného klíče certifikátu ze spravované instance SQL a jeho import do SQL Serveru

Certifikát pro zabezpečení koncového bodu propojení se automaticky vygeneruje ve službě Azure SQL Managed Instance. Získejte veřejný klíč certifikátu ze služby SQL Managed Instance a importujte ho do SQL Serveru pomocí Rutiny Get-AzSqlInstanceEndpointCertificate PowerShellu nebo az sql mi endpoint-cert zobrazte příkaz Azure CLI, například následující ukázku PowerShellu.

Upozornění

Při použití Azure CLI budete muset při použití v dalších krocích ručně přidat 0x před výstup PublicKey. Veřejný klíč bude například vypadat takto: "0x3082033E30...".

Spusťte následující skript. Nahrazení:

  • <SubscriptionID> s ID vašeho předplatného Azure.
  • <ManagedInstanceName> s krátkým názvem vaší spravované instance.
# 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   

Zkopírujte celý výstup PublicKey (začíná na 0x) tak, jak ho budete potřebovat v dalším kroku.

Pokud při vkládání veřejného klíče narazíte na problémy s kopírováním, můžete také spustit příkaz EXEC sp_get_endpoint_certificate 4 T-SQL ve spravované instanci a získat jeho veřejný klíč pro koncový bod propojení.

Dále naimportujte získaný veřejný klíč certifikátu zabezpečení spravované instance do SQL Serveru. Na SQL Serveru spusťte následující dotaz. Nahrazení:

  • <ManagedInstanceFQDN> plně kvalifikovaným názvem domény spravované instance.
  • <PublicKey> s hodnotou PublicKey získanou v předchozím kroku (z Azure Cloud Shellu počínaje 0x). Nemusíte používat uvozovky.

Důležité

Název certifikátu musí být plně kvalifikovaný název domény spravované instance SQL a neměl by být změněn. Pokud použijete vlastní název, odkaz nebude funkční.

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

Import klíčů kořenové autority důvěryhodných kořenových certifikátů Azure do SQL Serveru

Import veřejných kořenových klíčů certifikátů certifikačních autorit Microsoftu a DigiCert do SQL Serveru vyžaduje, aby sql Server důvěřoval certifikátům vydaným Azure pro database.windows.net domény.

Upozornění

Ujistěte se, že veřejný klíč začíná řetězcem 0x. Možná ho budete muset přidat ručně na začátek PublicKey, pokud tam ještě není.

Nejprve naimportujte certifikát kořenové autority PKI microsoftu na SQL Serveru:

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

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

Pak importujte certifikát kořenové autority PKI DigiCert na SQL Serveru:

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

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

Nakonec pomocí následujícího zobrazení dynamické správy ověřte všechny vytvořené certifikáty:

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

Zabezpečení koncového bodu zrcadlení databáze

Pokud nemáte existující skupinu dostupnosti nebo koncový bod zrcadlení databáze na SQL Serveru, dalším krokem je vytvoření koncového bodu zrcadlení databáze na SQL Serveru a jeho zabezpečení pomocí dříve vygenerovaného certifikátu SQL Serveru. Pokud máte existující skupinu dostupnosti nebo koncový bod zrcadlení, přejděte do části Alter an existing endpoint (Změnit existující koncový bod ).

Vytvoření a zabezpečení koncového bodu zrcadlení databáze na SQL Serveru

Pokud chcete ověřit, že nemáte vytvořený existující koncový bod zrcadlení databáze, použijte následující skript:

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

Pokud předchozí dotaz nezobrazuje existující koncový bod zrcadlení databáze, spuštěním následujícího skriptu na SQL Serveru získejte název dříve vygenerovaného certifikátu SQL Serveru.

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

Uložte SQLServerCertName z výstupu, protože ho budete potřebovat v dalším kroku.

Pomocí následujícího skriptu vytvořte nový koncový bod zrcadlení databáze na portu 5022 a zabezpečte koncový bod pomocí certifikátu SQL Serveru. Nahrazení:

  • <SQL_SERVER_CERTIFICATE> s názvem SQLServerCertName získaným v předchozím kroku.
-- 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

Spuštěním následujícího skriptu na SQL Serveru ověřte, že byl vytvořen koncový bod zrcadlení:

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

Úspěšně vytvořený koncový bod state_desc sloupec by měl obsahovat stav STARTED.

Byl vytvořen nový koncový bod zrcadlení s povoleným ověřováním certifikátů a šifrováním AES.

Změna existujícího koncového bodu

Poznámka:

Pokud jste právě vytvořili nový koncový bod zrcadlení, tento krok přeskočte. Tento krok použijte pouze v případě, že používáte existující skupiny dostupnosti s existujícím koncovým bodem zrcadlení databáze.

Pokud pro propojení používáte existující skupiny dostupnosti nebo pokud existuje existující koncový bod zrcadlení databáze, nejprve ověřte, že splňuje následující povinné podmínky pro propojení:

  • Typ musí být DATABASE_MIRRORING.
  • Připojení ověřování musí být CERTIFICATE.
  • Musí být povolené šifrování.
  • Šifrovací algoritmus musí být AES.

Spuštěním následujícího dotazu na SQL Serveru zobrazte podrobnosti o existujícím koncovém bodu zrcadlení databáze:

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

Pokud výstup ukazuje, že existující DATABASE_MIRRORING koncový bod není CERTIFICATEnebo encryption_algorthm_desc není AES, je potřeba koncový bod connection_auth_desc změnit tak, aby splňoval požadavky.

Na SQL Serveru se stejný koncový bod zrcadlení databáze používá pro skupiny dostupnosti i distribuované skupiny dostupnosti. Pokud je váš connection_auth_desc koncový bod (ověřování systému Windows) nebo KERBEROSa potřebujete ověřování Systému Windows pro existující skupinu dostupnosti, je možné koncový bod změnit tak, aby používal více metod ověřování přepnutím možnosti ověřování na NEGOTIATE CERTIFICATE.NTLM Tato změna umožňuje stávající skupině dostupnosti používat ověřování systému Windows při ověřování certifikátů pro spravovanou instanci SQL.

Podobně platí, že pokud šifrování nezahrnuje AES a potřebujete šifrování RC4, je možné koncový bod změnit tak, aby používal oba algoritmy. Podrobnosti o možných možnostech pro změnu koncových bodů najdete na stránce dokumentace pro sys.database_mirroring_endpoints.

Následující skript představuje příklad změny existujícího koncového bodu zrcadlení databáze na SQL Serveru. Nahrazení:

  • <YourExistingEndpointName> se stávajícím názvem koncového bodu.
  • <SQLServerCertName> s názvem vygenerovaného certifikátu SQL Serveru (získaného v jednom z předchozích kroků výše).

V závislosti na konkrétní konfiguraci možná budete muset skript dále přizpůsobit. Můžete také použít SELECT * FROM sys.certificates k získání názvu vytvořeného certifikátu na SQL Serveru.

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

Po spuštění dotazu koncového ALTER bodu a nastavení režimu duálního ověřování na Windows a certifikát použijte tento dotaz znovu na SQL Serveru a zobrazte podrobnosti o koncovém bodu zrcadlení databáze:

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

Úspěšně jste upravili koncový bod zrcadlení databáze pro propojení služby SQL Managed Instance.

Vytvoření skupiny dostupnosti na SQL Serveru

Pokud nemáte existující skupinu dostupnosti, dalším krokem je vytvoření na SQL Serveru bez ohledu na to, která bude počáteční primární. Příkazy pro vytvoření skupiny dostupnosti se liší, pokud je vaše spravovaná instance SQL primární, která se podporuje jenom od SQL Serveru 2022 CU10.

I když je možné vytvořit více propojení pro stejnou databázi, propojení podporuje pouze replikaci jedné databáze na propojení. Pokud chcete vytvořit více propojení pro stejnou databázi, použijte stejnou skupinu dostupnosti pro všechna propojení, ale pak vytvořte novou distribuovanou skupinu dostupnosti pro každé propojení databáze mezi SQL Serverem a spravovanou instancí SQL.

Pokud je SQL Server vaším počátečním primárním serverem, vytvořte skupinu dostupnosti s následujícími parametry odkazu:

  • Počáteční název primárního serveru
  • Název databáze
  • Režim převzetí služeb při selhání MANUAL
  • Počáteční režim AUTOMATIC

Nejprve zjistěte název SQL Serveru spuštěním následujícího příkazu T-SQL:

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

Pak pomocí následujícího skriptu vytvořte skupinu dostupnosti na SQL Serveru. Nahrazení:

  • <AGName> s názvem vaší skupiny dostupnosti. Odkaz na spravovanou instanci vyžaduje jednu databázi na skupinu dostupnosti. U více databází budete muset vytvořit více skupin dostupnosti. Zvažte pojmenování každé skupiny dostupnosti tak, aby její název odrážel odpovídající databázi , například AG_<db_name>.
  • <DatabaseName> s názvem databáze, kterou chcete replikovat.
  • <SQLServerName> s názvem vaší instance SQL Serveru získanou v předchozím kroku.
  • <SQLServerIP> s IP adresou SQL Serveru. Jako alternativu můžete použít přeložitelný název hostitelského počítače s SQL Serverem, ale musíte se ujistit, že se tento název dá přeložit z virtuální sítě služby SQL Managed Instance.
-- 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

Důležité

Pro SQL Server 2016 odstraňte WITH (CLUSTER_TYPE = NONE) z výše uvedeného příkazu T-SQL. Ponechte na všech novějších verzích SQL Serveru tak, jak je.

Dále vytvořte distribuovanou skupinu dostupnosti na SQL Serveru. Pokud plánujete vytvořit více odkazů, musíte pro každý odkaz vytvořit distribuovanou skupinu dostupnosti, a to i v případě, že vytváříte více propojení pro stejnou databázi.

Nahraďte následující hodnoty a spuštěním skriptu T-SQL vytvořte distribuovanou skupinu dostupnosti.

  • <DAGName> s názvem vaší distribuované skupiny dostupnosti. Vzhledem k tomu, že pro stejnou databázi můžete nakonfigurovat více propojení vytvořením distribuované skupiny dostupnosti pro každé propojení, zvažte odpovídající pojmenování každé distribuované skupiny dostupnosti , například DAG1_<db_name>. DAG2_<db_name>
  • <AGName> s názvem skupiny dostupnosti, kterou jste vytvořili v předchozím kroku.
  • <SQLServerIP> s IP adresou SQL Serveru z předchozího kroku. Jako alternativu můžete použít přeložitelný název hostitelského počítače s SQL Serverem, ale ujistěte se, že je tento název přeložitelný z virtuální sítě služby SQL Managed Instance (která vyžaduje konfiguraci vlastního DNS Azure pro podsíť spravované instance).
  • <ManagedInstanceName> s krátkým názvem vaší spravované instance.
  • <ManagedInstanceFQDN> plně kvalifikovaným názvem domény vaší spravované instance.
-- 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

Ověření skupin dostupnosti

Pomocí následujícího skriptu zobrazíte seznam všech skupin dostupnosti a distribuovaných skupin dostupnosti v instanci SQL Serveru. V tuto chvíli musí být connectedstav vaší skupiny dostupnosti a stav distribuovaných skupin dostupnosti musí být disconnected. Stav distribuované skupiny dostupnosti se přesune connected jenom po připojení ke službě SQL Managed Instance.

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

Alternativně můžete použít SSMS Průzkumník objektů k vyhledání skupin dostupnosti a distribuovaných skupin dostupnosti. Rozbalte složku AlwaysOn s vysokou dostupností a potom složku Skupiny dostupnosti.

Nakonec můžete vytvořit odkaz. Příkazy se liší podle toho, která instance je počáteční primární instancí. Pomocí příkazu New-AzSqlInstanceLink PowerShell nebo az sql mi link create Azure CLI vytvořte odkaz, jako je příklad PowerShellu v této části. Vytvoření odkazu z primární instance SQL Managed Instance se v současné době nepodporuje v Azure CLI.

Pokud potřebujete zobrazit všechny odkazy na spravované instanci, použijte rutinu Get-AzSqlInstanceLink PowerShell nebo az sql mi link show Azure CLI v Azure Cloud Shellu.

Pokud chcete tento proces zjednodušit, přihlaste se k webu Azure Portal a spusťte následující skript z Azure Cloud Shellu. Nahrazení:

  • <ManagedInstanceName> s krátkým názvem vaší spravované instance.
  • <AGName> s názvem skupiny dostupnosti vytvořené na SQL Serveru.
  • <DAGName> s názvem distribuované skupiny dostupnosti vytvořené na SQL Serveru.
  • <DatabaseName> s databází replikovanou ve skupině dostupnosti na SQL Serveru.
  • <SQLServerIP> s IP adresou vašeho SQL Serveru. Zadanou IP adresu musí být přístupná spravovanou instancí.
#  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

Výsledkem této operace je časové razítko úspěšného spuštění žádosti o vytvoření odkazu.

Pokud chcete ověřit připojení mezi spravovanou instancí SQL a SQL Serverem, spusťte na SQL Serveru následující dotaz. Připojení nebude okamžité. Zobrazení úspěšného připojení může trvat až minutu. Obnovte zobrazení dynamické správy, dokud se připojení nezobrazí jako PŘIPOJENÉ pro repliku spravované instance SQL.

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

Po navázání připojení může Průzkumník objektů v nástroji SSMS zpočátku zobrazit replikovanou databázi na sekundární replice ve stavu Obnovení, protože počáteční počáteční fáze počátečního nasazení databáze obnoví úplnou zálohu databáze. Po obnovení databáze musí replikace dohnat dvě databáze do synchronizovaného stavu. Po dokončení počátečního počátečního počátečního seedingu databáze už nebude v obnovení . Počáteční počáteční stav obnovení malých databází může být dostatečně rychlý, abyste v nástroji SSMS neviděli počáteční stav obnovení .

Důležité

  • Propojení nebude fungovat, pokud mezi SQL Serverem a spravovanou instancí SQL neexistuje síťové připojení. Při řešení potíží s připojením k síti postupujte podle kroků v části Testování připojení k síti.
  • Proveďte pravidelné zálohy souboru protokolu na SQL Serveru. Pokud využité místo protokolu dosáhne 100 procent, replikace do služby SQL Managed Instance se zastaví, dokud se nezmenší využití místa. Důrazně doporučujeme automatizovat zálohování protokolů nastavením každodenní úlohy. Podrobnosti najdete v tématu Zálohování souborů protokolu na SQL Serveru.

Zastavení úlohy

Pokud chcete převzít služby při selhání databáze na sekundární repliku, zastavte nejprve všechny úlohy aplikace na primárním serveru během doby údržby. To umožňuje replikaci databáze dohnat sekundární operační systém, který můžete migrovat nebo převzít služby při selhání do Azure bez ztráty dat. I když je primární databáze součástí skupiny dostupnosti AlwaysOn, nemůžete ji nastavit do režimu jen pro čtení. Před převzetím služeb při selhání je potřeba zajistit, aby aplikace nepokáněly transakce do primární repliky.

Přepnutí režimu replikace

Replikace mezi SQL Serverem a spravovanou instancí SQL je ve výchozím nastavení asynchronní. Před převzetím služeb při selhání databáze do sekundárního režimu přepněte propojení na synchronní režim. Synchronní replikace napříč velkými síťovými vzdálenostmi může zpomalit transakce na primární replice.

Přepnutí z asynchronního režimu na režim synchronizace vyžaduje změnu režimu replikace na spravované instanci SQL i SQL Serveru.

Přepnout režim replikace (SQL Managed Instance)

K přepnutí režimu replikace ve službě SQL Managed Instance použijte Azure PowerShell nebo Azure CLI.

Nejprve se ujistěte, že jste přihlášeni k Azure a že jste vybrali předplatné, ve kterém je vaše spravovaná instance hostovaná pomocí powershellu Select-AzSubscription nebo příkazu az account set Azure CLI. Výběr správného předplatného je zvlášť důležitý, pokud máte ve svém účtu více než jedno předplatné Azure.

V následující ukázce PowerShellu nahraďte <SubscriptionID> ID předplatného Azure.

# Run in Azure Cloud Shell (select PowerShell console)

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

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

Ujistěte se, že znáte název odkazu, který chcete převzít při selhání. Můžete použít příkaz Get-AzSqlInstanceLink PowerShellu nebo az sql mi link list Azure CLI.

Pomocí následujícího skriptu PowerShellu zobrazíte seznam všech aktivních odkazů ve spravované instanci SQL. Nahraďte <ManagedInstanceName> krátkým názvem vaší spravované instance.

# 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 

Ve výstupu předchozího skriptu si poznamenejte Name vlastnost odkazu, který chcete převzít služby při selhání.

Pak pomocí rutiny Update-AzSqlInstanceLink PowerShell nebo az sql mi link update Azure CLI přepněte režim replikace z asynchronní synchronizace na spravovanou instanci SQL.

V následující ukázce PowerShellu nahraďte:

  • <ManagedInstanceName> s krátkým názvem vaší spravované instance.
  • <DAGName> s názvem odkazu, který jste zjistili v předchozím kroku ( Name vlastnost z předchozího kroku).
# 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"

Předchozí příkaz označuje úspěch zobrazením souhrnu operace s vlastností ReplicationMode zobrazenou jako Sync.

Pokud potřebujete operaci vrátit zpět, spusťte předchozí skript, který přepne režim replikace, ale nahradí Sync řetězec v -ReplicationMode souboru Async.

Přepnout režim replikace (SQL Server)

Pomocí následujícího skriptu T-SQL na SQL Serveru změňte režim replikace distribuované skupiny dostupnosti na SQL Serveru z asynchronní na synchronizaci. Nahradit:

  • <DAGName> s názvem distribuované skupiny dostupnosti (používá se k vytvoření odkazu).
  • <AGName> s názvem skupiny dostupnosti vytvořené na SQL Serveru (používá se k vytvoření odkazu).
  • <ManagedInstanceName> s názvem vaší spravované instance.
-- 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);

Pokud chcete ověřit, že jste režim replikace propojení úspěšně změnili, použijte následující zobrazení dynamické správy. Výsledky označují SYNCHRONOUS_COMIT stav.

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

Teď, když jste přepnuli službu SQL Managed Instance i SQL Server do režimu synchronizace, je replikace mezi těmito dvěma instancemi synchronní. Pokud potřebujete tento stav vrátit zpět, postupujte podle stejných kroků a nastavte stav async pro SQL Server i spravovanou instanci SQL.

Kontrola hodnot LSN na SQL Serveru i ve spravované instanci SQL

Pokud chcete dokončit převzetí služeb při selhání nebo migraci, ověřte, že se replikace dokončila. V takovém případě se ujistěte, že jsou stejná pořadová čísla protokolů (LSN) v záznamech protokolu pro SQL Server i spravovanou instanci SQL.

Zpočátku se očekává, že LSN na primárním serveru bude vyšší než LSN na sekundárním serveru. Latence sítě může způsobit zpoždění replikace poněkud za primárním serverem. Vzhledem k tomu, že úloha byla zastavena na primárním serveru, měli byste očekávat, že se sítě LSN po nějaké době změní a přestanou se měnit.

Ke čtení LSN posledního zaznamenaného transakčního protokolu použijte následující dotaz T-SQL na SQL Serveru. Nahrazení:

  • <DatabaseName> zadejte název databáze a vyhledejte poslední posílené číslo LSN.
-- 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>'

Následující dotaz T-SQL ve službě SQL Managed Instance vám umožní přečíst poslední posílený LSN pro vaši databázi. Nahraďte <DatabaseName> názvem databáze.

Tento dotaz funguje ve spravované instanci SQL pro obecné účely. V případě Pro důležité obchodní informace SQL Managed Instance odkomentujte and drs.is_primary_replica = 1 komentář na konci skriptu. Na úrovni služby Pro důležité obchodní informace tento filtr zajišťuje, že podrobnosti se čtou jenom z primární repliky.

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

Alternativně můžete také použít rutinu Get-AzSqlInstanceLink PowerShell nebo az sql mi link show příkaz Azure CLI k načtení LastHardenedLsn vlastnosti odkazu ve službě SQL Managed Instance a poskytnout stejné informace jako předchozí dotaz T-SQL.

Důležité

Znovu ověřte, že je vaše úloha zastavená na primárním serveru. Zkontrolujte, jestli se sítě LSN na SQL Serveru i ve spravované instanci SQL Shodují a že zůstanou po určitou dobu stejné a beze změny. Stabilní sítě LSN v obou instancích značí, že se protokol tail replikoval do sekundárního serveru a úloha se efektivně zastaví.

Převzetí služeb při selhání databáze

Pokud chcete použít PowerShell k převzetí služeb při selhání databáze mezi SQL Serverem 2022 a službou SQL Managed Instance při zachování propojení nebo k provedení převzetí služeb při selhání se ztrátou dat pro libovolnou verzi SQL Serveru, použijte průvodce převzetím služeb při selhání mezi SQL Serverem a spravovanou instancí v nástroji SSMS a vygenerujte skript pro vaše prostředí. Plánované převzetí služeb při selhání můžete provést buď z primární nebo sekundární repliky. Pokud chcete provést vynucené převzetí služeb při selhání, připojte se k sekundární replice.

Pokud chcete přerušit propojení a zastavit replikaci při převzetí služeb při selhání nebo migraci databáze bez ohledu na verzi SQL Serveru, použijte příkaz Remove-AzSqlInstanceLink PowerShell nebo az sql mi link delete Azure CLI.

Upozornění

  • Před převzetím služeb při selhání zastavte úlohu ve zdrojové databázi, aby replikovaná databáze mohla zcela dohnat a převzít služby při selhání bez ztráty dat. Pokud provedete vynucené převzetí služeb při selhání nebo přerušíte propojení před shodami sítí LSN, může dojít ke ztrátě dat.
  • Převzetí služeb při selhání databáze v SQL Serveru 2019 a starších verzích se přeruší a odebere propojení mezi těmito dvěma replikami. Navrácení služeb po obnovení nejde provést zpět na počáteční primární server.
  • Převzetí služeb při selhání databáze při zachování propojení s SQL Serverem 2022 je aktuálně ve verzi Preview.

Následující ukázkový skript přeruší propojení a ukončí replikaci mezi vašimi replikami a provede tak čtení a zápis databáze v obou instancích. Nahrazení:

  • <ManagedInstanceName> s názvem vaší spravované instance.
  • <DAGName> s názvem odkazu, který provádíte při selhání (výstup vlastnosti Name z Get-AzSqlInstanceLink příkazu spuštěného výše).
# 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

Po úspěšném převzetí služeb při selhání se propojení zahodí a už neexistuje. Databáze SQL Serveru i databáze SLUŽBY SQL Managed Instance mohou provádět úlohy čtení a zápisu. Jsou zcela nezávislé. Nastavte aplikaci připojovací řetězec na databázi, kterou chcete aktivně používat.

Důležité

Po úspěšném převzetí služeb při selhání do služby SQL Managed Instance ručně nastavte bod aplikací připojovací řetězec na plně kvalifikovaný název domény spravované instance SQL, abyste dokončili proces migrace nebo převzetí služeb při selhání a pokračovali v provozu v Azure.

Vyčištění skupin dostupnosti

Vzhledem k tomu, že převzetí služeb při selhání s SQL Serverem 2022 nenaruší propojení, můžete zvolit, že propojení a skupiny dostupnosti necháte na místě.

Pokud se rozhodnete propojení přerušit nebo pokud převezmete služby při selhání s SQL Serverem 2019 a staršími verzemi, musíte odstranit distribuovanou skupinu dostupnosti, abyste z SQL Serveru odebrali metadata propojení. Můžete se ale rozhodnout zachovat skupinu dostupnosti na SQL Serveru.

Pokud chcete vyčistit prostředky skupiny dostupnosti, nahraďte následující hodnoty a spusťte ukázkový kód: V následujícím kódu nahraďte:

  • <DAGName> s názvem distribuované skupiny dostupnosti na SQL Serveru (používá se k vytvoření odkazu).
  • <AGName> s názvem skupiny dostupnosti na SQL Serveru (používá se k vytvoření odkazu).
-- Run on SQL Server
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName> --mandatory
GO
-- DROP AVAILABILITY GROUP <AGName> --optional
-- GO

Odstraňování potíží

Tato část obsahuje pokyny k řešení problémů s konfigurací a používáním odkazu.

Chyby

Pokud při vytváření odkazu nebo převzetí služeb při selhání databáze narazíte na chybovou zprávu, přečtěte si chybovou zprávu v okně výstupu dotazu, kde najdete další informace.

Pokud při práci s odkazem dojde k chybě, dotaz se zastaví v neúspěšném kroku. Po vyřešení chybového stavu spusťte příkaz znovu a pokračujte v akci.

Nekonzistentní stav po vynuceném převzetí služeb při selhání

Použití vynuceného převzetí služeb při selhání může vést k nekonzistentnímu stavu mezi primárními a sekundárními replikami, což způsobuje rozdělení scénáře mozku z obou replik ve stejné roli. Replikace dat v tomto stavu selže, dokud uživatel situaci nevyřeší tím, že ručně navrhne jednu repliku jako primární a druhou repliku jako sekundární.

Další informace o funkci odkazu najdete v následujících zdrojích informací: