共用方式為


如何檢查 SQL Server 是否在動態埠或靜態埠上接聽

本文討論如何判斷您的Microsoft SQL Server 具名實例是否接聽動態埠與靜態埠。 當您針對與 SQL Server 相關的不同連線問題進行疑難解答時,這項資訊會很有説明。

根據預設,SQL Server 具名實例會設定為在動態埠上接聽。 它會從作業系統取得可用的埠。 您也可以設定 SQL Server 具名實例,以在特定埠啟動。 這稱為靜態埠。 如需 SQL Server 內容中靜態和動態埠的詳細資訊,請參閱 靜態與動態埠

使用下列程式來判斷 SQL Server 具名實例是否正在接聽動態埠與靜態埠。

選項 1:使用 SQL Server 組態管理員

  1. [SQL Server 組態管理員] 中,依序展開 [SQL Server 網络組態]、[實例名稱通訊協定],然後按兩下 [TCP/IP]。

  2. 在 [TCP/IP 屬性] 中,選取 [通訊協定]。

  3. 檢查 [ 全部 接聽] 設定中的值。 如果設定為 [是],請移至步驟 4。 如果設定為 [否],請移至步驟 6。

  4. 移至 [IP 位址],然後捲動至 [TCP/IP 屬性] 頁面底部

  5. 檢查IP All中的值,並使用下表來判斷具名實例是否在動態或靜態埠上接聽。

    TCP 動態連接埠 TCP 連接埠 使用動態或靜態埠的 SQL Server 實例?
    Blank Blank 動態連接埠
    <Number> Blank 動態埠 - <Number> 是 SQL Server 目前正在接聽的動態埠
    <Number1> <Number2> 同時接聽動態埠 <Number1> 和靜態埠 <Number2>
  6. 切換至 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

  1. 在 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
    
  2. 在輸出中,檢查 SQL Server 實例之 ListenOnAllIPs 數據行中的值(請參閱該數據列的 ServerInstance 中的對應值)。 如果值設定為 1,請移至步驟 3。 如果設定為 0,請移至步驟 4。

  3. 掃描輸出中是否有實例的 DisplayName 資料行中有任何 IP 位址項目的數據列,或檢查該數據列的 TcpDynamicPortsTcpPort 值。 然後使用下表來判斷具名實例是否在動態或靜態埠上接聽。

    TCP 動態連接埠 TCP 連接埠 使用動態或靜態埠的 SQL Server 實例?
    Blank Blank 動態連接埠
    <Number> Blank 動態埠 - <Number> 是動態埠 SQL 目前正在接聽
    <Number1> <Number2> 同時接聽動態埠 <Number1> 和靜態埠 <Number2>
  4. 請注意,數個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 表示具名實例目前未執行,且已針對動態埠進行設定。 啟動實例之後,值欄位會反映實例目前使用的動態埠。

另請參閱