Поделиться через


Ссылка для устранения неполадок — Управляемый экземпляр SQL Azure

применимо к:Управляемому экземпляру SQL Azure

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

Вы можете проверить состояние ссылки с помощью Transact-SQL (T-SQL), Azure PowerShell или Azure CLI. При возникновении проблем можно использовать коды ошибок для устранения проблемы.

Многие проблемы при создании ссылки можно устранить, проверьте сети между двумя экземплярами, а проверка среды была правильно подготовлена для ссылки.

При возникновении проблем со ссылкой можно использовать Transact-SQL (T-SQL), Azure PowerShell или Azure CLI для получения сведений о текущем состоянии ссылки.

Используйте T-SQL для кратких сведений о состоянии ссылки, а затем используйте Azure PowerShell или Azure CLI для получения полных сведений о текущем состоянии ссылки.

Используйте T-SQL для определения состояния ссылки во время начального этапа или после начала синхронизации данных.

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

SELECT
    ag.local_database_name AS 'Local database name',
    ar.current_state AS 'Current state',
    ar.is_source AS 'Is source',
    ag.internal_state_desc AS 'Internal state desc',
    ag.database_size_bytes / 1024 / 1024 AS 'Database size MB',
    ag.transferred_size_bytes / 1024 / 1024 AS 'Transferred MB',
    ag.transfer_rate_bytes_per_second / 1024 / 1024 AS 'Transfer rate MB/s',
    ag.total_disk_io_wait_time_ms / 1000 AS 'Total Disk IO wait (sec)',
    ag.total_network_wait_time_ms / 1000 AS 'Total Network wait (sec)',
    ag.is_compression_enabled AS 'Compression',
    ag.start_time_utc AS 'Start time UTC',
    ag.estimate_time_complete_utc as 'Estimated time complete UTC',
    ar.completion_time AS 'Completion time',
    ar.number_of_attempts AS 'Attempt No'
FROM sys.dm_hadr_physical_seeding_stats AS ag
    INNER JOIN sys.dm_hadr_automatic_seeding AS ar
    ON local_physical_seeding_id = operation_id

-- Estimated seeding completion time
SELECT DISTINCT CONVERT(VARCHAR(8), DATEADD(SECOND, DATEDIFF(SECOND, start_time_utc, estimate_time_complete_utc) ,0), 108) as 'Estimated complete time'
FROM sys.dm_hadr_physical_seeding_stats

Если запрос не возвращает результатов, процесс заполнения не запущен или уже завершен.

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

DECLARE @link_name varchar(max) = '<DAGname>'
SELECT
   rs.synchronization_health_desc [Link sync health]
FROM
   sys.availability_groups ag 
   join sys.dm_hadr_availability_replica_states rs 
   on ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 0 AND rs.role = 2 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

Запрос возвращает следующие возможные значения:

  • нет результата: запрос был выполнен на вторичном экземпляре.
  • HEALTHY: Связь здоровая, и данные синхронизируются между репликами.
  • NOT_HEALTHY: соединение является неисправным, и данные не синхронизируются между репликами.

Значение replicaState описывает текущую ссылку. Если состояние также включает ошибку, то во время операции, указанной в состоянии, произошла ошибка. Например, LinkCreationError указывает, что при создании ссылки произошла ошибка.

Ниже приведены некоторые возможные значения replicaState:

  • Создание Ссылки: начальная настройка
  • LinkSynchronizing: выполняется репликация данных
  • LinkFailoverInProgress: переключение на резерв происходит

Полный список свойств состояния связи см. в команде Distributed Availability Groups - GET REST API.

При использовании ссылки можно столкнуться с двумя различными категориями ошибок — ошибки при попытке инициализации ссылки и ошибки при попытке создать ссылку.

