Ця стаття 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
у моєму питанні вище.