Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Applies to:Azure SQL Managed Instance
V tomto článku se dozvíte, jak nakonfigurovat link mezi SQL Server a Azure SQL Managed Instance pomocí Transact-SQL a powershellových skriptů nebo skriptů Azure CLI. Pomocí odkazu se databáze z vaší primární repliky replikují do sekundární repliky téměř v reálném čase.
Po vytvoření propojení můžete poté přepnout na sekundární repliku za účelem migrace nebo obnovy po havárii.
Poznámka:
- Propojení je také možné nakonfigurovat pomocí SQL Server Management Studio (SSMS).
- Konfigurace Azure SQL Managed Instance jako počáteční primární je podporována od SQL Server 2022 CU10.
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ím primárním buď SQL Server, nebo Azure SQL Managed Instance. Pro SQL Server 2019 a starší verze musí být počáteční primární SQL Server. Po nakonfigurování propojení se databáze z počáteční primární repliky replikuje do sekundární repliky.
Můžete ponechat propojení pro průběžnou replikaci dat v hybridním prostředí mezi primární a sekundární replikou, nebo můžete přepnout databázi na sekundární repliku, abyste migrovali na Azure nebo pro účely zotavení po havárii. U SQL Serveru 2019 a starších verzí přepnutí při převzetí služeb při selhání na Azure SQL Managed Instance vede k přerušení propojení a návrat k původní instanci není podporován. Se SQL Server 2022 máte možnost udržovat spojení a přepínat mezi dvěma replikami.
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í.
Pomocí pokynů v tomto článku můžete ručně nastavit propojení mezi SQL Server a 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 Managed Instance v SQL Server Management Studio (SSMS) k vygenerování skriptu pro vytvoření odkazu. Na stránce Summary v okně Nový Managed Instance vyberte Script místo Finish.
Požadavky
K replikaci databází potřebujete následující požadavky:
- Aktivní Azure předplatné. Pokud žádné nemáte, vytvořte si bezplatný účet.
- Podporovaná verze SQL Server s nainstalovanou požadovanou servisní aktualizací.
- Azure SQL Managed Instance. Začněte pokud to nemáte.
- Modul PowerShellu Az.SQL 6.0.0 nebo vyšší nebo Azure CLI 2.67.0 nebo vyšší. Nebo pokud možno použijte příkazy Azure Cloud Shell online z webového prohlížeče, protože se vždy aktualizuje nejnovějšími verzemi modulů.
- Správně připravené prostředí.
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 SQL Managed Instance, vytvořte 10 jednotlivých odkazů.
- Kolace mezi SQL Serverem a SQL Managed Instance by měla být stejná. Neshoda v kolaci může způsobit nesrovnalost ve velikosti písmen v názvech serverů a zabránit úspěšnému připojení ze SQL Serveru do SQL Managed Instance.
- Chyba 1475 na počátečním primárním serveru SQL naznačuje, že je potřeba zahájit nový řetězec zálohování vytvořením úplné zálohy bez možnosti
COPY ONLY. - Pokud chcete vytvořit propojení nebo provést převzetí služeb při selhání z SQL Managed Instance na SQL Server 2025, vaše SQL Managed Instance musí být nakonfigurována s aktualizačními zásadami SQL Server 2025. Instance nakonfigurované s nesprávnými zásadami aktualizace nepodporují replikaci dat a převzetí služeb při selhání ze SQL Managed Instance do SQL Server 2025.
- Pokud chcete vytvořit propojení či provést převzetí služeb při selhání z SQL spravovaného instančního serveru na SQL Server 2022, musí být váš SQL spravovaný instanční server nakonfigurovaný s aktualizační politikou SQL Server 2022. Instalace nakonfigurované s nesouladem zásad aktualizace nepodporují replikaci dat a převzetí služeb při selhání z SQL Managed Instance do SQL Server 2022.
- I když můžete vytvořit odkaz z podporované verze SQL Serveru na spravovanou instanci SQL nakonfigurovanou pomocí aktualizační politiky Always-up-to-date, po převzetí služeb při selhání na SQL Managed Instance již nebudete schopni replikovat data ani se vrátit zpět do vaší instance SQL Serveru.
Oprávnění
Pro SQL Server byste měli mít oprávnění sysadmin.
Pro Azure SQL Managed Instance byste měli být členem SQL Managed Instance Přispěvatel nebo mít následující vlastní oprávnění role:
| Microsoft.Sql/ prostředek | Potřebná oprávnění |
|---|---|
| Microsoft.Sql/managedInstances | /číst, /psát |
| Microsoft.Sql/managedInstances/hybridCertificate | za akci |
| Microsoft.Sql/managedInstances/databases | /čtení, /smazat, /zapsat, /úplnéObnovení/akce, /čteníZáloh/akce, /podrobnostiObnovy/čtení |
| Microsoft.Sql/managedInstances/distributedAvailabilityGroups | Čtení, zápis, smazání, nastavení role/akce |
| Microsoft.Sql/managedInstances/endpointCertificates | /číst |
| Microsoft.Sql/managedInstances/hybridLink | /číst, /psát, /smazat |
| Microsoft. Sql/managedInstances/serverTrustCertificates | /psát, /smazat, /číst |
Terminologie a zásady vytváření názvů
Při spouštění skriptů z této uživatelské příručky je důležité, abyste nezaměňovali názvy SQL Server a SQL Managed Instance s jejich plně kvalifikovanými názvy domén (FQDN). 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 propojení pro replikaci databáze do sekundární repliky. | |
| Primární replika | SQL Server nebo SQL Managed Instance, které aktuálně hostuje primární databázi. | |
| Sekundární replika | SQL Server nebo SQL Managed Instance, které přijímají téměř v reálném čase replikovaná data z aktuální primární repliky. | |
| název SQL Server | Krátký jednoslovný název SQL Server. Příklad: sqlserver1. | Spusťte SELECT @@SERVERNAME z T-SQL. |
| plně kvalifikovaný název domény pro SQL Server | Plně kvalifikovaný název domény (FQDN) vašeho SQL Server 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 SQL Managed Instance | Krátký název jednoslovné SQL Managed Instance. Příklad: managedinstance1. | Název vaší spravované instance najdete na portálu Azure. |
| plně kvalifikovaný název domény SQL Managed Instance | Plně kvalifikovaný název domény (FQDN) vašeho SQL Managed Instance Příklad: managedinstance1.6d710bcf372b.database.windows.net. | Název hostitele najdete na stránce přehledu SQL Managed Instance na portálu Azure. |
| Řešitelný název domény | Název DNS, který se dá přeložit na IP adresu. Například spuštění nslookup sqlserver1.domain.com by mělo vrátit IP adresu, jako je 10.0.0.1. |
Spusťte nslookup příkaz z příkazového řádku. |
| SQL SERVER IP | IP adresa vašeho SQL Server. V případě více IP adres na SQL Server zvolte IP adresu, která je přístupná z Azure. | Z příkazového řádku hostitelského operačního systému, na kterém běží SQL Server, spusťte příkaz ipconfig. |
1 Konfigurace Azure SQL Managed Instance jako vašeho počátečního primárního je podporováno od SQL Server 2022 CU10.
Nastavení obnovení a zálohování databáze
Pokud je SQL Server váš počáteční primární, 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 Azure SQL Managed Instance provádí zálohování automaticky, tento krok přeskočte, pokud je SQL Managed Instance vaším počátečním primárním serverem.
Když vytvoříte propojení, provede se počáteční inicializace mezi primárními a sekundárními replikami tak, že se na primární replice provede úplná záloha databáze, která se přenese do sekundární repliky a tam je obnovena. Při provedení úplného zálohování doporučujeme použít WITH CHECKSUM možnost, abyste zajistili, že je zálohování platné a nemá žádné poškození. Další informace najdete v tématu BACKUP (Transact-SQL).
Na SQL Server pro všechny databáze, které chcete replikovat, spusťte následující kód. 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 skupiny dostupnosti zrcadlení databáze 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 zaměňován se starší funkcí zrcadlení databáze SQL Server.
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 SQL Managed Instance. Pokud máte existující dostupnostní skupiny, které používají ověřování ve Windows, musíte do existujícího konečného bodu zrcadlení přidat důvěryhodný vztah 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 SQL Managed Instance:
- Vygenerujte certifikát na SQL Server a získejte jeho veřejný klíč.
- Získejte veřejný klíč certifikátu SQL Managed Instance.
- Vyměňte veřejné klíče mezi SQL Serverem a SQL Managed Instance.
- Import klíče certifikační autority důvěryhodného kořenového certifikátu Azure do SQL Serveru
Následující části podrobně popisují tyto kroky.
Vytvoření certifikátu na SQL Server a import jeho veřejného klíče do 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 Server:
-- Run on SQL Server
-- Create a master key encryption password
-- Keep the password confidential and in a secure place
USE MASTER
IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101)
BEGIN
PRINT 'Creating master key.' + CHAR(13) + 'Keep the password confidential and in a secure place.'
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>'
END
ELSE
PRINT 'Master key already exists.'
GO
Potom vygenerujte ověřovací certifikát na SQL Server. V následujícím skriptu nahraďte:
-
@cert_expiry_dates 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 Server 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 Server 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 Server:
-- Run on SQL Server
-- Show the name and the public key of generated SQL Server certificate
USE MASTER
GO
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername + N'_endpoint'
DECLARE @PUBLICKEYENC VARBINARY(MAX) = CERTENCODED(CERT_ID(@sqlserver_certificate_name));
SELECT @sqlserver_certificate_name as 'SQLServerCertName'
SELECT @PUBLICKEYENC AS SQLServerPublicKey;
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 Azure předplatné.
Nahraďte <SubscriptionID> vaším 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
Pak použijte příkaz New-AzSqlInstanceServerTrustCertificate PowerShellu nebo az sql mi partner-cert create Azure CLI k nahrání veřejného klíče ověřovacího certifikátu z SQL Server 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 Server 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ězcem0x. -
<SQLServerCertName>s názvem certifikátu SQL Server, 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 Server pro Azure.
Pokud potřebujete zobrazit všechny certifikáty SQL Server nahrané do spravované instance, použijte příkaz Get-AzSqlInstanceServerTrustCertificate PowerShell nebo az sql mi partner-cert list Azure CLI v Azure Cloud Shell. Pokud chcete odebrat SQL Server certifikát nahraný do spravované instance SQL, použijte příkaz Remove-AzSqlInstanceServerTrustCertificate PowerShell nebo az sql mi partner-cert delete Azure CLI v Azure Cloud Shell.
Získání veřejného klíče certifikátu z SQL Managed Instance a jeho import do SQL Server
Certifikát pro zabezpečení koncového bodu propojení se automaticky vygeneruje na Azure SQL Managed Instance. Získejte veřejný klíč certifikátu z SQL Managed Instance a importujte ho do SQL Server pomocí příkazu Get-AzSqlInstanceEndpointCertificate PowerShell nebo az sql mi endpoint-cert show Azure CLI, například následující ukázka PowerShellu.
Upozornění
Při použití Azure CLI budete muset ručně přidat 0x na začátek výstupu PublicKey, když ho použijete v dalších krocích. Veřejný klíč bude například vypadat takto: "0x3082033E30...".
Spusťte následující skript. Nahrazení:
-
<SubscriptionID>s vaší ID 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 importujte získaný veřejný klíč certifikátu zabezpečení spravované instance do SQL Server. Spuštěním následujícího dotazu na SQL Server vytvořte certifikát koncového bodu MI. 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 Shell, který začíná na0x). Nemusíte používat uvozovky.
Důležité
Název certifikátu musí být plně kvalifikovaný název domény (FQDN) SQL Managed Instance 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íče certifikační autority důvěryhodného kořenového certifikátu Azure do SQL Serveru
Import klíčů od důvěryhodné kořenové certifikační autority (CA) Azure do SQL Serveru je nezbytný, aby SQL Server mohl důvěřovat certifikátům veřejného klíče SQL Managed Instance vydaným Azure.
Potřebné klíče kořenové certifikační autority si můžete stáhnout z podrobností o certifikační autoritě Azure. Minimálně si stáhněte certifikáty DigiCert Global Root G2 a Microsoft RSA Root Certificate Authority 2017 a importujte je do instance SQL Serveru. Pokud ale chcete odkaz spustit déle než několik měsíců, stáhněte a naimportujte všechny 7 certifikátů uvedených v části Root Certificate Authorities, abyste se vyhnuli potenciálním přerušením v případě, že Azure aktualizuje seznam důvěryhodných certifikačních autorit.
Poznámka:
Kořenový certifikát v certifikační cestě pro certifikát veřejného klíče SQL Managed Instance vydává důvěryhodná kořenová certifikační autorita Azure (CA). Konkrétní kořenová certifikační autorita se může v průběhu času měnit, protože Azure aktualizuje seznam důvěryhodných certifikačních autorit. Pro zjednodušenou instalaci nainstalujte všechny kořenové certifikáty uvedené v Azure Kořenové Certifikační Autority. Stačí nainstalovat jenom požadovaný klíč certifikační autority tak, že identifikujete vystavitele dříve importovaného SQL Managed Instance veřejného klíče.
Uložte certifikáty místní do instance SQL Server, například do ukázkové cesty C:\Path\To\<name of certificate>.crt a pak importujte certifikáty z této cesty pomocí následujícího skriptu Transact-SQL. Nahraďte <name of certificate> skutečným názvem certifikátu, například DigiCert Global Root G2 nebo Microsoft RSA Root Certificate Authority 2017.
-- Run on SQL Server
-- Import <name of certificate> root-authority certificate (trusted by Azure), if not already present
IF NOT EXISTS (SELECT name FROM sys.certificates WHERE name = N'<name of certificate>')
BEGIN
PRINT 'Creating <name of certificate> certificate.'
CREATE CERTIFICATE [<name of certificate>] FROM FILE = 'C:\Path\To\<name of certificate>.crt'
--Trust certificates issued by <name of certificate> root authority for Azure database.windows.net domains
DECLARE @CERTID int
SELECT @CERTID = CERT_ID('<name of certificate>')
--For government cloud, use the corresponding SQL Database DNS suffix, e.g. '*.database.usgovcloudapi.net', '*.database.chinacloudapi.cn' etc.
EXEC sp_certificate_add_issuer @CERTID, N'*.database.windows.net'
END
ELSE
PRINT 'Certificate <name of certificate> already exists.'
GO
Poznámka:
V prostředí SQL Serveru chybí uložená procedura
Nakonec pomocí následujícího zobrazení dynamické správy ověřte všechny vytvořené certifikáty:
-- Run on SQL Server
USE master
SELECT * FROM sys.certificates
Ověření řetězu certifikátů
Naplánované nebo neúmyslné změny certifikátů můžou odkaz snížit. Abyste se vyhnuli přerušení, je důležité pravidelně validadat řetěz certifikátů na SQL Server.
Tento krok přeskočte, pokud konfigurujete nový odkaz nebo jste nedávno naimportovali certifikáty, jak je popsáno v předchozích částech.
Zabezpečení koncového bodu zrcadlení databáze
Pokud nemáte existující skupinu dostupnosti nebo koncový bod zrcadlení databáze na SQL Server, dalším krokem je vytvoření koncového bodu zrcadlení databáze na SQL Server a jeho zabezpečení pomocí dříve vygenerovaného certifikátu SQL Server. Pokud máte existující skupinu dostupnosti nebo koncový bod zrcadlení, přejděte do sekce Změnit existující koncový bod.
Vytvoření a zabezpečení koncového bodu zrcadlení databáze na SQL Server
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 Server získejte název dříve vygenerovaného certifikátu SQL Server.
-- Run on SQL Server
-- Show the name and the public key of generated SQL Server certificate
USE MASTER
GO
DECLARE @sqlserver_certificate_name NVARCHAR(MAX) = N'Cert_' + @@servername + N'_endpoint'
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 <EndpointPort> a zabezpečte koncový bod pomocí certifikátu SQL Server. 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=<EndpointPort>, 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 Server 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 jen tehdy, pokud pracujete s existujícími skupinami dostupnosti a 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. - Ověření připojení 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 Server 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í connection_auth_descnebo CERTIFICATE není encryption_algorithm_desc, je potřeba koncový bod AES změnit tak, aby splňoval požadavky.
V SQL Serveru se stejný koncový bod pro zrcadlení databáze používá pro skupiny dostupnosti i skupiny distribuované dostupnosti. Pokud je koncový bod connection_auth_descNTLM (ověřování Windows) nebo KERBEROS a potřebujete ověřování Windows pro existující skupinu dostupnosti, je možné koncový bod upravit tak, aby používal více metod ověřování, přepnutím nastavení ověřování na NEGOTIATE CERTIFICATE. Tato změna umožňuje stávající skupině dostupnosti používat Windows authentication při ověřování certifikátů pro SQL Managed Instance.
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 v SQL Server. Nahrazení:
-
<YourExistingEndpointName>se stávajícím názvem koncového bodu. -
<SQLServerCertName>s názvem vygenerovaného certifikátu SQL Server (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. K získání názvu vytvořeného certifikátu na SQL Server můžete také použít SELECT * FROM sys.certificates.
-- Run on SQL Server
-- Alter the existing database mirroring endpoint to use CERTIFICATE for authentication and AES for encryption
USE MASTER
ALTER ENDPOINT [<YourExistingEndpointName>]
STATE=STARTED
AS TCP (LISTENER_PORT=<EndpointPort>, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (
ROLE=ALL,
AUTHENTICATION = WINDOWS NEGOTIATE CERTIFICATE [<SQLServerCertName>],
ENCRYPTION = REQUIRED ALGORITHM AES
)
GO
Po spuštění dotazu koncového bodu ALTER a nastavení režimu duálního ověřování na Windows a certifikátu použijte tento dotaz znovu na SQL Server k zobrazení podrobností koncového 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 odkaz na spravovanou instanci SQL.
Vytvoření skupiny dostupnosti na SQL Server
Pokud nemáte existující skupinu dostupnosti, dalším krokem je vytvoření na SQL Server bez ohledu na to, která bude počáteční primární.
Poznámka:
Tuto část přeskočte, pokud už máte existující skupinu dostupnosti.
Příkazy pro vytvoření skupiny dostupnosti se liší, pokud je váš SQL Managed Instance počáteční primární, což se podporuje jenom od SQL Server 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šechny odkazy, ale pak vytvořte novou distribuovanou skupinu dostupnosti pro každé propojení databáze mezi SQL Server a SQL Managed Instance.
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 Server spuštěním následujícího příkazu T-SQL:
-- Run on the initial primary
SELECT @@SERVERNAME AS SQLServerName
Potom pomocí následujícího skriptu vytvořte skupinu dostupnosti na SQL Server. Nahrazení:
-
<AGNameOnSQLServer>s názvem vaší skupiny dostupnosti na SQL Server. Odkaz Managed Instance 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říkladAG_<db_name>. -
<DatabaseName>s názvem databáze, kterou chcete replikovat. -
<SQLServerName>s názvem vaší instance SQL Server 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 SQL Server, ale musíte se ujistit, že je název přeložitelný z SQL Managed Instance virtuální sítě.
-- Run on SQL Server
-- Create the primary availability group on SQL Server
USE MASTER
CREATE AVAILABILITY GROUP [<AGNameOnSQLServer>]
WITH (CLUSTER_TYPE = NONE) -- <- Delete this line for SQL Server 2016 only. Leave as-is for all higher versions.
FOR database [<DatabaseName>]
REPLICA ON
N'<SQLServerName>' WITH
(
ENDPOINT_URL = 'TCP://<SQLServerIP>:<EndpointPort>',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
);
GO
Důležité
Pro SQL Server 2016 odstraňte WITH (CLUSTER_TYPE = NONE) z výše uvedeného příkazu T-SQL. Ponechte as-is pro všechny novější verze SQL Server.
Dále vytvořte distribuovanou skupinu dostupnosti na SQL Server. 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říkladDAG1_<db_name>.DAG2_<db_name> -
<AGNameOnSQLServer>s názvem skupiny dostupnosti, kterou jste vytvořili v předchozím kroku. -
<AGNameOnSQLMI>s názvem vaší skupiny dostupnosti na SQL Managed Instance. Název musí být v SQL MI jedinečný. Zvažte pojmenování každé skupiny dostupnosti tak, aby její název odrážel odpovídající databázi , napříkladAG_<db_name>_MI. -
<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 SQL Server, ale ujistěte se, že je tento název přeložitelný z virtuální sítě SQL Managed Instance (což vyžaduje konfiguraci vlastních Azure DNS 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'<AGNameOnSQLServer>' WITH
(
LISTENER_URL = 'TCP://<SQLServerIP>:<EndpointPort>',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC,
SESSION_TIMEOUT = 20
),
N'<AGNameOnSQLMI>' WITH
(
LISTENER_URL = 'tcp://<ManagedInstanceFQDN>:5022;Server=[<ManagedInstanceName>]',
AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
FAILOVER_MODE = MANUAL,
SEEDING_MODE = AUTOMATIC
);
GO
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 Server. V tuto chvíli musí být stav vaší skupiny dostupnosti connected a stav vašich distribuovaných skupin dostupnosti disconnected. Stav distribuované skupiny dostupnosti se přesune na connected pouze po připojení k 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 Object Explorer k vyhledání skupin dostupnosti a distribuovaných skupin dostupnosti. Rozbalte složku Always On High Availability a potom složku Availability Groups.
Vytvoření odkazu
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 PowerShellu nebo az sql mi link create Azure CLI vytvořte odkaz, například příklad PowerShellu v této části. Vytvoření odkazu z primárního SQL Managed Instance se v současné době v Azure CLI nepodporuje.
Pokud potřebujete zobrazit všechny odkazy na spravované instanci, použijte příkaz Get-AzSqlInstanceLink PowerShell nebo az sql mi link show Azure CLI v Azure Cloud Shell.
Pokud chcete tento proces zjednodušit, přihlaste se k portálu Azure a z Azure Cloud Shell spusťte následující skript. Nahrazení:
-
<ManagedInstanceName>s krátkým názvem vaší spravované instance. -
<AGNameOnSQLServer>s názvem skupiny dostupnosti vytvořené na SQL Server. -
<AGNameOnSQLMI>s názvem skupiny dostupnosti vytvořené na SQL Managed Instance. -
<DAGName>s názvem distribuované skupiny dostupnosti vytvořené na SQL Server. -
<DatabaseName>s databází replikovanou ve skupině dostupnosti na SQL Server. -
<SQLServerIP>s IP adresou SQL Serveru. Zadaná IP adresa musí být přístupná spravované instanci.
Poznámka:
Pokud chcete vytvořit propojení se skupinou dostupnosti, která již existuje, zadejte IP adresu naslouchacího procesu při zadávání parametru <SQLServerIP> . Zajistěte, aby byl důvěryhodný vztah vytvořen mezi všemi uzly skupiny dostupnosti a SQL Managed Instance (viz část Navázání důvěry mezi instancemi).
# Run in Azure Cloud Shell (select PowerShell console)
# =============================================================================
# POWERSHELL SCRIPT TO CREATE MANAGED INSTANCE LINK
# Instructs Managed Instance to join distributed availability group on SQL Server
# ===== Enter user variables here ====
# Enter your managed instance name – for example, "sqlmi1"
$ManagedInstanceName = "<ManagedInstanceName>"
# Enter the availability group name that was created on SQL Server
$AGNameOnSQLServer = "<AGNameOnSQLServer>"
# Enter the availability group name that was created on SQL Managed Instance
$AGNameOnSQLMI = "<AGNameOnSQLMI>"
# Enter the distributed availability group name that was created on SQL Server
$DAGName = "<DAGName>"
# Enter the database name that was placed in the availability group for replication
$DatabaseName = "<DatabaseName>"
# Enter the SQL Server IP
$SQLServerIP = "<SQLServerIP>"
# ==== Do not customize the following cmdlet ====
# Find out the resource group name
$ResourceGroup = (Get-AzSqlInstance -InstanceName $ManagedInstanceName).ResourceGroupName
# Build properly formatted connection endpoint
$SourceIP = "TCP://" + $SQLServerIP + ":<EndpointPort>"
# Create link on managed instance. Join distributed availability group on SQL Server.
New-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $ManagedInstanceName -Name $DAGName |
-PartnerAvailabilityGroupName $AGNameOnSQLServer -InstanceAvailabilityGroupName $AGNameOnSQLMI |
-Database @($DatabaseName) -PartnerEndpoint $SourceIP -InstanceLinkRole Secondary
Výsledkem této operace je časové razítko úspěšného provedení žádosti o vytvoření odkazu.
Ověření odkazu
Pokud chcete ověřit připojení mezi SQL Managed Instance a SQL Server, spusťte na SQL Server následující dotaz. Připojení nebude okamžité. Může trvat až minutu, než DMV začne zobrazovat úspěšné připojení. Obnovujte zobrazení DMV, dokud se připojení neobjeví jako PŘIPOJENÉ pro repliku instance SQL Managed Instance.
-- 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 Object Explorer v aplikaci SSMS zpočátku zobrazovat replikovanou databázi na sekundární replice ve stavu Restoring, protože počáteční fáze nasazení přesouvá a obnovuje ú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 seedingu databáze už nebude v režimu obnovování. Zasévání malých databází může být tak rychlé, že v nástroji SSMS nezahlédnete počáteční stav obnovení.
Důležité
- Propojení nebude fungovat, pokud mezi SQL Server a SQL Managed Instance 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 Server. Pokud využité místo protokolu dosáhne 100 procent, replikace do SQL Managed Instance se zastaví, dokud není místo uvolněno. Důrazně doporučujeme automatizovat zálohování protokolů nastavením každodenní úlohy. Podrobnosti najdete v tématu Back up log files on SQL Server.
Vytvoření zálohy prvního transakčního protokolu
Pokud je SQL Server vaším počátečním primárním serverem, je důležité provést první zálohu transakčního protokolu na SQL Server po dokončení počátečního zasetí, když databáze už není ve stavu Restoring... na "Azure SQL Managed Instance". Pak pravidelně provádějte zálohy transakčních protokolů SQL Server, tak, aby se minimalizoval nadměrný růst protokolů, zatímco SQL Server je v primární roli.
Pokud je SQL Managed Instance primární, nemusíte provádět žádnou akci, protože Azure SQL Managed Instance automaticky provádí zálohování protokolů.
Sdílejte odkaz
Pokud chcete odkaz vypustit, protože už není potřeba, nebo protože je v neopravitelném stavu a je potřeba ho znovu vytvořit, můžete to udělat pomocí PowerShellu a T-SQL.
Nejprve použijte příkaz Remove-AzSqlInstanceLink PowerShell k odstranění odkazu, například v následujícím příkladu:
Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $managedInstanceName -Name $DAGName -Force
Potom spuštěním následujícího skriptu T-SQL na SQL Server zahoďte distribuovanou skupinu dostupnosti. Nahraďte <DAGName> názvem distribuované skupiny dostupnosti použitou k vytvoření odkazu:
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName>
GO
Volitelně můžete skupinu dostupnosti odebrat, pokud už ji nepoužíváte. Uděláte to tak, že nahradíte <AGName> názvem skupiny dostupnosti a pak ji spustíte v příslušné instanci:
DROP AVAILABILITY GROUP <AGName>
GO
Odstraňování potíží
Pokud při vytváření odkazu narazíte na chybovou zprávu, přečtěte si chybovou zprávu v okně výstupu dotazu, kde najdete další informace. Pro více informací si prostudujte řešení potíží s odkazem.
Související obsah
Použití odkazu:
- Připravené prostředí pro odkaz Managed Instance
- Konfigurujte propojení mezi SQL Server a spravovanou instancí SQL pomocí SSMS
- Přepnutí spojení při selhání
- Migrace pomocí odkazu
- Osvědčené postupy pro údržbu odkazu
- Řešení potíží s odkazem
Další informace o odkazu:
- Přehled propojení Managed Instance
- Obnova po havárii s odkazem na instanci Managed Instance
V případě jiných scénářů replikace a migrace zvažte následující: