Подготовка среды для канала: Управляемый экземпляр SQL Azure

Область применения: Управляемый экземпляр SQL Azure

В этой статье показано, как подготовить среду для канала Управляемого экземпляра, чтобы вы могли реплицировать базы данных из SQL Server в Управляемый экземпляр SQL Azure.

Примечание

Функция связывания Управляемого экземпляра SQL Azure сейчас предоставляется в предварительной версии.

Предварительные требования

Чтобы использовать канал с Управляемым экземпляром SQL Azure, требуется следующее:

Подготовка экземпляра SQL Server

Чтобы подготовить экземпляр SQL Server, необходимо проверить следующее:

  • Вы используете минимальную поддерживаемую версию.
  • Функция "Группа доступности" включена.
  • Добавлены необходимые флаги трассировки при запуске.
  • Базы данных находятся в режиме полного восстановления с созданными резервными копиями.

Вам потребуется перезапустить SQL Server, чтобы эти изменения вступили в силу.

Установка обновлений службы

Чтобы проверить версию SQL Server, запустите следующий скрипт Transact-SQL (T-SQL) на экземпляре SQL Server:

-- Run on SQL Server
-- Shows the version and CU of the SQL Server
SELECT @@VERSION as 'SQL Server version'

Убедитесь, что у SQL Server версии установлено соответствующее обновление обслуживания, как указано ниже. При обновлении необходимо перезапустить экземпляр SQL Server.

Версия SQL Server Выпуски ОС узла Требование к сервисному обновлению
SQL Server 2022 (16.x) (предварительная версия) Evaluation Edition Windows Server Необходимо зарегистрироваться https://aka.ms/mi-link-2022-signup для участия в предварительной версии.
SQL Server 2019 (15.x) Enterprise, Standard или Developer Windows Server SQL Server 2019 CU15 (KB5008996) или более поздней версии для выпусков Enterprise и Developer и CU17 (KB5016394) или более поздних версий для выпусков Standard.
SQL Server 2016 (13.x); Enterprise, Standard или Developer Windows Server SQL Server 2016 с пакетом обновления 3 (статья базы знаний 5003279) и пакет SQL Server 2016 Azure Connect (статья базы знаний 5014242)

Создание главного ключа базы данных в базе данных master

Создайте главный ключ базы данных в базе данных master, если он еще не существует. Вставьте пароль вместо приведенного <strong_password> ниже сценария и сохраните его в конфиденциальном и безопасном месте. Запустите этот скрипт T-SQL в SQL Server:

-- Run on SQL Server
-- Create a master key
USE MASTER
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>'

Чтобы убедиться, что у вас есть главный ключ базы данных, запустите следующий скрипт T-SQL в экземпляре SQL Server:

-- Run on SQL Server
SELECT * FROM sys.symmetric_keys WHERE name LIKE '%DatabaseMasterKey%'

Включение групп доступности

Функция канала Управляемого экземпляра SQL зависит от компонента групп доступности Always On, который по умолчанию не включен. Дополнительные сведения см. в статье Включение функции групп доступности Always On.

Чтобы убедиться, что функция групп доступности Always On включена, запустите следующий скрипт T-SQL в экземпляре SQL Server:

-- Run on SQL Server
-- Is Always On enabled on this SQL Server
DECLARE @IsHadrEnabled sql_variant = (select SERVERPROPERTY('IsHadrEnabled'))
SELECT
    @IsHadrEnabled as 'Is HADR enabled',
    CASE @IsHadrEnabled
        WHEN 0 THEN 'Always On availability groups is DISABLED.'
        WHEN 1 THEN 'Always On availability groups is ENABLED.'
        ELSE 'Unknown status.'
    END
	as 'HADR status'

Приведенный выше запрос отобразится, если в SQL Server включена группа доступности Always On.

Важно!

Для SQL Server 2016 г., если необходимо включить Always On группу доступности, вам потребуется выполнить дополнительные действия, описанные в подготовке SQL Server 2016 предварительных требований. Эти дополнительные действия не требуются для всех более поздних версий SQL Server (2019-2022), поддерживаемых ссылкой.

