it-swarm.com.de

Wann ist ein dynamischer Port "dynamisch"?

Ich hatte heute eine Diskussion über Dynamic Ports mit einem meiner Mitarbeiter und könnte Hilfe gebrauchen, um zu klären, wie sie funktionieren.

Erste Frage : Wenn das IPALLTCP Dynmaic Ports Einstellung ist eine bestimmte Zahl (z. B. 1971). Dies bedeutet, dass Sie einen statischen Port von 1971 oder einen dynamischen Port von 1971 haben, der sich möglicherweise zu einem späteren Zeitpunkt ändert.

enter image description here

Zweite Frage : Dies ist die, auf die ich am meisten neugierig bin. Wir haben eine Instanz, die denselben Port hatte (den Wert in IPALLTCP Dynmaic Ports Einstellung) für mehrere Jahre durch Dutzende von Instanzneustarts. Was bewirkt tatsächlich, dass sich der dynamische Port nach einem Neustart der Instanz tatsächlich ändert?

24
Kenneth Fisher

Dieser KB-Artikel: Konfigurieren von SQL Server zum Abhören eines bestimmten Ports erläutert die Dinge für Sie:

Dynamische Portzuweisung

Wenn Sie eine Instanz von SQL Server für die Verwendung der dynamischen Portzuweisung konfigurieren und die Instanz von SQL Server noch nicht neu gestartet haben, werden die Registrierungswerte wie folgt festgelegt:

TCPDynamicPorts = Leer

TCPPort = 0

Wenn Sie jedoch eine Instanz von SQL Server für die Verwendung der dynamischen Portzuweisung konfigurieren und die Instanz von SQL Server neu starten, werden die Registrierungswerte wie folgt festgelegt:

TCPDynamicPorts = Aktueller Port, der verwendet wird

TCPPort = Aktueller Port, der verwendet wird

Statische Portzuordnung:

Wenn Sie eine Instanz von SQL Server für die Verwendung eines statischen Ports konfigurieren und die Instanz von SQL Server noch nicht neu gestartet haben, werden die Registrierungswerte wie folgt festgelegt:

TCPDynamicPorts = Letzter verwendeter Port

TCPPort = Neuer statischer Port, der nach dem nächsten Neustart verwendet werden soll; neuer statischer Port, den Sie mit dem Server Network Utility festgelegt haben

Wenn Sie jedoch eine Instanz von SQL Server für die Verwendung eines statischen Ports konfigurieren und die Instanz von SQL Server neu starten, werden die Registrierungswerte wie folgt festgelegt:

TCPDynamicPorts = Leer

TCPPort = Neuer statischer Port, den Sie mit dem Server Network Utility festgelegt haben

für Ihre zweite Frage -

Jedes Mal, wenn Sie den benannten SQLServer starten, wird der zugewiesene Port verwendet. Wenn der Port von einem anderen Programm verwendet wird , wählt SQL Server zum Zeitpunkt des Neustarts einen anderen Port aus, dh der dynamische Port wird beim ersten Start ausgewählt. und wird bei zukünftigen Neustarts (in der Registrierung gespeichert) im Allgemeinen gleich bleiben - aber wenn es von einem anderen Programm verwendet wird, wählt SQL Server einen neuen Port. Hinweis: Für Prod-Server verwende ich nur statische Ports - aus Gründen der Sicherheit und der einfachen Verwaltung.

Hinweis: Weitere coole Dinge, um herauszufinden:

Überprüfen Sie, ob der dynamische Port verwendet wird oder nicht, indem Sie T-SQL verwenden:

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

Sie können netstat -ano Verwenden, um mit cmdline zu überprüfen.

Darüber hinaus können Sie überprüfen, was zuvor in der Registrierung auf der Clientseite zwischengespeichert wurde, um festzustellen, über welchen Port eine Verbindung zum SQL Server hergestellt wird:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\SNI11.0\LastConnect

enter image description here

22
Kin Shah