web-dev-qa-db-fra.com

Quand un port dynamique est-il "dynamique"?

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 IPALLTCP 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.

enter image description here

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 IPALLTCP 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?

24
Kenneth Fisher

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

enter image description here

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

enter image description here

22
Kin Shah