Если функция групп доступности не включена, выполните следующие действия, чтобы включить ее или перейти к следующему разделу:

  1. Откройте диспетчер конфигурации SQL Server.

  2. Выберите элемент Службы SQL Server на панели слева.

  3. Щелкните правой кнопкой мыши службу SQL Server, а затем выберите Свойства.

    Снимок экрана: диспетчер конфигурации SQL Server с выбранными параметрами для открытия свойств службы.

  4. Перейдите на вкладку Группы доступности Always On.

  5. Установите флажок "Включить Always On группы доступности" и нажмите кнопку "ОК".

    Снимок экрана: свойства для групп доступности Always On.

    • Если вы используете SQL Server 2016 и если параметр "Включить группы доступности Always On" отключен с сообщениемThis computer is not a node in a failover cluster., выполните дополнительные действия, описанные в разделе "Подготовка SQL Server 2016". После выполнения других действий вернитесь и повторите этот шаг.
  6. Нажмите кнопку "ОК " в диалоговом окне

  7. Перезапустите службу SQL Server.

Включение флагов трассировки запуска

Чтобы оптимизировать производительность канала Управляемого экземпляр SQL, рекомендуем включить следующие флаги трассировки при запуске:

  • -T1800. Этот флаг трассировки оптимизирует производительность, когда файлы журналов для первичной и вторичной реплик в группе доступности размещены на дисках с разными размерами секторов, например 512 байт и 4 КБ. Если и первичная, и вторичная реплики имеют размер сектора диска 4 КБ, этот флаг трассировки не требуется. Дополнительные сведения см. в здесь: KB3009974.
  • -T9567. Этот флаг трассировки включает сжатие потока данных для групп доступности во время автоматического заполнения. Сжатие увеличивает загрузку ЦП, но может значительно сократить время передачи.

Чтобы включить эти флаги трассировки при запуске, сделайте следующее:

  1. Откройте диспетчер конфигурации SQL Server.

  2. Выберите элемент Службы SQL Server на панели слева.

  3. Щелкните правой кнопкой мыши службу SQL Server, а затем выберите Свойства.

    Снимок экрана: диспетчер конфигурации SQL Server.

  4. Перейдите на вкладку Параметры запуска. В поле Укажите параметр запуска введите -T1800 и выберите Добавить, чтобы добавить параметр запуска. Затем введите -T9567 и выберите команду Добавить, чтобы добавить другой флаг трассировки. Щелкните Применить, чтобы сохранить изменения.

    Снимок экрана: свойства параметра запуска.

  5. Щелкните OK, чтобы закрыть окно Свойства.

Чтобы узнать больше, просмотрите синтаксис включения флагов трассировки.

Перезапуск SQL Server и проверка конфигурации

Убедившись, что вы используете поддерживаемую версию SQL Server, включили компонент групп доступности Always On и добавили флаги трассировки при запуске, перезапустите экземпляр SQL Server, чтобы применить все эти изменения:

  1. Откройте Диспетчер конфигурации SQL Server.

  2. Выберите элемент Службы SQL Server на панели слева.

  3. Щелкните правой кнопкой мыши службу SQL Server, а затем выберите элемент Перезапуск.

    Снимок экрана: вызов команды SQL Server перезапуска.

После перезапуска выполните следующий скрипт T-SQL в SQL Server, чтобы проверить конфигурацию экземпляра SQL Server:

-- Run on SQL Server
-- Shows the version and CU of SQL Server
SELECT @@VERSION as 'SQL Server version'

-- Shows if the Always On availability groups feature is enabled 
SELECT SERVERPROPERTY ('IsHadrEnabled') as 'Is Always On enabled? (1 true, 0 false)'

-- Lists all trace flags enabled on SQL Server
DBCC TRACESTATUS

Ваша SQL Server версия должна быть одной из поддерживаемых версий с примененными обновлениями службы, должна быть включена функция групп доступности Always On, и у вас должны быть флаги -T1800 трассировки и -T9567 включены. На следующем снимке экрана показан пример ожидаемого результата для правильно настроенного экземпляра SQL Server:

Снимок экрана: ожидаемый результат в S S.

Настройка сетевого подключения

Чтобы канал работал, у вас должно быть сетевое подключение между SQL Server и Управляемым экземпляром SQL. Выбранный вариант сети зависит от того, где расположен ваш экземпляр SQL Server — в локальной среде или на виртуальной машине.

SQL Server на Виртуальных машинах Microsoft Azure

Развертывание SQL Server на виртуальных машинах Azure в той же виртуальной сети Azure, в которой размещен Управляемый экземпляр SQL, — это самый простой способ, так как между двумя экземплярами будет автоматически установлено сетевое подключение. Дополнительные сведения см. в подробном руководстве Развертывание и настройка виртуальной машины Azure для подключения к Управляемому экземпляру SQL Azure.

