本文討論如何判斷您的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 實例? Blank Blank 動態連接埠 <Number>Blank 動態埠 - <Number>是 SQL Server 目前正在接聽的動態埠<Number1><Number2>同時接聽動態埠 <Number1>和靜態埠<Number2>切換至 IP位址。 請注意,數個IP位址會以IP1、IP2格式顯示,最多為IP All。 其中一個IP位址適用於回送適配卡 127.0.0.0.1。 計算機上每個IP位址都會顯示更多IP位址。 (您可能會看到 IP4 和 IP6 位址。若要檢查是否已針對動態與靜態埠設定特定的IP位址,請使用下表。
TCP 動態連接埠 TCP 連接埠 使用動態或靜態埠的 SQL Server 實例? Blank Blank 動態連接埠 <Number>Blank 動態埠 - <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 實例? Blank Blank 動態連接埠 <Number>Blank 動態埠 - <Number>是動態埠 SQL 目前正在接聽<Number1><Number2>同時接聽動態埠 <Number1>和靜態埠<Number2>請注意,數個IP位址會以IP1、IP2格式顯示,最多為IP All。 其中一個IP位址適用於回送適配卡 127.0.0.0.1。 計算機上每個IP位址都會顯示更多IP位址。 (您可能會看到 IP4 和 IP6 位址。若要檢查是否已針對動態與靜態埠設定特定的IP位址,請使用下表。
TCP 動態連接埠 TCP 連接埠 使用動態或靜態埠的 SQL Server 實例? Blank Blank 動態連接埠 <Number>Blank 動態埠 - <Number>是 SQL Server 目前正在接聽的動態埠。<Number1><Number2>同時接聽動態埠 <Number1>和靜態埠<Number2>
注意
TCP 動態埠中的值 0 表示具名實例目前未執行,且已針對動態埠進行設定。 啟動實例之後,值欄位會反映實例目前使用的動態埠。