web-dev-qa-db-ja.com

動的ポートはいつ「動的」ですか?

今日、Dynamic Portsについて同僚の1人と話し合っており、彼らがどのように機能するかを明らかにするのにいくつかの助けを借りることができました。

最初の質問:IPALLTCP Dynmaic Ports設定が特定の数値(1971など)の場合、静的ポートが1971であるか、現在動的ポートが使用されていることを示します1971年に変更され、将来的に変更される可能性があります。

enter image description here

2番目の質問:これは私が最も興味を持っている質問です。数年間、同じポート(IPALLTCP Dynmaic Ports設定の値)が数十回インスタンスを再起動していたインスタンスがあります。インスタンスの再起動後に動的ポートが実際に変更される原因は何ですか?

24
Kenneth Fisher

このKB記事: 特定のポートでリッスンするようにSQL Serverを構成する方法 は、次のことを明確にします。

動的ポート割り当て

動的ポート割り当てを使用するようにSQL Serverのインスタンスを構成し、SQL Serverのインスタンスをまだ再起動していない場合、レジストリ値は次のように設定されます。

TCPDynamicPorts =空白

TCPPort = 0

ただし、動的ポート割り当てを使用するようにSQL Serverのインスタンスを構成し、SQL Serverのインスタンスを再起動すると、レジストリ値は次のように設定されます。

TCPDynamicPorts =使用されている現在のポート

TCPPort =使用されている現在のポート

静的ポート割り当て:

静的ポートを使用するようにSQL Serverのインスタンスを構成し、SQL Serverのインスタンスをまだ再起動していない場合、レジストリ値は次のように設定されます。

TCPDynamicPorts =使用される最後のポート

TCPPort =次回の再起動後に使用される新しい静的ポート。サーバーネットワークユーティリティを使用して設定した新しい静的ポート

ただし、静的ポートを使用するようにSQL Serverのインスタンスを構成し、SQL Serverのインスタンスを再起動すると、レジストリ値は次のように設定されます。

TCPDynamicPorts =空白

TCPPort =サーバーネットワークユーティリティを使用して設定した新しい静的ポート

2番目の質問-

名前付きSQLServerを起動するたびに、割り当てられたポートが使用されます。 ポートが別のプログラムで使用されている場合、SQL Serverは再起動時に別のポートを選択します。つまり、動的ポートは最初の起動時に選択されます。 通常は同じままです(レジストリに格納されている)今後の再起動後-SQLサーバーが別のプログラムで使用する場合、SQLサーバーは新しいポートを選択します。注:製品サーバーの場合、私は静的ポートのみを使用します-セキュリティと管理のしやすさの理由。

注:調べるべきよりクールなこと:

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

netstat -anoを使用すると、cmdlineを使用して確認できます。

さらに、SQLサーバーへの接続に使用しているポートについて、クライアント側のレジストリの以前にキャッシュされたものを確認できます。

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

enter image description here

22
Kin Shah