Коли динамічний порт "динамічний"?


23

Я сьогодні обговорював питання Dynamic Portsз одним зі своїх колег, і я міг скористатись допомогою, щоб пояснити, як вони працюють.

Перше запитання: Якщо для IPALL TCP Dynmaic Portsпараметра встановлено конкретне число (скажімо, 1971), це означає, що у вас є статичний порт 1971 року або динамічний порт, який наразі є 1971 р. І може змінитися в якийсь момент у майбутньому.

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

Друге питання: Це саме те, про що мені найбільше цікаво. У нас є екземпляр, який мав той самий порт (значення в IPALL TCP Dynmaic Portsналаштуваннях) протягом декількох років через десятки перезавантажень екземплярів. Що насправді динамічний порт фактично змінюється після перезавантаження примірника?

Відповіді:


22

Ця стаття KB: Як налаштувати 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 сервер у випадок, коли деякі інші служби використовують порти, ви занадто незграбні, щоб приєднатись до, мабуть, найдорожчого програмного забезпечення, яке ви використовуєте?
каказ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.