动态端口什么时候“动态”?


23

我今天正在Dynamic Ports与一位同事进行讨论,可以用一些帮助来阐明他们的工作方式。

第一个问题:如果IPALL TCP Dynmaic Ports设置为特定数字(例如1971),是否表示您有1971的静态端口或当前为1971的动态端口,并且将来可能会更改。

在此处输入图片说明

第二个问题:这是我最好奇的问题。IPALL TCP Dynmaic Ports通过数十次实例重新启动,我们有一个拥有多年相同端口(设置中的值)的实例。是什么导致实例实例重新启动后动态端口实际发生更改?

Answers:


22

该知识库文章:如何配置SQL Server以在特定端口上进行侦听将为您澄清一些事情:

动态端口分配

如果将SQL Server实例配置为使用动态端口分配,并且尚未重新启动SQL Server实例,则注册表值设置如下:

TCPDynamicPorts =空白

TCP端口= 0

但是,如果将SQL Server实例配置为使用动态端口分配,然后重新启动SQL Server实例,则注册表值将设置如下:

TCPDynamicPorts =当前使用的端口

TCPPort =使用的当前端口

静态端口分配:

如果将SQL Server实例配置为使用静态端口,并且尚未重新启动SQL Server实例,则注册表值设置如下:

TCPDynamicPorts =使用的最后一个端口

TCPPort =下次重启后使用的新静态端口;使用服务器网络实用程序设置的新静态端口

但是,如果将SQL Server实例配置为使用静态端口,然后重新启动SQL Server实例,则注册表值将设置如下:

TCPDynamicPorts =空白

TCPPort =您使用服务器网络实用程序设置的新静态端口

对于第二个问题 -

每次启动命名的SQLServer时,它都会使用分配的端口。如果该端口被另一个程序使用,则SQL Server在重新启动时会选择另一个端口,即,动态端口是在第一次启动时选择的,并且以后的重新启动过程中通常保持不变(存储在注册表中)-但是如果它被另一个程序使用,则SQL Server将选择一个新端口。注意:对于Prod Server,我仅使用静态端口-安全和易于管理的原因。

注意:更酷的东西可以找到:

使用T-SQL检查是否正在使用动态端口:

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

在此处输入图片说明

您可以使用 netstat -anocmdline进行检查。

另外,您可以检查客户端注册表中较早缓存的内容,以了解它用于连接sql server的端口:

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

在此处输入图片说明


谢谢,这是一个非常有用的链接!您知道什么导致动态端口更改端口吗?请参阅Second question上面的问题。
肯尼斯·费舍尔

@KennethFisher-您second question每次启动命名的SQLServer时,它都会使用分配的端口。如果该端口被另一个程序使用,则SQL Server在重新启动时会选择另一个端口。动态端口是在首次启动时选择的,通常在以后的重新启动时将保持不变(存储在注册表中)-但是如果其他程序使用了该端口,则SQL Server将选择一个新端口。注意:对于Prod Server,我使用静态端口-安全和易于管理的原因。
Kin Shah 2013年

您是否愿意解释为什么您认为值得在静态端口上实现全新的服务(SQL Server浏览器),因此如果使用此端口可能无法启动,仅仅是因为您要在以下位置启动SQL Server:如果某些其他服务使用的端口太笨拙而无法附加到您正在使用的最昂贵的软件上?
卡卡兹
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.