J'avais une discussion aujourd'hui sur Dynamic Ports
avec un de mes collègues et pourrait utiliser de l'aide pour clarifier leur fonctionnement.
Première question: Si le IPALL
TCP Dynmaic Ports
paramètre est un nombre spécifique (par exemple 1971) qui signifie que vous avez un port statique de 1971 ou un port dynamique qui est actuellement 1971 et peut changer à un moment donné dans le futur.
Deuxième question: C'est celle qui m'intéresse le plus. Nous avons une instance qui a eu le même port (la valeur dans le IPALL
TCP Dynmaic Ports
setting) pendant plusieurs années grâce à des dizaines de redémarrages d'instances. Qu'est-ce qui fait que le port dynamique change réellement après le redémarrage d'une instance?
Cet article de la base de connaissances: Comment configurer SQL Server pour écouter sur un port spécifique clarifiera les choses pour vous:
Allocation dynamique des ports
Si vous configurez une instance de SQL Server pour utiliser l'allocation de port dynamique et que vous n'avez pas encore redémarré l'instance de SQL Server, les valeurs de Registre sont définies comme suit:
TCPDynamicPorts = Vide
TCPPort = 0
Toutefois, si vous configurez une instance de SQL Server pour utiliser l'allocation de port dynamique et redémarrez l'instance de SQL Server, les valeurs de Registre sont définies comme suit:
TCPDynamicPorts = Port actuel utilisé
TCPPort = port actuel utilisé
Allocation de port statique:
Si vous configurez une instance de SQL Server pour utiliser un port statique et que vous n'avez pas encore redémarré l'instance de SQL Server, les valeurs de Registre sont définies comme suit:
TCPDynamicPorts = Dernier port utilisé
TCPPort = Nouveau port statique à utiliser après le prochain redémarrage; nouveau port statique que vous avez défini à l'aide de l'utilitaire réseau du serveur
Toutefois, si vous configurez une instance de SQL Server pour utiliser un port statique et redémarrez l'instance de SQL Server, les valeurs de Registre sont définies comme suit:
TCPDynamicPorts = Vide
TCPPort = nouveau port statique que vous avez défini à l'aide de l'utilitaire réseau du serveur
pour votre deuxième question -
Chaque fois que vous démarrez le SQLServer nommé, il utilise le port alloué. Dans le cas où le port est utilisé par un autre programme , alors SQL Server choisit un autre port au moment du redémarrage ie Le port dynamique est choisi au premier démarrage, et restera généralement le même lors des prochains redémarrages (stockés dans le Registre) - mais si son utilisation par un autre programme, le serveur SQL choisira un nouveau port. Remarque: Pour les serveurs Prod, j'utilise uniquement des ports statiques - des raisons de sécurité et de facilité de gestion.
Remarque: Plus de chose cool pour le savoir:
Vérifiez si le port dynamique est utilisé ou n'utilise pas T-SQL:
SELECT NAME
,protocol_desc
,type_desc
,state_desc
,is_admin_endpoint
,port
,is_dynamic_port
,ip_address
FROM sys.tcp_endpoints
Vous pouvez utiliser netstat -ano
pour vérifier en utilisant cmdline.
De plus, vous pouvez vérifier ce qui a été mis en cache plus tôt dans le registre côté client quant au port qu'il utilise pour se connecter au serveur SQL:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect