SQL Server 2017の動的ポートのリッスンポート番号の設定が勝手に変更される

何らかの理由で、SQL Server 2012の動的ポートのリッスンポート番号の設定が勝手に変更されるという事象があるということで、ちょっと調べました。そもそもSQLサーバーの知識があんまりないので、いい時間になりましたが、これについてはすでに過去の情報が明らかになっていました。

 

TCP動的ポートのポート番号が変わる?(TechNet)

https://social.technet.microsoft.com/Forums/office/ja-JP/0f04d39b-0466-4422-a287-7cc291ebf8b1?forum=sqlserverja 

 

 

情報がちょっと古いですが、質問事項の抜粋です。図的に設定を変更する以外で動的ポートのリッスンポート番号の設定が変わるというものです。

質問事項
意図的に設定を変更する以外で動的ポートのリッスンポート番号の設定が変わる可能性についてご存じないでしょうか。(パッチ適用、他のアプリとの関係、SQLServerの何らかの設定変更が影響など)

環境について
OS:Windows2003Server(Intel X86)
バージョン:SQL Server2005 Standerd Edtion(9.00.3042.00)

現象
アプリケーションから動的ポート1048に接続しておりましたが、ある日サーバ(OS)を再起動するとそのポート設定が1049に変わって起動しており、クライアントから接続できない状態となっていました。(人的変更の可能性は可能な限り消去しました)

 

ポートは動的になっている場合の回答がとても分かりやすいです。

http://msdn.microsoft.com/ja-jp/library/ms181087(SQL.90).aspx

 

上記の「SQL Server Browser のしくみ」にも以下の記載がありますように、再起動すると変わります。
(もちろん、偶然同じポート番号が確保された場合は、変わらなかったように見えます。)

SQL Server の起動時に使用可能なポートが割り当てられます。
● ポートが動的に割り当てられる場合は、SQL Server が再起動されるたびにポート番号が変わる可能性があるので、クライアントは正しいポート番号を特定できません。

ですので、ポート番号が変わったのは仕様どおりということになるかと思います。

 

再起動すると動的ポートの場合はポート番号が変わるのが仕様ということで、動的ポートに直接接続しようとるうと、当然、接続できなくなることがあります。


その為、SQL Server Browser Serviceなどのサービスがあるようです。また、動的ポートは固定にすることもできます。たまに、設定方法を間違えることがあって、意図せず動的にポートが変わることがあるようなので、設定方法には注意してください。

 

ちなみに、動的ポートを固定にする設定は以下が参考になります。 特定の TCP ポートで受信待ちするようにサーバーを構成する こちらの記事では、SQL Server 構成マネージャーを使用して、 SQL Server データベース エンジン のインスタンスが特定の固定ポートで受信待ちするように構成する方法について書かれています。 詳しい設定方法は以下URLを参考にしてみてください。

 

以下はSQL Server 2017も含まれます。

https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/configure-a-server-to-listen-on-a-specific-tcp-port?view=sql-server-2017