Em uma de nossas instâncias do SQL Server (12.0.5571.0, se você realmente precisa saber), usamos vários endereços IP para conectar.
- 127.0.0.1 - Porta dinâmica definida como 0. Nenhuma porta estática definida
- 172.16.0.5 - Endereço IP do servidor em que o SQL Server está. Porta dinâmica definida como 0 (geração automática). Nenhuma porta estática atribuída
- 172.16.0.6 - Endereço IP para a instância do SQL Server (assim as equipes só precisam acessar o endereço IP e não saber em qual servidor realmente estão). Nenhuma porta dinâmica atribuída. Porta estática 1433
Eu tenho brincado com fantoche e tenho mexido nas configurações do registro
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp
para ver se eu poderia usar o fantoche para automatizar a configuração de endereços IP e atribuições de portas. Eu criei um novo caminho de registro chamado 'IP172016000006'
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP172016000006
do qual eu moldei
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.InstanceNameX\MSSQLServer\SuperSocketNetLib\Tcp\IP1
mas agora sempre que inicio a instância do SQL Server minhas portas dinâmicas para 127.0.0.1 e 172.16.0.5 são diferentes.
Por exemplo, vou parar a instância do SQL Server, entrar em
- 'Gerenciador de Configuração do SQL Server'
- navegue até a configuração de rede da instância
- tcp/ip
- endereços IP
- e defina 'TCP Dynamic Ports = 0 para os endereços IP 127.0.0.1 e 172.16.0.5.
- endereços IP
- tcp/ip
- navegue até a configuração de rede da instância
Depois de reiniciar o SQL Server, a instância estará escutando em 127.0.0.1:43340 e 172.16.0.5:43341 (parece ser sempre 1 a mais que a outra porta)
Li a documentação do SQL Server Browser e descobri que o SQL Server Browser retornará a primeira porta que encontrar.
Eu também li o BOL para definir uma porta estática para o SQL Server , que é bastante engraçado sobre como definir portas dinâmicas. O BOL diz que o SQL Server tentará se conectar à porta especificada, mas se falhar, obterá uma nova porta. Isso faz sentido de vez em quando, mas o SQL Server tem consistentemente atribuições de portas dinâmicas inconsistentes.
Eu removi os valores de registro incorretos, mas o SQL Server ainda está tendo problemas para definir as portas dinâmicas para serem as mesmas. Já reiniciei todo o servidor. Eu configurei as portas dinâmicas TCP como '0' várias vezes.
Como obtenho portas dinâmicas consistentes novamente?
- Windows Server 2012 R2
- SQL Server 12.0.5571.0
- 8 instâncias do SQL Server instaladas - 3 das quais estão em cluster (é uma caixa de configuração de teste para nós DBAs; não julgue com muita severidade)
O ponto de portas dinâmicas é que você não se importa em qual porta o servidor é executado. O SQL Server Browser direciona os clientes para a porta escolhida dinamicamente.
Se você não quiser portas dinâmicas, apenas atribua uma porta no início, então ela nunca mudará.