SQL Server. Service Broker. Диагностика и решение сетевых проблем. Часть 2.

В предыдущей статье мы с вами разобрались с тем, каким образом устроены внутренние механизмы SQL Server Service Broker-а.
С этого блога начинаем знакомство с проблемами, которые могут возникнуть с брокером и методами их решения.
Далее мы обратим свое внимание на сетевые проблемы, как наиболее часто встречающиеся при первоначальном развертывании и при эксплуатации системы.
Какие виды ошибок сетевого доступа, чаше всего возникают при эксплуатации сервис-брокера
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.

17_1.jpg

После решения общих сетевых проблем (если это не привело к положительному результату и сервис-брокер по прежнему не работает) можно переключиться на решение специфических проблем сервис-брокера.

Отсутствие точек подключения (Endpoint)

Необходимо убедиться, что точки подключения для Service Broker-а созданы, для этого необходимо выполнить команды.
use InstInitiatorDB;
GO
select * from sys.service_broker_endpoints;
GO
select * from sys.endpoints where name = 'InstInitiatorEndpoint';
Обратите внимание, что первая команда выполняется в контексте базы, на которой настроен сервис брокер.
Точки подключения переведены в режим останова (STOPPED) или неправильно настроены 
Если одна из точек остановлена (или некорректно настроена), то при попытке соединения с ней возникнет ошибка как показано ниже.

 15_1.jpg

Такая же ошибка отображается и в трассах SQL Profiler. Как видно из трасс, SQL Server (не смотря на наличие ошибки) продолжает свои попытки установить соединение на точку подключения удаленного сервера.

16_1.jpg

 При наличии подобной ошибки рекомендуется убедиться в доступности порта удаленной точки подключения. Как видно в данном случае соединение к порту не возможно.

 18_1.jpg

После этого можно проверить"слушает" ли удаленный сервер порт номер 4022 (в данном случае это номер порта для Service Broker-а). Здесь  показано как мы выгружаем в файл ports.txt данные о том, какой из процессов "слушает" какой порт.

 19.jpg

После решения данной сетевой проблемы и восстановления соединения, сообщения будут переданы автоматически  (См. последние 5 строк трассы).

22.jpg

  Доступ к точкам подключения закрыт межсетевым экраном.

Еще одной наиболее вероятной проблемой может быть закрытие портов межсетевыми экранами. Это более чем возможно, и потому еще, что для сервис-брокера могут использоваться нестандартные номера портов. 
Последовательность решения здесь принципиально не отличается от вышеописанной, и, более того, как и в предыдущем случае, утилита ssbdiagnose.exe оказывается на высоте, давая нужный результат сразу.

17_2.jpg

В следующих статьях мы продолжим рассмотрение возможных причин некорректной работы SQL Server Service Broker.
 
Александр Каленик, Senior Premier Field Engineer (PFE), MSFT (Russia)