本文讨论如何确定Microsoft SQL Server 命名实例是否侦听动态端口与静态端口。 排查与 SQL Server 相关的不同连接问题时,此信息非常有用。
默认情况下,SQL Server 命名实例配置为侦听动态端口。 它从操作系统获取可用端口。 还可以将 SQL Server 命名实例配置为在特定端口上启动。 这称为静态端口。 有关 SQL Server 上下文中的静态和动态端口的详细信息,请参阅 静态与动态端口。
使用以下过程来确定 SQL Server 命名实例是否侦听动态端口与静态端口。
选项 1:使用SQL Server 配置管理器
在SQL Server 配置管理器中,展开“SQL Server 网络配置”,展开实例名称的协议,然后双击“TCP/IP”。
在 TCP/IP 属性中,选择“ 协议”。
检查“ 全部 侦听”设置中的值。 如果设置为“是”,请转到步骤 4。 如果设置为 “否”,请转到步骤 6。
转到 IP 地址,并滚动到 TCP/IP 属性页底部。
检查 IP All 中的值,并使用下表来确定命名实例是侦听动态端口还是静态端口。
TCP 动态端口 TCP 端口 使用动态或静态端口的 SQL Server 实例? 空白 空白 动态端口 <Number>
空白 动态端口 - <Number>
是 SQL Server 当前正在侦听的动态端口<Number1>
<Number2>
同时侦听动态端口 <Number1>
和静态端口<Number2>
切换到 IP 地址。 请注意,多个 IP 地址以 IP1、IP2 和 IP All 格式显示。 其中一个 IP 地址适用于环回适配器 127.0.0.1。 计算机上为每个 IP 地址显示更多 IP 地址。 (你可能会看到 IP4 和 IP6 地址。若要检查是否为动态端口和静态端口配置了特定的 IP 地址,请使用下表。
TCP 动态端口 TCP 端口 使用动态或静态端口的 SQL Server 实例? 空白 空白 动态端口 <Number>
空白 动态端口 - <Number>
SQL Server 当前正在侦听的动态端口。<Number1>
<Number2>
同时侦听动态端口 <Number1>
和静态端口<Number2>
注意
TCP 动态端口中的值 0 表示命名实例当前未运行,并且已针对动态端口进行配置。 启动实例后,值字段将反映实例当前正在使用的动态端口。
选项 2:使用 PowerShell
在 PowerShell ISE 中运行以下脚本。 控制台窗口显示当前安装在系统上的所有 SQL Server 实例(SQL Server 2014 到 SQL Server 2019)的所有相关 TCP/IP。
clear Write-Host "SQL Server 2019" Write-Host "=====================" Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.*\MSSQLServer\SuperSocketNetLib\Tcp" | Select-Object -Property Enabled, KeepAlive, ListenOnAllIps,@{label='ServerInstance';expression={$_.PSPath.Substring(74)}} |Format-Table -AutoSize Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.*\MSSQLServer\SuperSocketNetLib\Tcp\IP*\" | Select-Object -Property TcpDynamicPorts,TcpPort,DisplayName, @{label='ServerInstance_and_IP';expression={$_.PSPath.Substring(74)}}, IpAddress |Format-Table -AutoSize Write-Host "SQL Server 2017" Write-Host "=====================" Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.*\MSSQLServer\SuperSocketNetLib\Tcp" | Select-Object -Property Enabled, KeepAlive, ListenOnAllIps,@{label='ServerInstance';expression={$_.PSPath.Substring(74)}} |Format-Table -AutoSize Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.*\MSSQLServer\SuperSocketNetLib\Tcp\IP*\" | Select-Object -Property TcpDynamicPorts,TcpPort, DisplayName, @{label='ServerInstance_and_IP';expression={$_.PSPath.Substring(74)}}, IpAddress |Format-Table -AutoSize Write-Host "SQL Server 2016" Write-Host "=====================" Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.*\MSSQLServer\SuperSocketNetLib\Tcp" | Select-Object -Property Enabled, KeepAlive, ListenOnAllIps,@{label='ServerInstance';expression={$_.PSPath.Substring(74)}} |Format-Table -AutoSize Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.*\MSSQLServer\SuperSocketNetLib\Tcp\IP*\" | Select-Object -Property TcpDynamicPorts,TcpPort, DisplayName, @{label='ServerInstance_and_IP';expression={$_.PSPath.Substring(74)}}, IpAddress |Format-Table -AutoSize Write-Host "SQL Server 2014" Write-Host "=====================" Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.*\MSSQLServer\SuperSocketNetLib\Tcp" | Select-Object -Property Enabled, KeepAlive, ListenOnAllIps,@{label='ServerInstance';expression={$_.PSPath.Substring(74)}} |Format-Table -AutoSize Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.*\MSSQLServer\SuperSocketNetLib\Tcp\IP*\" | Select-Object -Property TcpDynamicPorts,TcpPort, DisplayName, @{label='ServerInstance_and_IP';expression={$_.PSPath.Substring(74)}}, IpAddress |Format-Table -AutoSize
在输出中,检查 SQL Server 实例的 ListenOnAllIPs 列中的值(请参阅该行的 ServerInstance 中的相应值)。 如果该值设置为 1,请转到步骤 3。 如果设置为 0,请转到步骤 4。
扫描输出中是否有实例的 DisplayName 列中有任何 IP 地址条目的行,或检查该行的 TcpDynamicPorts 和 TcpPort 的值。 然后,使用下表来确定命名实例是侦听动态端口还是静态端口。
TCP 动态端口 TCP 端口 使用动态或静态端口的 SQL Server 实例? 空白 空白 动态端口 <Number>
空白 动态端口 - <Number>
动态端口 SQL 当前正在侦听<Number1>
<Number2>
同时侦听动态端口 <Number1>
和静态端口<Number2>
请注意,多个 IP 地址以 IP1、IP2 和 IP All 格式显示。 其中一个 IP 地址适用于环回适配器 127.0.0.1。 计算机上为每个 IP 地址显示更多 IP 地址。 (你可能会看到 IP4 和 IP6 地址。若要检查是否为动态端口和静态端口配置了特定的 IP 地址,请使用下表。
TCP 动态端口 TCP 端口 使用动态或静态端口的 SQL Server 实例? 空白 空白 动态端口 <Number>
空白 动态端口 - <Number>
SQL Server 当前正在侦听的动态端口。<Number1>
<Number2>
同时侦听动态端口 <Number1>
和静态端口<Number2>
注意
TCP 动态端口中的值 0 表示命名实例当前未运行,并且已针对动态端口进行配置。 启动实例后,值字段将反映实例当前正在使用的动态端口。