SQL Server Service Broker. Диагностика и решение сетевых проблем.
В прошлый раз мы с вами разобрались с тем, каким образом устроены внутренние механизмы SQL Server Service Broker-а (https://blogs.technet.com/b/sqlruteam/archive/2016/04/07/sqlserver_2d00_service_2d00_broker_2d00_troubleshooting_2d00_overview.aspx). С этого блога начинаем знакомство с проблемами, которые могут возникнуть с брокером и методами их решения.
Далее мы обратим свое внимание на сетевые проблемы, как наиболее часто встречающиеся при первоначальном развертывании и при эксплуатации системы.
Какие виды ошибок сетевого доступа, чаше всего возникают при эксплуатации сервис-брокера
1. Общие сетевые проблемы характерные для любой установки SQL Server.
2. Отсутствие точек подключения (Endpoint).
3. Точки подключения переведены в режим останова (STOPPED) или неправильно настроены.
4. Доступ к точкам подключения закрыт межсетевым экраном.
Прежде чем приступить к решению специфических сетевых проблем необходимо убедиться, что общие сетевые проблемы отсутствуют. Общесетевые проблемы связаны с ошибками при настройке сетевой инфраструктуры и не относятся к тематике данного блога. Поэтому здесь даны лишь общие рекомендации
1. Убедиться в доступности удаленного хоста командой ping host_name, а если ping host_name не проходит, то выполнить ping по IP-адресу, и далее разбираться с системой разрешения имен.
2. Убедиться в доступности удаленного SQL Server с помощью команды SQLCMD -E -Sserver. Если это подключение невозможно, то необходимо разбираться с сетевыми соединениями на SQL Server, доступностью портов и работой SQL Browser.
После решения общих сетевых проблем (если это не привело к положительному результату и сервис-брокер по прежнему не работает) можно переключиться на решение специфических проблем сервис-брокера.
Отсутствие точек подключения (Endpoint)
Необходимо убедиться, что точки подключения для Service Broker-а созданы, для этого необходимо выполнить команды.
use InstInitiatorDB;
GO
select * from sys.service_broker_endpoints;
GO
select * from sys.endpoints where name = 'InstInitiatorEndpoint';
Обратите внимание, что первая команда выполняется в контексте базы, на которой настроен сервис брокер.
Точки подключения переведены в режим останова (STOPPED) или неправильно настроены
Если одна из точек остановлена (или некорректно настроена), то при попытке соединения с ней возникнет ошибка как показано ниже.
Такая же ошибка отображается и в трассах SQL Profiler. Как видно из трасс, SQL Server (не смотря на наличие ошибки) продолжает свои попытки установить соединение на точку подключения удаленного сервера.
При наличии подобной ошибки рекомендуется убедиться в доступности порта удаленной точки подключения. Как видно в данном случае соединение к порту не возможно.
После этого можно проверить"слушает" ли удаленный сервер порт номер 4022 (в данном случае это номер порта для Service Broker-а). Здесь показано как мы выгружаем в файл ports.txt данные о том, какой из процессов "слушает" какой порт.
После решения данной сетевой проблемы и восстановления соединения, сообщения будут переданы автоматически (См. последние 5 строк трассы).
Справедливости ради необходимо сказать, что с помощью утилиты ssbdiagnose.exe мы бы добились того же результата значительно быстрее.
Доступ к точкам подключения закрыт межсетевым экраном.
Еще одной наиболее вероятной проблемой может быть закрытие портов межсетевыми экранами. Это более чем возможно, и потому еще, что для сервис-брокера могут использоваться нестандартные номера портов.
Последовательность решения здесь принципиально не отличается от вышеописанной, и, более того, как и в предыдущем случае, утилита ssbdiagnose.exe оказывается на высоте, давая нужный результат сразу.
В следующих статьях мы продолжим рассмотрение возможных причин некорректной работы SQL Server Service Broker.
Александр Каленик, Senior Premier Field Engineer (PFE), MSFT (Russia)