Este artículo de KB: Cómo configurar SQL Server para escuchar en un puerto específico le aclarará las cosas:
Asignación dinámica de puertos
Si configura una instancia de SQL Server para utilizar la asignación dinámica de puertos y aún no ha reiniciado la instancia de SQL Server, los valores del registro se establecen de la siguiente manera:
TCPDynamicPorts = En blanco
TCPPort = 0
Sin embargo, si configura una instancia de SQL Server para utilizar la asignación dinámica de puertos y reinicia la instancia de SQL Server, los valores del registro se establecen de la siguiente manera:
TCPDynamicPorts = Puerto actual que se usa
TCPPort = puerto actual que se utiliza
Asignación de puertos estáticos:
Si configura una instancia de SQL Server para usar un puerto estático y aún no ha reiniciado la instancia de SQL Server, los valores del registro se establecen de la siguiente manera:
TCPDynamicPorts = Último puerto que se usa
TCPPort = Nuevo puerto estático que se utilizará después del próximo reinicio; nuevo puerto estático que establezca mediante la Utilidad de red del servidor
Sin embargo, si configura una instancia de SQL Server para usar un puerto estático y reinicia la instancia de SQL Server, los valores del registro se establecen de la siguiente manera:
TCPDynamicPorts = En blanco
TCPPort = Nuevo puerto estático que configura utilizando la Utilidad de red del servidor
Sobre la segunda pregunta -
Cada vez que inicia el SQLServer nombrado, utiliza el puerto asignado. En caso de que otro programa utilice el puerto , SQL Server elige otro puerto en el momento del reinicio, es decir, el puerto dinámico se elige en el primer inicio y, en general , seguirá siendo el mismo en futuros reinicios (almacenados en el Registro), pero si es utilizado por otro programa, luego el servidor SQL elegirá un nuevo puerto. nota: para los servidores Prod, solo uso puertos estáticos: razones de seguridad y facilidad de administración
Nota: Más cosas interesantes para descubrir:
Compruebe si el puerto dinámico se está utilizando o no con T-SQL:
SELECT NAME
,protocol_desc
,type_desc
,state_desc
,is_admin_endpoint
,port
,is_dynamic_port
,ip_address
FROM sys.tcp_endpoints
Puede usar netstat -ano
para verificar usando cmdline.
Además, puede verificar qué se almacenó en caché anteriormente en el registro en el lado del cliente en cuanto a qué puerto está utilizando para conectarse al servidor sql:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect
Second question
en mi pregunta anterior.