Если экземпляр SQL Server на виртуальных машинах Azure находится в другой виртуальной сети (не в той сети, где размещен ваш управляемый экземпляр), установите подключение между двумя виртуальными сетями Azure путем глобального пиринга между виртуальными сетями или настройте VPN-шлюзы.

Примечание

Глобальный пиринг между виртуальными сетями по умолчанию включен для управляемых экземпляров, подготовленных после ноября 2020 г. Создайте запрос в службу поддержки, чтобы включить глобальный пиринг между виртуальными сетями в более старых экземплярах.

SQL Server вне Azure

Если ваш экземпляр SQ  Server размещен вне Azure, установите VPN-подключение между SQL Server и Управляемым экземпляром SQL, воспользовавшись одной из этих возможностей:

Совет

Рекомендуем использовать ExpressRoute для оптимальной производительности сети при репликации данных. Подготовьте шлюз с достаточной пропускной способностью для своего варианта использования.

Сетевые порты между средами

Независимо от механизма подключения существуют требования, которые должны быть выполнены для сетевого трафика, который будет проходить между средами:

Правила группы безопасности сети (NSG) в подсети, в котором размещен управляемый экземпляр, должны разрешать:

  • Входящий трафик через порт 5022 и диапазон портов 11000–11999 из сетевого SQL Server

Брандмауэр на SQL Server сетевого размещения, а ОС узла должна разрешить:

  • Входящий трафик через порт 5022 из всего диапазона подсети, на котором размещен Управляемый экземпляр SQL

Схема, показывающая требования к сети для настройки связи между SQL Server и управляемым экземпляром.

Номера портов нельзя изменить или настроить. Диапазоны IP-адресов подсетей, в которые размещается управляемый экземпляр, и SQL Server не должны перекрываться.

В таблице ниже описаны действия портов для каждой среды.

Среда Предпринимаемые действия
SQL Server (в Azure) Откройте входящий и исходящий трафик через порт 5022 для сетевого брандмауэра для всего диапазона IP-адресов подсети Управляемого экземпляра SQL. При необходимости сделайте то же самое в брандмауэре ОС узла SQL Server (Windows или Linux). Создайте правило группы безопасности сети (NSG) в виртуальной сети, где размещена виртуальная машина, чтобы разрешить обмен данными через порт 5022.
SQL Server (вне Azure) Откройте входящий и исходящий трафик через порт 5022 для сетевого брандмауэра для всего диапазона IP-адресов подсети Управляемого экземпляра SQL. При необходимости сделайте то же самое в брандмауэре ОС узла SQL Server (Windows или Linux).
Управляемый экземпляр SQL Создайте правило NSG в портал Azure, чтобы разрешить входящий и исходящий трафик с IP-адреса и сетевого размещения SQL Server на порте 5022 и диапазоне портов 11000–11999.

Используйте следующий сценарий PowerShell в ОС узла Windows экземпляра SQL Server, чтобы открыть порты в брандмауэре Windows:

New-NetFirewallRule -DisplayName "Allow TCP port 5022 inbound" -Direction inbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP
New-NetFirewallRule -DisplayName "Allow TCP port 5022 outbound" -Direction outbound -Profile Any -Action Allow -LocalPort 5022 -Protocol TCP

Проверка двунаправленного сетевого подключения

Для работы канала требуется двунаправленное сетевое подключение между экземпляром SQL Server и Управляемым экземпляром SQL. Когда вы откроете порты на стороне SQL Server и настроите правила NSG на стороне Управляемого экземпляра SQL, проверьте подключение.

Проверка подключения между экземпляром SQL Server и Управляемым экземпляром SQL

Чтобы проверить, может ли экземпляр SQL Server связаться с Управляемым экземпляром SQL, используйте следующую команду tnc в PowerShell с главного компьютера SQL Server. Замените <ManagedInstanceFQDN> полным доменным именем (FQDN) управляемого экземпляра. FQDN можно скопировать на странице обзора управляемого экземпляра на портале Azure.

tnc <ManagedInstanceFQDN> -port 5022

Успешный тест показывает TcpTestSucceeded : True.

Снимок экрана: выходные данные команды для тестирования сетевого подключения в PowerShell.

