Эта статья базы знаний : Как настроить SQL Server для прослушивания через определенный порт , прояснит вам кое-что:
Динамическое распределение портов
Если вы настраиваете экземпляр SQL Server для использования динамического распределения портов и еще не перезапускаете экземпляр SQL Server, значения реестра устанавливаются следующим образом:
TCPDynamicPorts = Пусто
TCPPort = 0
Однако если вы настраиваете экземпляр SQL Server для использования динамического распределения портов и перезапускаете экземпляр SQL Server, значения реестра устанавливаются следующим образом:
TCPDynamicPorts = Текущий порт, который используется
TCPPort = текущий порт, который используется
Распределение статического порта:
Если вы настраиваете экземпляр SQL Server для использования статического порта, и вы еще не перезапустили экземпляр SQL Server, значения реестра устанавливаются следующим образом:
TCPDynamicPorts = Последний используемый порт
TCPPort = новый статический порт, который будет использоваться после следующего перезапуска; новый статический порт, который вы установили с помощью сетевой утилиты сервера
Однако если вы настраиваете экземпляр SQL Server для использования статического порта и перезапускаете экземпляр SQL Server, значения реестра устанавливаются следующим образом:
TCPDynamicPorts = Пусто
TCPPort = новый статический порт, который вы установили с помощью сетевой утилиты сервера
на ваш второй вопрос -
Каждый раз, когда вы запускаете именованный SQLServer, он использует выделенный порт. В случае, если порт используется другой программой , тогда SQL Server выбирает другой порт во время перезапуска, т.е. динамический порт выбирается при первом запуске и, как правило, останется таким же при последующих перезапусках (сохраненных в реестре) - но если он используется другой программой, тогда сервер SQL выберет новый порт. примечание: для серверов Prod я использую только статические порты - безопасность и простота управления.
Примечание: больше остывает, чтобы узнать:
Проверьте, используется ли динамический порт или не используется T-SQL:
SELECT NAME
,protocol_desc
,type_desc
,state_desc
,is_admin_endpoint
,port
,is_dynamic_port
,ip_address
FROM sys.tcp_endpoints
Вы можете использовать netstat -ano
для проверки с помощью cmdline.
Кроме того, вы можете проверить, что было кэшировано ранее в реестре на стороне клиента, чтобы определить, какой порт он использует для подключения к серверу SQL
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect
Second question
в моем вопросе выше.