При инициализации ссылки может возникать следующая ошибка (состояние связи: LinkInitError):

  • ошибка 41962: операция прервана, так как ссылка не была инициирована в течение 5 минут. Проверьте сетевое подключение и повторите попытку.
  • ошибка 41973: невозможно установить ссылку, так как сертификат конечной точки из SQL Server не был импортирован в управляемый экземпляр SQL Azure.
  • ошибка 41974: невозможно установить ссылку, так как сертификат конечной точки из управляемого экземпляра SQL не был импортирован в SQL Server правильно.
  • ошибка 41976: группа доступности не отвечает. Проверьте имена и параметры конфигурации и повторите попытку.
  • ошибка 41986: невозможно установить ссылку, так как подключение не удалось или вторичная реплика не реагирует. Проверьте имена, параметры конфигурации и сетевое подключение и повторите попытку.
  • ошибка 47521: невозможно установить ссылку, так как сервер-получатель не получил запрос. Убедитесь, что группа доступности и базы данных работоспособны на основном сервере и повторите попытку.

При создании ссылки может возникнуть следующая ошибка (состояние ссылки: LinkCreationError):

  • ошибка 41977: целевая база данных не реагирует. Проверьте параметры ссылки и повторите попытку.

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

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

Во-первых, убедитесь, что вы находитесь в сценарии разделения мозга. Это можно сделать с помощью SQL Server Management Studio (SSMS) или Transact-SQL (T-SQL).

Подключитесь как к SQL Server, так и к управляемому экземпляру SQL в SSMS, а затем в обозревателе объектов разверните реплики доступности под узлом группы доступности в AlwaysOn высокой доступности. Если две разные реплики перечислены как (основной), вы находитесь в сценарии разделения мозга.

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

-- Execute on SQL Server and SQL Managed Instance 
USE master
DECLARE @link_name varchar(max) = '<DAGName>'
SELECT
   ag.name [Link name], 
   rs.role_desc [Link role] 
FROM
   sys.availability_groups ag 
   JOIN sys.dm_hadr_availability_replica_states rs 
   ON ag.group_id = rs.group_id 
WHERE 
   rs.is_local = 1 AND ag.is_distributed = 1 AND ag.name = @link_name 
GO

Если оба экземпляра перечислены PRIMARY в столбце роли связи, вы находитесь в сценарии с разделённым мозгом.

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

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

--Execute on SQL Server 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] 
SET (ROLE = SECONDARY) 
GO 

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

--Execute on SQL Managed Instance 
USE master
ALTER AVAILABILITY GROUP [<DAGName>] FAILOVER 
GO 

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

Двунаправленное сетевое подключение между SQL Server и Управляемым экземпляром SQL необходимо для работы ссылки. После открытия портов на стороне SQL Server и настройки правила NSG на стороне управляемого экземпляра SQL проверьте подключение с помощью SQL Server Management Studio (SSMS) или Transact-SQL.

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

Заметка

Выполнение скриптов PowerShell агентом SQL Server на Linux в настоящее время не поддерживается, поэтому невозможно выполнить Test-NetConnection из задания агента SQL Server на Linux.

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

  • Пользователь, выполняющий тест, должен иметь разрешения для создания задания (либо как sysadmin, либо принадлежать роли SQLAgentOperator для msdb) как в SQL Server, так и в управляемом экземпляре SQL.
  • Служба агента SQL Server должна быть запущена на SQL Server. Так как агент включен по умолчанию в Управляемом экземпляре SQL, дополнительных действий не требуется.

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

  1. Подключитесь к экземпляру, который будет основной репликой в SSMS.

  2. В обозревателе объектов, разверните базы данных и щелкните правой кнопкой мыши базу данных, которую вы планируете связать со вторичной. Выберите ссылку Задачи>управляемого экземпляра Azure SQL>Тест подключения, чтобы открыть мастер Network Checker .

    снимок экрана обозревателя объектов в S S M S, с тестовым подключением, выбранным в меню базы данных правой кнопкой мыши.

  3. Выберите Далее на странице Введение мастера проверки сети.

  4. Если все требования выполнены на странице предварительных требований , выберите Далее. В противном случае устраните все невыполненные предварительные условия, а затем выберите Повторная проверка.

  5. На странице входа выберите Login для подключения к другому экземпляру, который будет вторичной репликой. Выберите Далее.

  6. Проверьте сведения на странице Указание параметров сети и при необходимости укажите IP-адрес. Выберите Далее.

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

  8. Просмотрите страницу результатов , чтобы проверить наличие соединения между двумя репликами, а затем нажмите кнопку Закрыть, чтобы завершить.

Осторожность

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

Дополнительные сведения о функции ссылки см. в следующих ресурсах: