Este artigo da Base de dados: Como configurar o SQL Server para escutar em uma porta específica esclarecerá as coisas para você:
Alocação dinâmica de porta
Se você configurar uma instância do SQL Server para usar a alocação dinâmica de porta e ainda não tiver reiniciado a instância do SQL Server, os valores do Registro serão definidos da seguinte maneira:
TCPDynamicPorts = Em branco
TCPPort = 0
No entanto, se você configurar uma instância do SQL Server para usar a alocação de porta dinâmica e reiniciar a instância do SQL Server, os valores do Registro serão definidos da seguinte maneira:
TCPDynamicPorts = Porta atual usada
TCPPort = Porta atual usada
Alocação de porta estática:
Se você configurar uma instância do SQL Server para usar uma porta estática e ainda não tiver reiniciado a instância do SQL Server, os valores do Registro serão definidos da seguinte maneira:
TCPDynamicPorts = Última porta usada
TCPPort = Nova porta estática a ser usada após a próxima reinicialização; nova porta estática que você definiu usando o Server Network Utility
No entanto, se você configurar uma instância do SQL Server para usar uma porta estática e reiniciar a instância do SQL Server, os valores do Registro serão definidos da seguinte maneira:
TCPDynamicPorts = Em branco
TCPPort = Nova porta estática que você define usando o Server Network Utility
para sua segunda pergunta -
Sempre que você inicia o SQLServer nomeado, ele usa a porta que está alocada. Caso a porta seja usada por outro programa , o SQL Server escolherá outra porta no momento da reinicialização, ou seja, a porta dinâmica será escolhida na primeira inicialização e geralmente permanecerá a mesma em futuras reinicializações (armazenadas no Registro) - mas se usado por outro programa, o SQL Server escolherá uma nova porta. Nota: Para Servidores Prod, eu uso apenas portas estáticas - motivos de segurança e facilidade de gerenciamento.
Nota: Mais coisas para descobrir:
Verifique se a porta dinâmica está sendo usada ou não usando o T-SQL:
SELECT NAME
,protocol_desc
,type_desc
,state_desc
,is_admin_endpoint
,port
,is_dynamic_port
,ip_address
FROM sys.tcp_endpoints
Você pode usar netstat -ano
para verificar usando o cmdline.
Além disso, você pode verificar o que foi armazenado em cache anteriormente no registro no lado do cliente e qual porta está usando para conectar-se ao servidor sql:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect
Second question
na minha pergunta acima.