Если тест не удался, проверьте следующие параметры сети:

  • Существуют правила как в сетевом брандмауэре, так и в брандмауэре ос узла SQL Server (Windows/Linux), разрешающие трафик ко всему диапазону IP-адресов подсети Управляемый экземпляр SQL.
  • Существует правило NSG, разрешающее обмен данными через порт 5022 для виртуальной сети, в которой размещен Управляемый экземпляр SQL.

Проверка подключения между Управляемым экземпляром SQL и SQL Server

Чтобы убедиться, что Управляемый экземпляр SQL может связаться с SQL Server, сначала нужно создать тестовую конечную точку. Затем с помощью Агент SQL выполняется скрипт PowerShell с командой tnc для проверки связи управляемого экземпляра с SQL Server через порт 5022.

Чтобы создать тестовую конечную точку, подключитесь к SQL Server и выполните следующий скрипт T-SQL:

-- Run on SQL Server
-- Create the certificate needed for the test endpoint
USE MASTER
CREATE CERTIFICATE TEST_CERT
WITH SUBJECT = N'Certificate for SQL Server',
EXPIRY_DATE = N'3/30/2051'
GO

-- Create the test endpoint on SQL Server
USE MASTER
CREATE ENDPOINT TEST_ENDPOINT
    STATE=STARTED   
    AS TCP (LISTENER_PORT=5022, LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        ROLE=ALL,
        AUTHENTICATION = CERTIFICATE TEST_CERT, 
        ENCRYPTION = REQUIRED ALGORITHM AES
    )

Чтобы убедиться, что конечная точка SQL Server получает подключения через порт 5022, выполните следующую команду PowerShell в операционной системе узла экземпляра SQL Server:

tnc localhost -port 5022

Успешный тест показывает TcpTestSucceeded : True. Затем вы можете продолжить создание задания Агента SQL в управляемом экземпляре, чтобы проверить тестовую конечную точку SQL Server в порте 5022 из управляемого экземпляра.

Затем создайте задание агента SQL в управляемом экземпляре, вызываемом NetHelper с помощью следующего скрипта T-SQL в управляемом экземпляре. Замените

  • <SQL_SERVER_IP_ADDRESS>с IP-адресом SQL Server, к которым можно получить доступ из управляемого экземпляра.
-- Run on managed instance
-- SQL_SERVER_IP_ADDRESS should be an IP address that could be accessed from the SQL Managed Instance host machine.
DECLARE @SQLServerIpAddress NVARCHAR(MAX) = '<SQL_SERVER_IP_ADDRESS>' -- insert your SQL Server IP address in here
DECLARE @tncCommand NVARCHAR(MAX) = 'tnc ' + @SQLServerIpAddress + ' -port 5022 -InformationLevel Quiet'
DECLARE @jobId BINARY(16)

IF EXISTS(select * from msdb.dbo.sysjobs where name = 'NetHelper') THROW 70000, 'Agent job NetHelper already exists. Please rename the job, or drop the existing job before creating it again.', 1
-- To delete NetHelper job run: EXEC msdb.dbo.sp_delete_job @job_name=N'NetHelper'

EXEC msdb.dbo.sp_add_job @job_name=N'NetHelper',
    @enabled=1,
    @description=N'Test Managed Instance to SQL Server network connectivity on port 5022.',
    @category_name=N'[Uncategorized (Local)]',
    @owner_login_name=N'cloudSA', @job_id = @jobId OUTPUT

EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'TNC network probe from MI to SQL Server',
    @step_id=1,
    @os_run_priority=0, @subsystem=N'PowerShell',
    @command = @tncCommand,
    @database_name=N'master',
    @flags=40

EXEC msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1

EXEC msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'

Совет

Если необходимо изменить IP-адрес SQL Server для пробы подключения из управляемого экземпляра, удалите задание NetHelper, запустив EXEC msdb.dbo.sp_delete_job @job_name=N'NetHelper'и повторно создав задание NetHelper с помощью приведенного выше скрипта.

Затем создайте хранимую процедуру ExecuteNetHelper , которая поможет запустить задание и получить результаты из пробы сети. Выполните следующий скрипт T-SQL в управляемом экземпляре:

-- Run on managed instance
IF EXISTS(SELECT * FROM sys.objects WHERE name = 'ExecuteNetHelper') 
	THROW 70001, 'Stored procedure ExecuteNetHelper already exists. Rename or drop the existing procedure before creating it again.', 1
