如何检查SQL Server侦听动态端口或静态端口
本文讨论如何确定 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 2014 年到 2019 SQL Server 2019) 的所有SQL Server实例的所有相关 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 表示命名实例当前未运行,并且已为动态端口配置。 启动实例后,值字段将反映实例当前使用的动态端口。