Quando una porta dinamica è "dinamica"?


23

Stavo discutendo oggi Dynamic Portscon uno dei miei colleghi e ho potuto usare un po 'di aiuto per chiarire come funzionano.

Prima domanda: se l' IPALL TCP Dynmaic Portsimpostazione è un numero specifico (diciamo 1971) significa che hai una porta statica del 1971 o una porta dinamica che è attualmente il 1971 e potrebbe cambiare ad un certo punto in futuro.

inserisci qui la descrizione dell'immagine

Seconda domanda: questa è quella di cui sono più curioso. Abbiamo un'istanza che ha avuto la stessa porta (il valore IPALL TCP Dynmaic Portsnell'impostazione) per diversi anni attraverso dozzine di riavvii di istanza. Cosa provoca effettivamente la modifica della porta dinamica dopo il riavvio di un'istanza?

Risposte:


22

Questo articolo KB: Come configurare SQL Server per l'ascolto su una porta specifica chiarirà le cose per te:

Allocazione dinamica delle porte

Se si configura un'istanza di SQL Server per l'utilizzo dell'allocazione dinamica delle porte e non è stata ancora riavviata l'istanza di SQL Server, i valori del registro vengono impostati come segue:

TCPDynamicPorts = Vuoto

TCPPort = 0

Tuttavia, se si configura un'istanza di SQL Server per l'utilizzo dell'allocazione dinamica delle porte e si riavvia l'istanza di SQL Server, i valori del registro vengono impostati come segue:

TCPDynamicPorts = Porta corrente utilizzata

TCPPort = Porta corrente utilizzata

Allocazione porta statica:

Se si configura un'istanza di SQL Server per l'utilizzo di una porta statica e non è stata ancora riavviata l'istanza di SQL Server, i valori del Registro di sistema vengono impostati come segue:

TCPDynamicPorts = Ultima porta utilizzata

TCPPort = Nuova porta statica da utilizzare dopo il prossimo riavvio; nuova porta statica impostata utilizzando l'utilità di rete del server

Tuttavia, se si configura un'istanza di SQL Server per l'utilizzo di una porta statica e si riavvia l'istanza di SQL Server, i valori del registro vengono impostati come segue:

TCPDynamicPorts = Vuoto

TCPPort = Nuova porta statica impostata utilizzando Server Network Utility

per la tua seconda domanda -

Ogni volta che si avvia SQL Server denominato, utilizza la porta allocata. Nel caso in cui la porta sia utilizzata da un altro programma , SQL Server sceglie un'altra porta al momento del riavvio, ad es. La porta dinamica viene scelta al primo avvio e rimarrà generalmente la stessa attraverso i riavvii futuri (memorizzati nel Registro di sistema) - ma se viene utilizzato da un altro programma, quindi SQL Server sceglierà una nuova porta. nota: per i server di produzione utilizzo solo porte statiche: motivi di sicurezza e facilità di gestione.

Nota: più raffredda cosa da scoprire:

Verifica se la porta dinamica è in uso o non utilizza T-SQL:

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

inserisci qui la descrizione dell'immagine

Puoi usare netstat -anoper controllare usando cmdline.

Inoltre, puoi controllare cosa è stato precedentemente memorizzato nella cache nel registro sul lato client per sapere quale porta sta usando per connettersi al server sql:

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

inserisci qui la descrizione dell'immagine


Grazie e questo è un link molto utile! Sai cosa fa sì che una porta dinamica cambi porte? Vedi Second questionnella mia domanda sopra.
Kenneth Fisher,

@KennethFisher per il tuo second question- Ogni volta che avvii il SQL Server chiamato, usa la porta che è allocata. Nel caso in cui la porta sia utilizzata da un altro programma, SQL Server sceglie un'altra porta al momento del riavvio. La porta dinamica viene scelta al primo avvio e generalmente rimarrà la stessa nei futuri riavvii (memorizzati nel Registro di sistema), ma se viene utilizzata da un altro programma, SQL Server sceglierà una nuova porta. nota : per i server di produzione, utilizzo solo porte statiche: motivi di sicurezza e facilità di gestione.
Kin Shah,

Saresti così gentile da spiegare perché pensi che valga la pena implementare un servizio completamente nuovo (browser del server SQL) che funziona su una porta statica , quindi potrebbe non avviarsi se questa porta viene utilizzata, solo perché vuoi avviare SQL Server in un caso in cui alcuni altri servizi utilizzano porte che sono troppo goffe per essere collegate al software probabilmente più costoso che stai utilizzando?
Kakaz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.