GO
CREATE PROCEDURE ExecuteNetHelper AS
-- To delete the procedure run: DROP PROCEDURE ExecuteNetHelper
BEGIN
  -- Start the job.
  DECLARE @NetHelperstartTimeUtc datetime = getutcdate()
  DECLARE @stop_exec_date datetime = null
  EXEC msdb.dbo.sp_start_job @job_name = N'NetHelper'
  
  -- Wait for job to complete and then see the outcome.
  WHILE (@stop_exec_date is null)
  BEGIN
  
    -- Wait and see if the job has completed.
    WAITFOR DELAY '00:00:01'
    SELECT @stop_exec_date = sja.stop_execution_date
    FROM msdb.dbo.sysjobs sj JOIN msdb.dbo.sysjobactivity sja ON sj.job_id = sja.job_id
    WHERE sj.name = 'NetHelper'
  
    -- If job has completed, get the outcome of the network test.
    IF (@stop_exec_date is not null)
    BEGIN
      SELECT 
        sj.name JobName, sjsl.date_modified as 'Date executed', sjs.step_name as 'Step executed', sjsl.log as 'Connectivity status'
      FROM
        msdb.dbo.sysjobs sj
        LEFT OUTER JOIN msdb.dbo.sysjobsteps sjs ON sj.job_id = sjs.job_id
        LEFT OUTER JOIN msdb.dbo.sysjobstepslogs sjsl ON sjs.step_uid = sjsl.step_uid
      WHERE
        sj.name = 'NetHelper'
    END
  
    -- In case of operation timeout (90 seconds), print timeout message.
    IF (datediff(second, @NetHelperstartTimeUtc, getutcdate()) > 90)
    BEGIN
  	SELECT 'NetHelper timed out during the network check. Please investigate SQL Agent logs for more information.'
      BREAK;
    END
  END
END

Выполните следующий запрос в управляемом экземпляре, чтобы выполнить хранимую процедуру, которая выполнит задание агента NetHelper и отобразит итоговый журнал:

-- Run on managed instance
EXEC ExecuteNetHelper

Если подключение прошло успешно, журнал отобразится True. Если подключение было неудачным, журнал отобразится False.

Снимок экрана: ожидаемые выходные данные задания агента SQL NetHelper.

Если подключение было неудачным, проверьте следующие элементы:

  • Брандмауэр экземпляре узла SQL Server разрешает входящие и исходящие соединения через порт 5022.
  • Правило NSG для виртуальной сети, в которой размещен Управляемый экземпляр SQL, разрешает обмен данными через порт 5022.
  • Если ваш экземпляр SQL Server размещен на виртуальной машине Azure, существует правило NSG, разрешающее обмен данными через порт 5022 в виртуальной сети, где размещена виртуальная машина.
  • Экземпляр SQL Server работает.
  • На SQL Server существует тестовая конечная точка.

После устранения проблем повторно запустите пробу сети NetHelper еще раз, запустив его EXEC ExecuteNetHelper в управляемом экземпляре.

Наконец, после успешного сетевого теста удалите конечную точку теста и сертификат на SQL Server с помощью следующих команд T-SQL:

-- Run on SQL Server
DROP ENDPOINT TEST_ENDPOINT
GO
DROP CERTIFICATE TEST_CERT
GO

Внимание!

Выполняйте следующие инструкции, только если сетевое подключение между исходной и целевой средами успешно прошло проверку. Если это не так, устраните неполадки с сетевым подключением, прежде чем продолжить.

Перенос сертификата защищенной TDE базы данных (необязательно)

При переносе базы данных SQL Server, защищенной прозрачной шифрованием данных (TDE) в управляемый экземпляр, необходимо перенести соответствующий сертификат шифрования из локального экземпляра или виртуальной машины Azure SQL Server в управляемый экземпляр, прежде чем использовать эту ссылку. Подробные инструкции приведены в статье Перенос сертификата TDE в управляемый экземпляр.

установка SSMS

SQL Server Management Studio (SSMS) — самый простой способ использовать ссылку Управляемый экземпляр SQL. Скачайте SSMS версии 18.12.1 или более поздней и установите его на клиентский компьютер.

По завершении установки откройте SSMS и подключитесь к поддерживаемому экземпляру SQL Server. Щелкните правой кнопкой мыши пользовательскую базу данных и убедитесь, что в меню появляется параметр Azure SQL Managed Instance link (Канал Управляемого экземпляра SQL Azure).

Снимок экрана: параметр ссылки Управляемый экземпляр SQL Azure в контекстном меню.

Дальнейшие действия