Когда динамический порт является «динамическим»?

23

Сегодня Dynamic Portsу меня была дискуссия с одним из моих коллег, и я мог бы помочь с разъяснением того, как они работают.

Первый вопрос: Если IPALL TCP Dynmaic Portsпараметр является определенным числом (скажем, 1971), это означает, что у вас есть статический порт 1971 или динамический порт, который в настоящее время 1971 и может измениться в некоторый момент в будущем.

введите описание изображения здесь

Второй вопрос: это тот, который мне наиболее интересен. У нас есть экземпляр, который имел один и тот же порт (значение в IPALL TCP Dynmaic Portsнастройке) в течение нескольких лет через десятки перезапусков экземпляров. Что на самом деле вызывает динамическое изменение порта после перезапуска экземпляра?

Кеннет Фишер
источник

Ответы:

22

Эта статья базы знаний : Как настроить 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в моем вопросе выше.
Кеннет Фишер
@KennethFisher для вашего second question- каждый раз, когда вы запускаете именованный SQLServer, он использует выделенный порт. В случае, если порт используется другой программой, SQL Server выбирает другой порт во время перезапуска. Динамический порт выбирается при первом запуске и, как правило, остается неизменным при последующих перезапусках (хранящихся в реестре), но если он используется другой программой, сервер SQL выберет новый порт. примечание : для серверов Prod я использую только статические порты - безопасность и простота управления.
Кин Шах
Не могли бы вы объяснить, почему, по вашему мнению, стоит внедрить совершенно новый сервис (браузер SQL-сервера), работающий со статическим портом, поэтому он может не запуститься, если этот порт используется, просто потому, что вы хотите запустить SQL-сервер в случай, когда некоторые другие службы используют порты, которые вы слишком неуклюжи, чтобы подключить их, вероятно, к наиболее дорогому программному обеспечению, которое вы используете?
Каказ