Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к:Управляемый экземпляр SQL Azure
В этой статье описано, как настроить link между SQL Server и Управляемый экземпляр SQL Azure с помощью скриптов Transact-SQL и PowerShell или Azure CLI. С помощью ссылки базы данных из исходного первичного источника реплицируются в вторичную реплику практически в режиме реального времени.
После создания ссылки можно переключиться на вашу вторичную реплику для миграции или аварийного восстановления.
Примечание.
- Также можно настроить ссылку с помощью SQL Server Management Studio (SSMS).
- Настройка Управляемый экземпляр SQL Azure в качестве исходного основного компонента поддерживается начиная с SQL Server 2022 CU10.
Обзор
Используйте функцию ссылки, чтобы реплицировать базы данных из исходного источника в вторичную реплику. Для SQL Server 2022 начальный первичный объект может быть либо SQL Server, либо Управляемый экземпляр SQL Azure. Для SQL Server 2019 и более ранних версий начальным основным сервером должен быть SQL Server. После настройки ссылки база данных из исходного первичного источника реплицируется в вторичную реплику.
Вы можете оставить ссылку для непрерывной репликации данных в гибридной среде между первичной и вторичной репликой или выполнить отработку отказа базы данных на вторичную реплику, выполнить миграцию в Azure или аварийное восстановление. Для SQL Server 2019 и более ранних версий переключение на экземпляр Управляемый экземпляр SQL Azure разрывает связь, и возврат не поддерживается. При использовании SQL Server 2022 вы можете сохранить ссылку и выполнить отработку отказа между двумя репликами.
Если вы планируете использовать вторичный управляемый экземпляр только для аварийного восстановления, вы можете сэкономить на затратах на лицензирование, активировав гибридную функцию аварийного переключения.
Используйте инструкции, описанные в этой статье, чтобы вручную настроить связь между SQL Server и Управляемый экземпляр SQL Azure. После создания ссылки база данных-источник получает копию только для чтения на вторичной целевой реплике.
Совет
Чтобы упростить использование скриптов T-SQL с правильными параметрами для вашей среды, настоятельно рекомендуется использовать мастер ссылок Управляемый экземпляр в SQL Server Management Studio (SSMS) для создания скрипта для создания ссылки. На странице Summary ссылки New Управляемый экземпляр выберите Script вместо Finish.
Предварительные требования
Чтобы реплицировать базы данных, вам потребуется следующее:
- Активная подписка Azure. Если ее нет, создайте бесплатную учетную запись.
- Поддерживаемая версия SQL Server с установленным необходимым обновлением сервиса.
- Управляемый экземпляр SQL Azure. Начните, если у вас этого нет.
- Модуль PowerShell Az.SQL 6.0.0 или более поздней версии или Azure CLI 2.67.0 или выше. Или предпочтительнее использовать Azure Cloud Shell в интернете из веб-браузера для выполнения команд, так как он всегда обновляется с последними версиями модулей.
- Правильно подготовленная среда.
Рассмотрим следующий пример.
- Функция связи поддерживает одну базу данных для каждого канала. Чтобы реплицировать несколько баз данных в экземпляре, создайте ссылку для каждой отдельной базы данных. Например, чтобы реплицировать 10 баз данных в Управляемый экземпляр SQL, создайте 10 отдельных ссылок.
- Параметры сортировки между SQL Server и Управляемый экземпляр SQL должны совпадать. Несоответствие в сортировке может привести к несоответствию в регистре имен сервера и предотвратить успешное подключение SQL Server к Управляемый экземпляр SQL.
- Ошибка 1475 в вашей исходной основной базе данных SQL Server указывает, что необходимо начать новую цепочку резервных копий созданием полной резервной копии без параметра
COPY ONLY. - Чтобы установить ссылку или выполнить отработку отказа, from Управляемый экземпляр SQL на SQL Server 2025, SQL managed instance необходимо настроить с помощью политики обновления SQL Server 2025 обновления. Репликация данных и отработка отказа с Управляемый экземпляр SQL на SQL Server 2025 не поддерживается экземплярами, настроенными с несоответствующей политикой обновления.
- Чтобы установить ссылку или выполнить переключение на резервный сервис с Управляемый экземпляр SQL на SQL Server 2022, необходимо настроить Управляемый экземпляр SQL в соответствии с политикой обновления SQL Server 2022. Репликация данных и отработка отказа из Управляемый экземпляр SQL на SQL Server 2022 не поддерживается экземплярами, настроенными с несоответствующей политикой обновления.
- Хотя вы можете установить ссылку из поддерживаемой версии SQL Server на управляемый экземпляр SQL, настроенный с Always-up-to-date политикой обновления, после аварийного переключения на этот управляемый экземпляр SQL вы больше не сможете реплицировать данные или вернуться к своему экземпляру SQL Server.
Разрешения
Для SQL Server необходимо иметь разрешения sysadmin.
Для Управляемый экземпляр SQL Azure вы должны быть членом группы Управляемый экземпляр SQL Contributor или иметь следующие разрешения пользовательской роли:
| Майкрософт.Sql/resource | Необходимые разрешения |
|---|---|
| Майкрософт. Sql/managedInstances | /чтение, /запись |
| Майкрософт.Sql/managedInstances/hybridCertificate | /действие |
| Майкрософт. Sql/managedInstances/databases | /просмотр, /удалить, /записать, /полноеВосстановление/действие, /просмотрРезервныхКопий/действие, /подробностиВосстановления/просмотр |
| Майкрософт.Sql/managedInstances/distributedAvailabilityGroups | /читать, /писать, /удалить, /установитьРоль/действие |
| Майкрософт.Sql/managedInstances/endpointCertificates | /читать |
| Майкрософт.Sql/managedInstances/hybridLink | /рид (read), /райт (write), /делит (delete) |
| Майкрософт. Sql/managedInstances/serverTrustCertificates | /записать, /удалить, /прочитать |
Терминология и соглашения об именовании
При запуске скриптов из этого руководства пользователя важно не путать имена SQL Server и Управляемый экземпляр SQL с их полностью квалифицированными доменными именами (FQDN). В следующей таблице объясняется, что именно представляют разные имена и как получить их значения.
| Терминология | Описание | Как узнать |
|---|---|---|
| Начальная первичная 1 | SQL Server или Управляемый экземпляр SQL, где изначально создается ссылка для репликации базы данных в вторичную реплику. | |
| Первичная реплика | SQL Server или Управляемый экземпляр SQL, на котором в настоящее время размещается база данных-источник. | |
| Вторичная реплика | SQL Server или Управляемый экземпляр SQL, получающий реплицированные данные практически в реальном времени из текущей первичной реплики. | |
| имя SQL Server | Короткое односоставное имя для SQL Server. Например: sqlserver1. | Выполните SELECT @@SERVERNAME в T-SQL. |
| полное доменное имя SQL Server | Полное доменное имя (FQDN) SQL Server. Например: sqlserver1.domain.com. | Просмотрите локальную конфигурацию сети (DNS) или имя сервера, если вы используете виртуальную машину Azure. |
| имя Управляемый экземпляр SQL | Короткое однословное имя Управляемый экземпляр SQL. Например: managedinstance1. | Посмотрите название управляемого экземпляра на портале Azure. |
| FQDN Управляемый экземпляр SQL | Полное доменное имя (FQDN) для Управляемый экземпляр SQL. Например: managedinstance1.6d710bcf372b.database.windows.net. | Просмотрите имя узла на странице обзора Управляемый экземпляр SQL на портале Azure. |
| Разрешаемое доменное имя | DNS-имя, которое может быть разрешено в IP-адрес. Например, выполнение nslookup sqlserver1.domain.com должно возвращать IP-адрес, например 10.0.0.1. |
Выполните nslookup команду из командной строки. |
| IP-адрес для SQL Server | IP-адрес вашего SQL Server. В случае нескольких IP-адресов на SQL Server выберите IP-адрес, доступный из Azure. | Выполните команду ipconfig из командной строки серверной ОС, на которой работает SQL Server. |
1 Настройка Управляемый экземпляр SQL Azure в качестве исходного основного компонента поддерживается начиная с SQL Server 2022 CU10.
Настройка восстановления и резервного копирования базы данных
Если SQL Server является исходным источником, базы данных, которые будут реплицироваться по ссылке, должны находиться в полной модели восстановления и иметь по крайней мере одну резервную копию. Так как Управляемый экземпляр SQL Azure автоматически выполняет резервное копирование, пропустите этот шаг, если Управляемый экземпляр SQL является основным.
При создании ссылки начальное заполнение между первичной и вторичной репликами происходит путем создания полной резервной копии базы данных на первичной реплике, передачи ее в вторичную реплику и восстановления там. При выполнении полной резервной копии рекомендуется использовать параметр WITH CHECKSUM, чтобы убедиться, что резервная копия действительна и не повреждена. Дополнительные сведения см. в разделе BACKUP (Transact-SQL).
Выполните следующий код в SQL Server для всех баз данных, которые вы хотите реплицировать. Замените <DatabaseName> фактическим именем базы данных.
-- 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
Для получения дополнительной информации см. Создание полной резервной копии базы данных.
Примечание.
Связь поддерживает репликацию только пользовательских баз данных. Репликация системных баз данных не поддерживается. Чтобы реплицировать объекты уровня экземпляра (хранящиеся в master или msdb базах данных), рекомендуется сначала выполнить их сценарии, а затем запустить сценарии T-SQL на целевом экземпляре.
Создание отношений доверия между экземплярами
Сначала необходимо установить доверие между двумя экземплярами и защитить конечные точки, используемые для обмена данными и шифрования данных в сети. Распределенные группы доступности используют существующую точку зеркального отображения базы данных в группе доступности, а не собственную выделенную конечную точку. Таким образом, необходимо настроить безопасность и доверие между двумя экземплярами через конечную точку зеркального отображения базы данных группы доступности.
Примечание.
Ссылка основана на технологии группы доступности AlwaysOn. Конечная точка зеркального отображения базы данных — это конечная точка специального назначения, которая используется исключительно группами доступности для получения подключений от других экземпляров. Термин "конечная точка зеркального отображения базы данных" не следует путать с устаревшей функцией зеркального отображения баз данных в SQL Server.
Доверие на основе сертификатов — единственный поддерживаемый способ защиты конечных точек зеркального отображения базы данных для SQL Server и Управляемый экземпляр SQL. Если у вас есть существующие группы доступности, использующие аутентификацию Windows, необходимо добавить сертификатное доверие к существующей конечной точке зеркального отображения в качестве дополнительного метода аутентификации. Это можно сделать с помощью инструкции ALTER ENDPOINT , как показано далее в этой статье.
Внимание
Сертификаты генерируются с датой и временем истечения срока действия. Они должны быть обновлены и заменены до истечения срока их действия.
Ниже приведен обзор процесса защиты конечных точек зеркального отображения базы данных для SQL Server и Управляемый экземпляр SQL:
- Создайте сертификат на SQL Server и получите его открытый ключ.
- Получите открытый ключ сертификата Управляемый экземпляр SQL.
- Поменяйте открытые ключи между SQL Server и Управляемый экземпляр SQL.
- Импорт ключей корневого центра сертификации, доверенного Azure, в SQL Server
В следующих разделах подробно описаны эти действия.
Создайте сертификат на SQL Server и импортируйте его открытый ключ в Управляемый экземпляр SQL
Сначала создайте главный ключ базы данных в master базе данных, если он еще не присутствует. Вставьте ваш пароль вместо <strong_password> в следующем скрипте и сохраните его в конфиденциальном и безопасном месте. Запустите этот скрипт T-SQL в 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
Затем создайте сертификат проверки подлинности на SQL Server. В следующем скрипте замените следующее:
-
@cert_expiry_dateс требуемой будущей датой окончания срока действия сертификата.
Запишите эту дату и задайте напоминание о смене (обновлении) сертификата SQL Server до даты окончания срока действия, чтобы обеспечить непрерывную работу ссылки.
Внимание
Настоятельно рекомендуется использовать автоматическое имя сертификата из этого скрипта. При настройке собственного имени сертификата на SQL Server это разрешается, однако имя не должно содержать символов \.
-- 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
Затем используйте следующий запрос T-SQL в SQL Server, чтобы проверить, был создан сертификат:
-- Run on SQL Server
USE MASTER
GO
SELECT * FROM sys.certificates WHERE pvt_key_encryption_type = 'MK'
В результатах запроса вы найдете сертификат и увидите, что он зашифрован с помощью главного ключа.
Теперь вы можете получить открытый ключ созданного сертификата на 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;
Сохраните значения SQLServerCertName и SQLServerPublicKey из выходных данных, потому что они понадобятся вам на следующем этапе при импорте сертификата.
Сначала убедитесь, что вы вошли в Azure и выбрали подписку, где размещен ваш управляемый экземпляр. Выбор правильной подписки особенно важен, если у вас есть несколько подписок Azure в вашей учетной записи.
Замените <SubscriptionID> идентификатором подписки 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
Затем используйте команду New-AzSqlInstanceServerTrustCertificate PowerShell или az sql mi partner-cert create Azure CLI для отправки открытого ключа сертификата проверки подлинности из SQL Server в Azure, например в следующий пример PowerShell.
Заполните необходимые сведения о пользователе, скопируйте его, вставьте его, а затем запустите скрипт. Замена:
-
<SQLServerPublicKey>с общедоступной частью сертификата SQL Server в двоичном формате, которую вы записали на предыдущем шаге. Это длинное строковое значение, начинающееся с0x. -
<SQLServerCertName>с именем сертификата SQL Server, записанным на предыдущем шаге. -
<ManagedInstanceName>с коротким именем управляемого экземпляра.
# 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
Результатом этой операции является сводка отправленного сертификата SQL Server в Azure.
Если вам нужно просмотреть все сертификаты SQL Server, загруженные на управляемый экземпляр, используйте команду Get-AzSqlInstanceServerTrustCertificate PowerShell или az sql mi partner-cert list Azure CLI в Azure Cloud Shell. Чтобы удалить загруженный в управляемый экземпляр SQL сертификат SQL Server, используйте команду PowerShell Remove-AzSqlInstanceServerTrustCertificate или команду Azure CLI az sql mi partner-cert delete в Azure Cloud Shell.
Получите открытый ключ сертификата из Управляемый экземпляр SQL и импортируйте его в SQL Server
Сертификат для защиты конечной точки ссылки автоматически создается на Управляемый экземпляр SQL Azure. Получите открытый ключ сертификата из Управляемый экземпляр SQL и импортируйте его в SQL Server с помощью команды Get-AzSqlInstanceEndpointCertificate PowerShell или az sql mi endpoint-cert show Azure CLI, например в следующем примере PowerShell.
Внимание
При использовании Azure CLI необходимо вручную добавить 0x перед выходными данными PublicKey при его использовании в последующих шагах. Например, PublicKey будет выглядеть как "0x3082033E30...".
Запустите указанный ниже скрипт. Замена:
-
<SubscriptionID>с идентификатором вашей подписки Azure. -
<ManagedInstanceName>с коротким именем управляемого экземпляра.
# 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
Скопируйте все выходные данные PublicKey (начинаются с 0x), так как они потребуются на следующем этапе.
Кроме того, при возникновении проблем при копировании общедоступного ключа можно также запустить команду EXEC sp_get_endpoint_certificate 4 T-SQL в управляемом экземпляре, чтобы получить его открытый ключ для конечной точки ссылки.
Затем импортируйте полученный открытый ключ сертификата безопасности управляемого экземпляра в SQL Server. Выполните следующий запрос на SQL Server, чтобы создать сертификат конечной точки MI. Замена:
-
<ManagedInstanceFQDN>с полным доменным именем управляемого экземпляра. -
<PublicKey>со значением PublicKey, полученным на предыдущем шаге (из Azure Cloud Shell, начиная с0x). Вам не нужно использовать кавычки.
Внимание
Имя сертификата должно быть полным доменным именем (FQDN) Управляемый экземпляр SQL и не должно изменяться. Ссылка не будет работать, если используется нестандартное имя.
-- Run on SQL Server
USE MASTER
CREATE CERTIFICATE [<ManagedInstanceFQDN>]
FROM BINARY = <PublicKey>
Импорт ключей доверенного корневого центра сертификации Azure в SQL Server
Импорт ключей доверенного корневого удостоверяющего центра (УЦ) Azure в SQL Server необходим для того, чтобы SQL Server доверял сертификатам открытого ключа Управляемый экземпляр SQL, выданным Azure.
Вы можете скачать необходимые ключи корневого ЦС из Azure сведения об центре сертификации. По крайней мере скачайте DigiCert Global Root G2 и Майкрософт корневой центр сертификации RSA 2017 и импортируйте их в экземпляр SQL Server. Однако если вы планируете запустить ссылку дольше нескольких месяцев, скачайте и импортируйте все 7 сертификатов, перечисленных в разделе Root Certificate Authorities, чтобы избежать потенциальных сбоев в случае, если Azure обновляет список доверенных ЦС.
Примечание.
Корневой сертификат в цепочке сертификации для сертификата открытого ключа Управляемый экземпляр SQL выдан доверенным корневым центром сертификации (ЦС) Azure. Определенный корневой ЦС может измениться с течением времени, так как Azure обновляет список доверенных ЦС. Для упрощенной настройки установите все сертификаты корневого ЦС, перечисленные в Корневые центры сертификации Azure. Вы можете установить только необходимый ключ ЦС, установив издателя открытого ключа Управляемый экземпляр SQL, импортированного ранее.
Сохраните сертификаты локально в экземпляре SQL Server, например в примере пути C:\Path\To\<name of certificate>.crt, а затем импортируйте сертификаты из этого пути с помощью следующего скрипта Transact-SQL. Замените <name of certificate> фактическим именем сертификата, например DigiCert Global Root G2 или Майкрософт 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
Примечание.
Хранимая процедура sp_certificate_add_issuer отсутствует в среде SQL Server, указывая, что экземпляр SQL Server не имеет установленного подходящего обновления службы.
Наконец, проверьте все созданные сертификаты с помощью следующего динамического административного представления (DMV):
-- Run on SQL Server
USE master
SELECT * FROM sys.certificates
Проверка цепочки сертификатов
Запланированные или непреднамеренные изменения сертификатов могут снизить состояние ссылки. Чтобы избежать сбоев, важно периодически проверять цепочку сертификатов на SQL Server.
Пропустите этот шаг, если вы настраиваете новую ссылку или недавно импортировали сертификаты, как описано в предыдущих разделах.
Защита конечной точки зеркального отображения базы данных
Если у вас нет существующей группы доступности или конечной точки зеркального отображения базы данных на SQL Server, необходимо создать конечную точку зеркального отображения базы данных на SQL Server и защитить ее с помощью ранее созданного сертификата SQL Server. Если у вас есть существующая группа доступности или конечная точка зеркального отображения, перейдите к разделу Изменение существующей конечной точки.
Создание и защита конечной точки зеркального отображения базы данных в SQL Server
Чтобы убедиться, что конечная точка зеркального отображения базы данных не создана, используйте следующий скрипт.
-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT * FROM sys.database_mirroring_endpoints WHERE type_desc = 'DATABASE_MIRRORING'
Если предыдущий запрос не отображает существующую конечную точку зеркального отображения базы данных, выполните следующий сценарий в SQL Server, чтобы получить имя предыдущего созданного сертификата 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'
Сохраните SQLServerCertName из выходных данных, так как вам потребуется на следующем шаге.
Используйте следующий сценарий, чтобы создать новую конечную точку зеркального отображения базы данных в порте <EndpointPort> и защитить конечную точку с помощью сертификата SQL Server. Замена:
-
<SQL_SERVER_CERTIFICATE>с именем SQLServerCertName, полученным на предыдущем шаге.
-- 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
Убедитесь, что конечная точка зеркального отображения была создана, выполнив следующий скрипт в SQL Server:
-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
name, type_desc, state_desc, role_desc,
connection_auth_desc, is_encryption_enabled, encryption_algorithm_desc
FROM
sys.database_mirroring_endpoints
Успешно созданная конечная точка state_desc столбца должна иметь состояние STARTED.
Новая конечная точка зеркального отображения была создана с проверкой подлинности на основе сертификата и с включенным шифрованием AES.
Изменение существующей конечной точки
Примечание.
Если вы только что создали новую конечную точку зеркального отображения, пропустите этот шаг. Выполните этот шаг, только если вы используете существующие группы доступности с существующей конечной точкой зеркального отображения базы данных.
Если вы используете существующие группы доступности для функции связи или существующая конечная точка зеркального отображения базы данных существует, сначала убедитесь, что она удовлетворяет следующим обязательным условиям для функции связи.
- Тип —
DATABASE_MIRRORING - Проверка подлинности подключения —
CERTIFICATE. - Должно быть включено шифрование.
- Алгоритм шифрования —
AES.
Выполните следующий запрос на SQL Server, чтобы просмотреть сведения о существующей конечной точке зеркального отображения базы данных:
-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
name, type_desc, state_desc, role_desc, connection_auth_desc,
is_encryption_enabled, encryption_algorithm_desc
FROM
sys.database_mirroring_endpoints
Если выходные данные показывают, что существующая конечная точка DATABASE_MIRRORINGconnection_auth_desc не является CERTIFICATE или encryption_algorithm_desc не является AES, конечная точка должна быть изменена для соответствия требованиям.
В SQL Server для групп доступности и распределенных групп доступности используется одна и та же конечная точка зеркального отображения базы данных. Если ваша конечная точка connection_auth_descNTLM (аутентификация Windows) или KERBEROS, и вам нужна аутентификация Windows для наличествующей группы доступности, можно изменить конечную точку для использования нескольких методов аутентификации, изменив параметр настройки на NEGOTIATE CERTIFICATE. Это изменение позволяет существующей группе доступности использовать Windows-аутентификацию, одновременно применяя аутентификацию по сертификату для управляемого экземпляра SQL.
Аналогично: если шифрование не включает AES и требуется шифрование RC4, можно изменить конечную точку для использования обоих алгоритмов. Дополнительные сведения о возможных вариантах изменения конечных точек см. на странице документации по sys.database_mirroring_endpoints.
Следующий скрипт — это пример изменения существующей конечной точки зеркального отображения базы данных на SQL Server. Замена:
-
<YourExistingEndpointName>именем существующей конечной точки. -
<SQLServerCertName>с именем созданного сертификата SQL Server (полученного в одном из предыдущих шагов выше).
В зависимости от конкретной конфигурации вам может потребоваться дополнительно настроить скрипт. Вы также можете использовать SELECT * FROM sys.certificates для получения имени созданного сертификата на SQL Server.
-- Run on SQL Server
-- Alter the existing database mirroring endpoint to use CERTIFICATE for authentication and AES for encryption
USE MASTER
ALTER ENDPOINT [<YourExistingEndpointName>]
STATE=STARTED
AS TCP (LISTENER_PORT=<EndpointPort>, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (
ROLE=ALL,
AUTHENTICATION = WINDOWS NEGOTIATE CERTIFICATE [<SQLServerCertName>],
ENCRYPTION = REQUIRED ALGORITHM AES
)
GO
После запуска запроса конечной точки ALTER и задания режима двойной проверки подлинности Windows и сертификата используйте этот запрос еще раз на SQL Server, чтобы отобразить сведения о конечной точке зеркального отображения базы данных:
-- Run on SQL Server
-- View database mirroring endpoints on SQL Server
SELECT
name, type_desc, state_desc, role_desc, connection_auth_desc,
is_encryption_enabled, encryption_algorithm_desc
FROM
sys.database_mirroring_endpoints
Вы успешно изменили конечную точку зеркального отображения базы данных для ссылки Управляемый экземпляр SQL.
Создание группы доступности в SQL Server
Если у вас нет существующей группы доступности, следующий шаг — создать ее на SQL Server, независимо от того, какая из них будет первичной.
Примечание.
Пропустите этот раздел, если у вас уже есть существующую группу доступности.
Команды для создания группы доступности отличаются, если Управляемый экземпляр SQL является начальной основной, которая поддерживается только с SQL Server 2022 CU10.
Хотя можно установить несколько ссылок для одной базы данных, ссылка поддерживает репликацию только одной базы данных на одну ссылку. Если вы хотите создать несколько ссылок для одной базы данных, используйте одну и ту же группу доступности для всех ссылок, но создайте новую распределенную группу доступности для каждой связи между SQL Server и Управляемый экземпляр SQL.
Если SQL Server является основной, создайте группу доступности со следующими параметрами для ссылки:
- Начальное имя сервера-источника
- Имя базы данных
- Режим отработки отказа
MANUAL - Режим сеяния
AUTOMATIC
Сначала выясните имя SQL Server, выполнив следующую инструкцию T-SQL:
-- Run on the initial primary
SELECT @@SERVERNAME AS SQLServerName
Затем используйте следующий сценарий, чтобы создать группу доступности на SQL Server. Замена:
-
<AGNameOnSQLServer>с именем вашей группы доступности на SQL Server. Для ссылки Управляемый экземпляр требуется одна база данных для каждой группы доступности. Для нескольких баз данных потребуется создать несколько групп доступности. Рекомендуется назначить каждой группе доступности имя, которое отражает соответствующую базу данных, напримерAG_<db_name>. -
<DatabaseName>именем базы данных, которую вы хотите реплицировать; -
<SQLServerName>с именем экземпляра SQL Server, полученного на предыдущем шаге. -
<SQLServerIP>с IP-адресом SQL Server. Можно использовать разрешаемое имя хост-компьютера SQL Server в качестве альтернативы, однако необходимо убедиться, что имя может быть разрешено из виртуальной сети Управляемый экземпляр SQL.
-- 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
Внимание
Для SQL Server 2016 удалите WITH (CLUSTER_TYPE = NONE) из приведенной выше инструкции T-SQL. Оставьте as-is для всех последующих SQL Server версий.
Затем создайте распределенную группу доступности в SQL Server. Если вы планируете создать несколько ссылок, необходимо создать распределенную группу доступности для каждой ссылки, даже если вы устанавливаете несколько ссылок для одной базы данных.
Замените следующие значения, а затем запустите скрипт T-SQL для создания распределенной группы доступности.
-
<DAGName>именем вашей распределенной группы доступности. Так как можно настроить несколько ссылок для одной и той же базы данных, создав распределенную группу доступности для каждой ссылки, рассмотрите возможность именования каждой распределенной группы доступности соответствующим образом , напримерDAG1_<db_name>.DAG2_<db_name> -
<AGNameOnSQLServer>именем группы доступности, которую вы создали на предыдущем шаге. -
<AGNameOnSQLMI>с именем группы доступности на Управляемый экземпляр SQL. Имя должно быть уникальным в SQL MI. Рекомендуется назначить каждой группе доступности имя, которое отражает соответствующую базу данных, напримерAG_<db_name>_MI. -
<SQLServerIP>с IP-адресом сервера SQL из предыдущего шага. Можно использовать разрешаемое имя хост-компьютера SQL Server в качестве альтернативы, но убедитесь, что имя можно разрешить из виртуальной сети управляемого экземпляра SQL (для этого необходимо настроить пользовательские DNS Azure для подсети управляемого экземпляра). -
<ManagedInstanceName>с коротким именем управляемого экземпляра. -
<ManagedInstanceFQDN>с полным доменным именем управляемого экземпляра.
-- 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
Проверка групп доступности
Используйте следующий сценарий для перечисления всех групп доступности и распределенных групп доступности в экземпляре SQL Server. На этом этапе состояние группы доступности должно быть connected, а состояние распределенных групп доступности — disconnected. Состояние распределенной группы доступности переходит к connected только после соединения с Управляемый экземпляр SQL.
-- 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
Кроме того, можно использовать SSMS обозреватель объектов для поиска групп доступности и распределенных групп доступности. Разверните папку Always On High Availability, а затем папку Группы доступности.
Создание ссылки
Наконец, можно создать ссылку. Команды отличаются в зависимости от того, какой экземпляр является начальным первичным. Используйте команду PowerShell New-AzSqlInstanceLink или команду Azure CLI az sql mi link create для создания ссылки, как показано в примере PowerShell в этом разделе. Создание ссылки из основного узла Управляемый экземпляр SQL в настоящий момент не поддерживается средствами Azure CLI.
Если вам нужно просмотреть все ссылки на управляемый экземпляр, используйте команду Get-AzSqlInstanceLink PowerShell или az sql mi link show Azure CLI в Azure Cloud Shell.
Чтобы упростить процесс, войдите на портал Azure и запустите следующий сценарий из Azure Cloud Shell. Замена:
-
<ManagedInstanceName>с коротким именем управляемого экземпляра. -
<AGNameOnSQLServer>с именем группы доступности, созданной на SQL Server. -
<AGNameOnSQLMI>с именем группы доступности, созданной на Управляемый экземпляр SQL. -
<DAGName>с именем распределенной группы доступности, созданной на SQL Server. -
<DatabaseName>с базой данных, реплицированной в Availability Group на SQL Server. -
<SQLServerIP>с IP-адресом вашего SQL-сервера. Предоставленный IP-адрес должен быть доступен управляемому экземпляру.
Примечание.
Если вы хотите установить ссылку на группу доступности, которая уже существует, укажите IP-адрес прослушивателя при предоставлении <SQLServerIP> параметра. Убедитесь, что доверительные отношения установлены между всеми узлами группы доступности и Управляемый экземпляр SQL (см. раздел Установление доверительных отношений между экземплярами).
# 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
Результатом этой операции является метка времени успешного выполнения запроса на создание ссылки .
Проверьте ссылку
Чтобы проверить подключение между Управляемый экземпляр SQL и SQL Server, выполните следующий запрос на SQL Server. Подключение не будет мгновенно. Для отображения успешного соединения в системе DMV может потребоваться до минуты. Продолжайте обновлять DMV, пока подключение не будет отображаться как ПОДКЛЮЧЕННО для реплики Управляемый экземпляр 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
После установки подключения обозреватель объектов в SSMS может первоначально отобразить реплицированную базу данных на вторичном репликате в состоянии Restoring на этапе первичного заполнения и восстановления полной резервной копии базы данных. После восстановления базы данных репликация должна привести две базы данных в синхронизированное состояние. База данных больше не будет находиться в состоянии восстановления после завершения начального заполнения. Заполнение небольших баз данных может быть достаточно быстрым, чтобы первоначальное состояние Восстановление не отображалось в SSMS.
Внимание
- Связь не будет работать, если только сетевое подключение не существует между SQL Server и Управляемый экземпляр SQL. Чтобы устранить неполадки с сетевым подключением, выполните действия, описанные в разделе "Тестирование сетевого подключения".
- Регулярное резервное копирование файла журнала на SQL Server. Если используемое пространство журнала достигает 100 процентов, репликация на Управляемый экземпляр SQL останавливается до уменьшения использования пространства. Мы настоятельно рекомендуем автоматизировать резервное копирование журналов, настроив выполнение ежедневного задания. Дополнительные сведения см. в разделе Back up log files on SQL Server.
Создание первой резервной копии журнала транзакций
Если SQL Server является вашей начальной основной базой данных, важно сделать первую резервную копию журнала транзакций на SQL Server после завершения начального заполнения, когда база данных больше не находится в состоянии "Восстановление..." на Управляемый экземпляр SQL Azure. Затем регулярно выполняйте резервное копирование журналов транзакций SQL Server, чтобы свести к минимуму чрезмерный рост журналов, когда SQL Server выполняет основную функцию.
Если Управляемый экземпляр SQL является основным, вам не нужно предпринимать никаких действий, так как Управляемый экземпляр SQL Azure автоматически выполняет резервное копирование журналов.
Удаление ссылки
Если вы хотите удалить ссылку, либо потому, что она больше не нужна, либо потому, что она находится в непоправимом состоянии и должна быть воссоздана, это можно сделать с помощью PowerShell и T-SQL.
Сначала используйте команду Remove-AzSqlInstanceLink PowerShell, чтобы удалить ссылку, например следующий пример:
Remove-AzSqlInstanceLink -ResourceGroupName $ResourceGroup -InstanceName $managedInstanceName -Name $DAGName -Force
Затем выполните следующий скрипт T-SQL в SQL Server, чтобы удалить распределенную группу доступности. Замените <DAGName> именем распределенной группы доступности, используемой для создания ссылки:
USE MASTER
GO
DROP AVAILABILITY GROUP <DAGName>
GO
Наконец, при желании, можно удалить группу доступности, если она больше не нужна. Для этого замените <AGName> на имя группы доступности и запустите ее на соответствующем экземпляре.
DROP AVAILABILITY GROUP <AGName>
GO
Устранение неполадок
Если при создании ссылки возникает сообщение об ошибке, просмотрите сообщение об ошибке в окне вывода запроса, чтобы получить дополнительные сведения. Для получения дополнительной информации смотрите об устранении неполадок со ссылкой.
Связанный контент
Чтобы использовать ссылку, выполните следующие действия.
- Настройте среду для подключения к Управляемый экземпляр.
- Настройка связи между SQL Server и SQL Managed Instance с помощью SSMS
- Переключение на резервное соединение
- Миграция со ссылкой
- Рекомендации по поддержанию ссылки
- Устранение неполадок со ссылкой
Дополнительные сведения о ссылке:
- Обзор связывания с Управляемый экземпляр
- Катастрофическое восстановление с использованием связи Управляемый экземпляр
Для других сценариев репликации и миграции рассмотрите:
- Транзакционная репликация с Управляемый экземпляр SQL
- Служба воспроизведения журналов (LRS)