Kiedy port dynamiczny jest „dynamiczny”?

23

Rozmawiałem dzisiaj o Dynamic Portsjednym z moich współpracowników i mogłem skorzystać z pomocy w wyjaśnieniu, w jaki sposób działają.

Pierwsze pytanie: jeśli IPALL TCP Dynmaic Portsustawienie jest określoną liczbą (powiedzmy 1971), czy oznacza to, że masz port statyczny z 1971 r. Lub port dynamiczny, który jest obecnie 1971 r., I może w przyszłości ulec zmianie.

wprowadź opis zdjęcia tutaj

Drugie pytanie: najbardziej mnie to ciekawi. Mamy instancję, która miała ten sam port (wartość w IPALL TCP Dynmaic Portsustawieniu) przez kilka lat, a dziesiątki instancji są restartowane. Co tak naprawdę powoduje zmianę portu dynamicznego po ponownym uruchomieniu instancji?

Kenneth Fisher
źródło

Odpowiedzi:

22

W tym artykule z bazy wiedzy : Jak skonfigurować program SQL Server do nasłuchiwania na określonym porcie , wyjaśnimy Ci następujące rzeczy:

Dynamiczne przydzielanie portów

Jeśli skonfigurujesz wystąpienie programu SQL Server do korzystania z dynamicznej alokacji portów, a jeszcze nie uruchomiono ponownie wystąpienia programu SQL Server, wartości rejestru są ustawione w następujący sposób:

TCPDynamicPorts = Puste

TCPPort = 0

Jeśli jednak skonfigurujesz wystąpienie programu SQL Server do korzystania z dynamicznego przydzielania portów i zrestartujesz wystąpienie programu SQL Server, wartości rejestru zostaną ustawione w następujący sposób:

TCPDynamicPorts = Bieżący używany port

TCPPort = Bieżący używany port

Statyczny przydział portów:

Jeśli skonfigurujesz wystąpienie programu SQL Server do korzystania z portu statycznego i nie zrestartowałeś jeszcze wystąpienia programu SQL Server, wartości rejestru zostaną ustawione w następujący sposób:

TCPDynamicPorts = Ostatni używany port

TCPPort = Nowy port statyczny, który będzie używany po następnym restarcie; nowy port statyczny ustawiony za pomocą Narzędzia sieciowego serwera

Jeśli jednak skonfigurujesz wystąpienie programu SQL Server do używania portu statycznego i zrestartujesz wystąpienie programu SQL Server, wartości rejestru zostaną ustawione w następujący sposób:

TCPDynamicPorts = Puste

TCPPort = Nowy port statyczny ustawiony za pomocą narzędzia sieciowego serwera

na drugie pytanie -

Za każdym razem, gdy uruchamiasz nazwany SQLServer, korzysta on z przydzielonego portu. W przypadku, gdy port jest używany przez inny program , wówczas SQL Server wybiera inny port w momencie restartu, tj. Port dynamiczny jest wybierany przy pierwszym uruchomieniu i zasadniczo pozostanie taki sam podczas przyszłych ponownych uruchomień (przechowywanych w Rejestrze) - ale jeśli jest używany przez inny program, a następnie SQL Server wybierze nowy port. Uwaga: W przypadku serwerów Prod używam tylko portów statycznych - ze względów bezpieczeństwa i łatwości zarządzania.

Uwaga: Więcej chłodzi rzecz, aby dowiedzieć się:

Sprawdź, czy używasz portu dynamicznego, czy nie używa T-SQL:

SELECT NAME
    ,protocol_desc
    ,type_desc
    ,state_desc
    ,is_admin_endpoint
    ,port
    ,is_dynamic_port
    ,ip_address
FROM sys.tcp_endpoints

wprowadź opis zdjęcia tutaj

Możesz użyć netstat -anodo sprawdzenia za pomocą cmdline.

Dodatkowo możesz sprawdzić, co zostało wcześniej buforowane w rejestrze po stronie klienta, co do portu używanego do łączenia się z serwerem SQL:

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

wprowadź opis zdjęcia tutaj

Kin Shah
źródło
Dzięki i to jest bardzo przydatny link! Czy wiesz, co powoduje, że port dynamiczny zmienia porty? Zobacz Second questionmoje pytanie powyżej.
Kenneth Fisher
@KennethFisher dla twojego second question- Za każdym razem, gdy uruchamiasz nazwany SQLServer, korzysta on z przydzielonego portu. W przypadku, gdy port jest używany przez inny program, wówczas SQL Server wybiera inny port w momencie restartu. Port dynamiczny jest wybierany przy pierwszym uruchomieniu i zasadniczo pozostanie taki sam podczas przyszłych ponownych uruchomień (przechowywanych w Rejestrze) - ale jeśli jest używany przez inny program, to SQL Server wybierze nowy port. Uwaga : W przypadku serwerów Prod używam tylko portów statycznych - ze względów bezpieczeństwa i łatwości zarządzania.
Kin Shah,
Czy byłbyś tak uprzejmy wyjaśnić, dlaczego Twoim zdaniem warto wdrożyć całkowicie nową usługę (przeglądarkę SQL Server), która działa na porcie statycznym, więc może się nie uruchomić, jeśli ten port jest używany, tylko dlatego, że chcesz uruchomić serwer SQL w przypadek, w którym niektóre inne usługi korzystają z portów, które są zbyt niezdarne, aby podłączyć się do prawdopodobnie najdroższego oprogramowania, którego używasz?
kakaz