建立與 SQL 伺服器的連線時,發生與網路相關的錯誤或是執行個體特有的錯誤

適用于:SQL Server

連接到 SQL Server 實體時,您可能會遇到下列一或多個錯誤訊息。 本文提供一些步驟來協助您針對這些錯誤進行疑難排解,這些錯誤是根據從簡單到複雜的問題所排序。

錯誤訊息

完整的錯誤訊息會根據應用程式和伺服器環境中所使用的用戶端連結庫而有所不同。 您可以檢查下列詳細資料,以查看您是否遇到下列其中一個錯誤訊息:

提供者:命名管道提供者,錯誤:40 - 無法開啟與 microsoft SQL Server SQL Server (連線,錯誤:53) 建立與 SQL 伺服器的連線時,發生與網路相關的錯誤或是執行個體特有的錯誤 找不到或無法存取伺服器。 確認實例名稱正確,且 SQL Server 已設定為允許遠端連線。
提供者:具名管道提供者,錯誤:40 - 無法開啟與 SQL Server 的連線 (Microsoft SQL Server,錯誤:53)
提供者:TCP 提供者,錯誤:0 - 不知道這類主機。 (Microsoft SQL Server, Error: 11001)

提供者:SQL 網路介面,錯誤:26 - 尋找指定的伺服器/實例時發生錯誤 建立與 SQL 伺服器的連線時,發生與網路相關的錯誤或是執行個體特有的錯誤 找不到或無法存取伺服器。 確認實例名稱正確,且 SQL Server 已設定為允許遠端連線。
提供者:SQL 網路介面,錯誤:26 - 尋找指定的伺服器/實例時發生錯誤

登入逾時已過期 SQL Server Native Client 資料連結錯誤
[Microsoft SQL Server Native Client 10.0]: 登入逾時已過期
[Microsoft SQL Server Native Client 10.0]:建立與 SQL Server 的連線時,發生網路相關或實例特定的錯誤。 找不到或無法存取伺服器。 檢查實例名稱是否正確,以及 SQL Server 是否設定為允許遠端連線。 如需詳細資訊,請參閱《SQL Server 線上叢書》。
[Microsoft SQL Server Native Client 10.0]:SQL Server 網络介面:尋找指定的伺服器/實例時發生錯誤 [xFFFFFFFF]。

線上嘗試失敗,因為連線方在一段時間后未正確回應,或已建立的連線失敗,因為連線的主機無法回應 建立與 SQL 伺服器的連線時,發生與網路相關的錯誤或是執行個體特有的錯誤 找不到或無法存取伺服器。 確認實例名稱正確,且 SQL Server 已設定為允許遠端連線。
提供者:TCP 提供者,錯誤: 0
連線嘗試失敗,因為連線方在一段時間後未正確回應,或已建立的連線失敗,因為連線的主機無法回應。
Microsoft SQL Server, 錯誤:10060

提供者:命名管道提供者,錯誤:40 - 無法開啟與 SQL Server 的連線 建立與 SQL 伺服器的連線時,發生與網路相關的錯誤或是執行個體特有的錯誤 找不到或無法存取伺服器。 確認實例名稱正確,且 SQL Server 已設定為允許遠端連線。
提供者:具名管道提供者,錯誤:40 - 無法開啟連線至 SQL Server
Microsoft SQL Server, 錯誤:53
找不到網路路徑

[Microsoft][SQL Server Native Client 11.0]TCP 提供者:無法進行連線,因為目標計算機主動拒絕 SQL Server Native Client 資料連結錯誤
[Microsoft][SQL Server Native Client 11.0]TCP 提供者:無法進行連線,因為目的電腦主動拒絕連線。
[Microsoft][SQL Server Native Client 11.0] 登入逾時已過期。
[Microsoft][SQL Server Native Client 11.0] 建立與 SQL 伺服器的連線時,發生與網路相關的錯誤或是執行個體特有的錯誤 找不到或無法存取伺服器。 檢查實例名稱是否正確,以及 SQL Server 是否設定為允許遠端連線。 如需詳細資訊,請參閱《SQL Server 線上叢書》。

「SQL Server不存在或拒絕存取」

此錯誤通常表示用戶端找不到 SQL Server 實例。 這個問題是因為至少下列其中一個問題存在而發生:

  • 有裝載 SQL Server 的電腦名稱不正確。
  • 執行個體無法解析正確的 IP。
  • 未正確指定 TCP 連接埠號碼。

注意事項

如需針對高可用性案例中的連線問題進行疑難排解,請參閱下列文章:

Windows 錯誤 233:管道的另一端沒有進程

完整的訊息如下:

已成功與伺服器建立連線,但在登入流程期間發生錯誤。 (提供者:共用記憶體提供者,錯誤:0 - 管道的另一端沒有進程。) (Microsoft SQL Server,錯誤:233)

此訊息表示 SQL Server 不會接聽共用記憶體或命名管道通訊協定。

收集疑難排解錯誤的資訊

建議您先使用下列其中一個選項收集本節中所列的資訊,再繼續進行錯誤疑難解答的實際步驟。

選項 1:使用 SQL 檢查工具來收集必要的資訊

如果您可以在本機登入 SQL Server 計算機,並具有系統管理員存取權,請使用 SQLCHECK。 此工具提供在一個檔案中進行疑難排解所需的大部分資訊。 如需使用工具及其收集資訊的詳細資訊,請檢閱工具的首頁。 您也可以參閱建議的 必要條件 和檢查清單頁面。

選項 2:使用下列程序個別收集資料

從 Configuration Manager 取得執行個體名稱

在由裝載 SQL Server 執行個體的伺服器上,使用 SQL Server Configuration Manager 來驗證執行個體名稱:

注意事項

安裝 SQL Server 時,電腦上會自動安裝 Configuration Manager。 啟動 Configuration Manager 的指示會因 SQL Server 和 Windows 的版本而稍有不同。 如需版本特定的詳細資料,請參閱 SQL Server Configuration Manager

  1. 登入有裝載 SQL Server 執行個體的電腦。

  2. 啟動 SQL Server 組態管理員。

  3. 在左窗格中選取 [SQL Server 服務]

  4. 在右窗格中,確認資料庫引擎執行個體的名稱。

    • SQL SERVER (MSSQLSERVER) 表示 SQL Server 的預設執行個體。 默認實例的名稱是 <計算機名稱>。
    • SQL SERVER (<實例名稱>) 表示 SQL Server 的具名實例。 具名實例的名稱是 <計算機名稱>\<實例名稱>。

取得伺服器的 IP 位址。

您可以使用下列步驟來取得有裝載 SQL Server 執行個體之電腦的 IP 位址。

  1. 在 [開始] 功能表,選取 [執行]。 在 [執行] 視窗中,輸入 cmd,然後按一下 [確定]

  2. 在 [命令提示字元] 視窗中輸入 ipconfig/all,並按下 [Enter]。 記下 IPv4 位址和 IPv6 位址。

    注意事項

    SQL Server 可以使用 IP 第 4 版通訊協定或 IP 第 6 版通訊協定進行連線。 您的網路可以允許其中之一或同時允許兩者。

取得執行個體的 TCP 連接埠

在大部分情況下,您會使用 TCP 通訊協定連線到另一部電腦上的資料庫引擎。 若要取得執行個體的 TCP 連接埠,請依照下列步驟執行:

  1. 在執行 SQL Server 的電腦上使用 SQL Server Management Studio,並連接到 SQL Server 的執行個體。 在[物件總管] 中,依序展開 [管理]、[SQL Server 記錄],然後按兩下目前的記錄檔。

  2. 在 [記錄檔檢視器] 中,選取工具列上的 [篩選]。 在 [訊息包含文字] 方塊中,輸入 伺服器正在接聽、選取 [套用篩選],然後選取 [確定]

  3. 應該會列出「伺服器正在 ['any' <ipv4> 1433]」 上接聽的訊息。

    此訊息表示 SQL Server 的執行個體正在接聽此電腦上的所有 IP 位址, (IP 第 4 版) 和 TCP 連接埠 1433。 (TCP 連接埠 1433 通常是 Database Engine 或預設實例 SQL Server 使用的埠。只有一個 SQL Server 實例可以使用此埠。如果已安裝多個 SQL Server 實例,某些實例必須使用其他埠號碼。) 記下您嘗試連線的 SQL Server 實例所使用的埠號碼。

    注意事項

    • IP 位址 127.0.0.1 可能已列出。 它稱為回送介面卡位址。 只有同一部電腦上的程序可以使用 IP 位址進行連線。
    • 您也可以使用文字編輯器來檢視 SQL Server 錯誤記錄檔。 預設情況下,錯誤記錄檔位於 Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOGERRORLOG.n 檔案。 如需詳細資訊,請參閱檢視 SQL Server 錯誤紀錄檔

步驟 1:確認執行個體正在執行

選項 1:使用 SQLCHECK 輸出檔案

  1. 搜尋「SQL Server 資訊」的 SQLCHECK 輸出檔案。
  2. 在標題為「相關服務」一節中,於 [名稱] 和 [執行個體] (用於具名執行個體) 欄底下尋找 SQL Server 執行個體,並使用 [已啟動] 欄檢查其狀態。 如果值為 True,則會啟動服務。 否則表示服務目前未執行。
  3. 如果服務未執行,請使用 SQL Server Management Studio、SQL Server Configuration Manager、PowerShell 或 Services 小程式啟動服務

選項 2:使用 SQL Server Configuration Manager

若要確認執行個體正在執行,請選取 SQL Server Configuration Manager 中的 [SQL Server Services],然後檢查 SQL Server 執行個體的符號。

  • 綠色箭號表示執行個體正在執行。
  • 紅色方塊表示執行個體已停止。

如果執行個體已停止,請以滑鼠右鍵按一下執行個體,然後選取 [啟動]。 然後,伺服器執行個體會啟動,而指標會變成綠色箭號。

選項 3:使用 PowerShell 命令

您可以在 PowerShell 中使用下列命令來檢查系統上 SQL Server 服務的狀態:

Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -like "sql server*"}

您可以使用下列命令來搜尋特定字串的錯誤記錄檔:「SQL Server 現在已準備好進行用戶端連線。 這是一則資訊訊息;不需要進行任何使用者動作。」:

Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog | Select-String "SQL Server is now ready for client connections."

步驟 2:確認 SQL Server 瀏覽器服務正在執行

注意事項

只有針對具名執行個體的連線問題進行疑難排解時,才需要此步驟。

選項 1:使用 SQLCHECK 輸出檔案

  1. 搜尋「SQL Server 資訊」的 SQLCHECK 輸出檔案。
  2. 在標題為「感興趣的服務」一節中,在 [名稱] 欄中搜尋 SQLBrowser,並使用 [已啟動] 欄檢查其狀態。 如果值為 True,就會啟動服務。 否則表示服務目前未執行,您必須啟動它。 如需詳細資訊,請參閱啟動、停止、暫停、繼續、重新啟動 SQL Server 服務

選項 2:使用 SQL Server Configuration Manager

若要連線到具名執行個體,則必須已經執行 SQL Server Browser 服務。 在 SQL Server Configuration Manager 中,找出 SQL Server Browser 服務,並確認其正在執行中。 如果未執行,請啟動服務。 預設執行個體不需要 SQL Server 瀏覽器服務。

如需在您的環境中使用 SQL Server Browser 服務的詳細資訊,請參閱 SQL Server Browser 服務

如需停止和啟動 SQL 服務的詳細資訊,請參閱啟動、停止、暫停、繼續、重新啟動 SQL Server 服務

注意事項

如果您無法讓 SQL Server 瀏覽器服務在您的環境中執行,請參閱在不需要 SQL Server 瀏覽器服務的情況下連線到 SQL Server 具名執行個體

步驟 3:驗證連接字串中的伺服器名稱

當連接字串中指定了不正確的伺服器名稱時,您通常會遇到錯誤。 請確定伺服器名稱符合您在先前步驟中擷取的名稱。

注意事項

如果您使用 SQLCHECK 工具,請在輸出檔案的 [計算機資訊] 區段中檢閱 NetBios 名稱/FQDN 值。

步驟 4:在用戶端電腦上驗證別名

當您使用替代名稱連線到 SQL Server,或在網路中遇到名稱解析問題時,通常會在用戶端環境中使用別名。 它們是使用 SQL Server Configuration Manager用戶端網路公用程式所建立。 不正確的別名可能會導致應用程式的連線連接到錯誤的伺服器,進而導致失敗。 請使用以下方法,檢查不正確的別名。 您也可以使用用戶端電腦上的工具 (例如 SQLCHECK),檢查用戶端電腦上的別名和各種其他連線相關設定。

注意事項

下列選項僅適用于使用 SQL Server Native Client 連線到 SQL Server 的應用程式。

選項 1:使用 SQLCHECK 輸出檔案

  1. 在 SQLCHECK 輸出檔案中,搜尋字串 SQL 別名。 (此字串會位於檔案的 [用戶端安全性和驅動程式資訊] 區段內)
  2. 檢閱資料表中的項目。 如果沒有別名,電腦上就不會有別名。 如果有項目,請檢閱資訊,以確保伺服器名稱和連接埠號碼設定為正確的值。

範例輸出:
SQL 別名:

Alias Name   Protocol   Server Name     Port   32-bit 

----------   --------   ------------    ----   ------ 

prodsql      TCP        prod_sqlserver  1430      

輸出會指出 是prodsql在埠 1430 上執行的 SQL Server prod_sqlserver 別名。

選項 2:檢查 SQL Server Configuration Manager 中的別名

  1. 在 [SQL Server Configuration Manager] 中,展開 [SQL Server Native Client 設定],然後選取 [別名]

  2. 檢查是否已為您嘗試連線的伺服器定義任何別名。

    若已有別名,請依照下列步驟執行:

    1. 開啟別名的 [屬性] 窗格。
    2. 重新命名 [別名名稱] 欄位中的值 (例如,如果您的伺服器名稱為 MySQL,請將它重新命名為 MySQL_test) ,然後重試連線。 如果連線正常運作,則您的別名不正確,而且可能來自不再需要的舊設定。 如果連線無法運作,請將別名重新命名回其原始名稱,然後移至下一個步驟。
    3. 檢查別名的連線參數,並確定它們正確無誤。 下列常見案例可能會導致連線問題:
      • [伺服器] 欄位的 IP 位址不正確。 請確定 IP 位址與 SQL Server 錯誤記錄檔中的項目相符。
      • [伺服器] 欄位中的伺服器名稱不正確。 例如,您的伺服器別名指向正確的伺服器名稱。 不過,如果伺服器名稱參數的值不正確,連線將會失敗。
      • (假設您使用具名管道別名) 管道名稱格式不正確。
        • 連接到名為 Mydefaultinstance 的預設實例時,管道名稱應該是 \\Mydefaultinstance\pipe\sql\query
        • 連接到具名實例 MySQL\Named 時,管道名稱應該是 \\MySQL\pipe\MSSQL$Named\sql\query

選項 3:檢查 SQL Server 用戶端網路公用程式中的別名

  1. 在 [執行] 命令中輸入 cliconfg.exe,以開啟 [SQL Server 用戶端網路公用程式]
  2. 遵循選項 2:檢查 SQL Server Configuration Manager 中的別名中的步驟 2。

步驟 5:驗證防火牆設定

您可以根據預設執行個體或具名執行個體來驗證防火牆設定。

注意事項

如果您在網路中使用協力廠商防火牆,則概念仍然適用。 不過,您可能必須與網路系統管理員合作,或參閱防火牆產品文件,以取得有關設定防火牆以允許與 SQL Server 通訊所需連接埠的詳細資訊。

SQL Server 的預設執行個體

預設執行個體通常會在連接埠 1433 上執行。 某些安裝也會使用 (1433 以外的) 非標準連接埠來執行 SQL 執行個體。 防火牆可能會封鎖任一連接埠。 若要進一步檢查連接埠號碼,請依照下列步驟執行:

  1. 判斷 SQL 執行個體執行所在的連接埠,請參閱 取得執行個體的 TCP 連接埠
    • 如果您的 SQL Server 設定為接聽連接埠 1433,請確定用戶端與伺服器之間的網路防火牆允許該連接埠上的流量。 檢閱設定適用于資料庫引擎存取的 Windows 防火牆,並與您的網路系統管理員合作以實作必要的解決方案。
    • 如果您 SQL Server 預設執行個體未使用 1433,請嘗試使用 <servername>,<portnumber> 格式將 SQL Server 的連接埠號碼附加至伺服器名稱,並查看其是否可運作。 例如,您的 SQL 執行個體名稱為 MySQLDefaultinstance ,且正在連接埠 2000 上執行。 將伺服器名稱指定為 MySQLServer, 2000 ,並查看其是否可運作。
      • 如果無法運作,則表示防火牆封鎖了連接埠。 您可以遵循 設定資料庫引擎存取的 Windows 防火牆 中的指示,或與網路系統管理員合作,將連接埠新增至防火牆排除清單。
      • 如果確實能運作,則表示防火牆允許透過該連接埠進行通訊。 您必須變更連線字串,才能在應用程式的連線字串中使用連接埠號碼和伺服器名稱。

SQL Server 的具名執行個體

如果您的 SQL 執行個體是具名執行個體,它可能會設定為使用動態連接埠或靜態連接埠。 在任一情況下,基礎網路程式庫會透過 UDP 埠 1434 查詢在您 SQL Server 電腦上執行的 SQL Server Browser 服務,以列舉具名實例的埠號碼。 如果用戶端與伺服器之間的防火牆封鎖此 UDP 埠,用戶端程式庫就無法判斷埠(連線的需求),而且連線會失敗。 若要檢查連線,您可以使用下列其中一種方法:

  • 方法 1:在連線字串中指定埠號碼來檢查連線。

    1. 判斷 SQL 執行個體執行所在的連接埠,請參閱 取得執行個體的 TCP 連接埠
    2. 嘗試使用格式 <servername\instancename>,<portnumber> 附加至伺服器名稱的埠號碼來連線到具名實例,並查看是否可運作。 例如,如果您的 SQL 實例名稱為 MySQL\Namedinstance ,且正在埠 3000 上執行,請將伺服器名稱指定為 MySQL\Namedinstance,3000
      • 如果確實能運作,則表示防火牆封鎖 UDP 埠 1434,或在 SQL Server 瀏覽器隱藏實例。
      • 如果無法運作,則表示下列其中一種情況:
        • 封鎖 UDP 埠 1434 或封鎖靜態埠,或同時封鎖兩者。 若要確認它是 UDP 埠還是靜態埠,請使用 Portqry
        • 實例會從 SQL Server Browser 服務中隱藏
  • 方法 2:使用 PortQryUI 工具檢查連線。

    使用 PortQryUI 工具搭配您的具名實例,並觀察產生的輸出。 您可能會看到 UDP 埠 1434 已篩選的訊息。 此訊息表示埠已在網路上遭到封鎖。 如需如何使用工具的指示,請參閱搭配使用 PortQryUI 工具與 SQL Server

    檢查 SQL Server 實例是否正在接聽動態或靜態連接埠。 然後使用與您的案例相關的下列方法。 如果您不確定,請參閱如何檢查 SQL Server 是否正在接聽動態埠或靜態埠

    • 案例 1:動態埠。 在此情況下,請確定已啟動 SQL Server Browser 服務,且不會在用戶端與伺服器之間的防火牆上封鎖 UDP 埠 1434。 如果您無法執行上述任一動作,您應該將 SQL Server 實例切換至靜態埠,並使用設定伺服器接聽特定 TCP 埠中所述的程序。
    • 案例 2:靜態埠設定。 SQL Server瀏覽器未執行,或無法在防火牆上開啟 UDP 1434。 在此情況下,請務必在連接字串中指定靜態埠,並確保防火牆不會封鎖埠。 如需詳細資訊,請檢閱設定資料庫引擎存取的 Windows 防火牆

步驟 6:在 SQL Server 上驗證已啟用的通訊協定

在某些 SQL Server 安裝中,除非系統管理員手動啟用,否則不會啟用從另一部電腦到 Database Engine 的連線。 您可以使用下列其中一個選項來檢查並啟用必要的通訊協定,以允許遠端連線到 SQL Server Database Engine。

選項 1:使用 SQLCHECK 輸出檔案

  1. 搜尋 [SQL Server 實例的詳細數據] 區段的 SQLCHECK 輸出檔案,並找出 SQL Server 實例的資訊區段。

  2. 在此部分,尋找下表所列的值,以判斷是否已啟用 SQL Server 通訊協定:

    數值名稱 意義 其他資訊
    已啟用共用記憶體 可以為 true 為 false - 只會影響本機連線。 使用共用記憶體通訊協定建立有效的連接字串
    已啟用具名管道 如果為 false,則使用具名管道的本機和遠端連線都會失敗 選擇網路通訊協定
    已啟用 TCP 如果為 false,則使用 TCP/IP 的本機和遠端連線都會失敗。
    注意大部分的 SQL Server 安裝都使用 TCP/IP 作為伺服器與用戶端之間的通訊協定。
    選擇網路通訊協定
  3. 使用 SQL Server 組態管理員或 SQL Server PowerShell 來啟用必要的通訊協定。 如需詳細資訊,請參閱啟用或停用伺服器網路通訊協定

    注意事項

    啟用通訊協定之後,必須停止並重新啟動 Database Engine,變更才會生效。

選項 2:使用 SQL Server Configuration Manager

若要使用 SQL Server 組態管理員從另一部電腦啟用連線,請遵循下列步驟:

  1. 開啟 SQL Server 組態管理員。
  2. 在左窗格中,展開[SQL Server 網路組態],然後選取您要連線的 SQL Server 實例。 右窗格會列出可用的連線通訊協定。 共用記憶體 通常會啟用。 它只能從同一部電腦使用,因此大部分的安裝都會讓 共用記憶體 保持啟用狀態。 若要從另一部電腦連線到 SQL Server,請使用 TCP/IP。 如果未啟用 TCP/IP ,請以滑鼠右鍵按一下 [TCP/IP],然後選取 [啟用]
  3. 如果您變更任何通訊協定的已啟用設定,請重新啟動資料庫引擎。 在左窗格中選取 [SQL Server 服務]。 在左窗格中,以滑鼠右鍵按一下資料庫引擎的執行個體,然後選擇 [重新啟動]

步驟 7:測試 TCP/IP 連線能力

使用 TCP/IP 連線到 SQL Server 需要 Windows 建立連線。 您可以使用下列步驟,使用 ping 工具來測試 TCP 連線能力。

  1. 在 [開始] 功能表,選取 [執行]。 在 [執行] 視窗中,輸入 cmd,然後按一下 [確定]
  2. 在 [命令提示字元] 視窗中,輸入 ping 以及執行 SQL Server 之電腦的 IP 位址。 例如:
    • IPv4:ping 192.168.1.101
    • IPv6:ping fe80::d51d:5ab5:6f09:8f48%11
  3. 如果您的網路已正確設定,則 ping 會傳回 Reply from <IP address> ,後面接著一些其他資訊。 如果 ping 傳回 Destination host unreachableRequest timed out ,則表示未正確設定 TCP/IP。 此時的錯誤表示存在用戶端電腦、伺服器電腦或路由器等網路相關問題。 若要針對網路問題進行疑難排解,請參閱 TCP/IP 問題的進階疑難排解
  4. 如果使用 IP 位址進行 ping 測試成功,請測試電腦名稱是否可以解析為 TCP/IP 位址。 在用戶端電腦的 [命令提示字元] 視窗中,輸入 ping 和執行 SQL Server 的電腦名稱。 例如,ping newofficepc
  5. 如果 ping 成功傳送至 IP 位址,但 ping 到電腦名稱會傳回 Destination host unreachableRequest timed out ,您的用戶端電腦上快取的名稱解析資訊可能是舊的 (過時)。 請輸入 ipconfig /flushdns 以清除 DNS (動態名稱解析) 快取。 然後再次依名稱 ping 電腦。 當 DNS 快取為空時,用戶端電腦會檢查伺服器電腦 IP 位址的最新資訊。
  6. 如果您的網路已正確設定,則 ping 會傳回 Reply from <IP address> ,後面接著一些其他資訊。 如果您可以透過 IP 位址成功偵測伺服器電腦,但在依電腦名稱稱偵測時收到錯誤,例如 Destination host unreachableRequest timed out,則表示名稱解析未正確設定。 如需詳細資訊,請參閱如何針對基本 TCP/IP 問題進行疑難排解。 連線到 SQL Server 不需要成功的名稱解析。 不過,如果無法將電腦名稱解析為 IP 位址,則必須建立連線以指定 IP 位址。 稍後可以修正名稱解析。

注意事項

您也可以使用 Test-NetConnectionTest-Connection Cmdlet,根據電腦上安裝的 PowerShell 版本來測試 TCP 連線能力。 如需有關 PowerShell Cmdlet 的詳細資訊,請參閱 Cmdlet 概觀

步驟 8:測試本機連線

在針對另一部電腦的連線問題進行疑難排解之前,請先測試從本機安裝在執行 SQL Server 之電腦上的用戶端應用程式連線的能力。 本機連線可避免網路和防火牆發生問題。

此程式需要 SQL Server Management Studio。 如果您尚未安裝 Management Studio,請參閱下載 SQL Server Management Studio (SSMS)

如果您無法安裝 Management Studio,您可以使用 sqlcmd.exe 公用程式來測試連線。 sqlcmd.exe 隨資料庫引擎一起安裝。 如需 sqlcmd.exe 的相關資訊,請參閱 sqlcmd 公用程式

  1. 使用可存取 SQL Server 的登入,登入安裝 SQL Server 的電腦。 在安裝期間,SQL Server 需要至少將一個登入指定為 SQL Server 系統管理員。 如果您不知道系統管理員,請參閱當系統管理員被鎖定時連線到 SQL Server

  2. 在 [開始] 頁面上輸入 SQL Server Management Studio,或在舊版 Windows 的 [開始] 功能表上,選取 [所有程式],選取 [Microsoft SQL Server],然後選取 [SQL Server Management Studio]

  3. 在 [連線] 下拉式功能表上,選取 [資料庫引擎]。 在 [驗證] 方塊中,選取 [Windows 驗證]。 在 [伺服器名稱] 方塊中,輸入下列其中一種連線類型:

    連線到 類型 範例
    預設執行個體 <computer name> ACCNT27
    具名執行個體 <computer name\instance name> ACCNT27\PAYROLL

    注意事項

    從相同電腦上的用戶端應用程式連線到 SQL Server 時,會使用共用記憶體通訊協定。 共用記憶體是一種本機具名管道,因此您有時會遇到與管道相關的錯誤。

  4. 如果您此時收到錯誤,您必須先解決它,才能繼續進行。 您的登入可能未獲得連線授權。 您的預設資料庫可能遺失。

    注意事項

    您無法對問題進行疑難排解,因為某些錯誤訊息會刻意傳遞給用戶端。 這是一項安全性功能,可避免向攻擊者提供 SQL Server 的相關資訊。 若要檢視錯誤的詳細資料,請參閱 SQL Server 錯誤記錄檔。

  5. 如果您收到使用者登入失敗的錯誤 18456,《線上叢書》文章 MSSQLSERVER_18456 包含錯誤碼的其他相關資訊。 Aaron Bertrand 的部落格在 疑難排解錯誤 18456 (外部連結) 也有廣泛的錯誤碼清單。 如果您可以在 [物件總管] 的 [管理] 區段中,使用 SSMS (若無法連線) 來檢視錯誤記錄檔。 否則,您可以使用 Windows 記事本程式來檢視錯誤記錄檔。 預設位置會隨著您的版本而有所不同,而且可以在安裝期間變更。 SQL Server 2019 (15.x) 的預設位置是 C:\Program Files\Microsoft SQL Server\MSSQL15。MSSQLSERVER\MSSQL\Log\ERRORLOG

  6. 如果您可以使用共用記憶體進行連線,請使用 TCP 測試連線。 您可以在名稱之前指定 tcp: ,以強制執行 TCP 連線。 以下提供一些範例:

    連線到: 類型: 範例:
    預設執行個體 tcp:<computer name> tcp:ACCNT27
    具名執行個體 tcp:<computer name/instance name> tcp:ACCNT27\PAYROLL
  7. 如果您可以使用共用記憶體進行連線,但不能使用 TCP 進行連線,則必須修正 TCP 問題。 最有可能的問題是 TCP 未啟用。 若要啟用 TCP,請參閱步驟 6:在 SQL Server 上驗證已啟用的通訊協定

  8. 如果您的目標是使用系統管理員帳戶以外的帳戶進行連線,您可以從以系統管理員身分連線開始。 然後,嘗試使用 Windows 驗證登入或用戶端應用程式所使用的 SQL Server 驗證登入再次連線。

步驟 9:測試遠端連線

當您可以在同一部電腦上使用 TCP 進行連線後,就可以嘗試從用戶端電腦進行連線。 您可以使用任何用戶端應用程式,但為了避免複雜性,請在用戶端上安裝 SQL Server 管理工具。 安裝之後,請嘗試使用 SQL Server Management Studio。

  1. 在用戶端電腦上使用 SQL Server Management Studio,並嘗試以 IP 位址逗號連接埠號碼格式使用 IP 位址和 TCP 連接埠號碼進行連線。 例如,192.168.1.101,1433。 如果此連線失敗,表示您可能會遇到下列其中一個問題:
  2. 一旦您可以使用 IP 位址和連接埠號碼進行連線,請檢閱下列案例:
    • 如果您連接到接聽 1433 以外的任何連接埠的預設執行個體,您必須使用連接字串中的連接埠號碼,或在用戶端電腦上建立別名,以連線到預設執行個體。 SQL Server 瀏覽器服務無法列舉預設執行個體的連接埠。
    • 如果您連線到具名執行個體,請嘗試以 IP 位址反斜線執行個體名稱的格式連線到執行個體。 (例如,192.168.1.101\<instance name>。) 如果此動作無法運作,表示不會將連接埠號碼傳回給用戶端。 此問題與 SQL Server 瀏覽器服務相關,該服務會將具名執行個體的連接埠號碼提供給用戶端。 以下是解決方案:
      • 啟動 SQL Server 瀏覽器服務。 請參閱在 SQL Server Configuration Manager 中啟動瀏覽器的指引。
      • 防火牆正在封鎖 SQL Server 瀏覽器服務。 在防火牆中開啟 UDP 連接埠 1434。 返回步驟5:驗證防火牆設定一節。 請確定您開啟的是 UDP 連接埠,而不是 TCP 連接埠。
      • 路由器正在封鎖 UDP 連接埠 1434 資訊。 UDP 通訊協定 (使用者資料包通訊協定) 並非設計來通過路由器,並防止網路填入低優先順序的流量。 您可以將路由器設定為轉送 UDP 流量,也可以在每次連線時提供連接埠號碼。
      • 如果用戶端電腦使用 Windows 7、Windows Server 2008 或較新的作業系統,用戶端作業系統可能會卸除 UDP 流量,因為伺服器的回應是從所查詢的不同 IP 位址傳回。 This action is a security feature blocking "loose source mapping." For more information, see the Multiple Server IP Addresses section of the Books Online article Troubleshooting: Timeout Expired. (本文來自 SQL Server 2008 R2,但仍適用主體。您可以設定用戶端使用正確的IP位址,或在每次連線時提供埠號碼。)
  3. 當您可以使用 IP 位址 (或具名執行個體的 IP 位址和執行個體名稱) 進行連線,請嘗試使用電腦名稱 (或具名執行個體的電腦名稱和執行個體名稱) 進行連線。 將 tcp: 放在電腦名稱前面,以強制 TCP/IP 連線。 例如,針對電腦上名為 ACCNT27 的預設執行個體,請使用 tcp:ACCNT27。 針對名為 PAYROLL 的具名執行個體,在該電腦上使用 tcp:ACCNT27\PAYROLL。 如果您可以使用 IP 位址進行連線,但無法使用電腦名稱進行連線,則會有名稱解析問題。 返回步驟 7:測試 TCP/IP 連線能力一節。
  4. 當您可以使用強制 TCP 的電腦名稱進行連線時,請嘗試使用電腦名稱進行連線,而不強制使用 TCP。 例如,針對預設執行個體,只需要使用電腦名稱,例如 CCNT27。 針對具名執行個體,請使用電腦名稱和執行個體名稱,例如 ACCNT27\PAYROLL。 如果您在強制 TCP 時可以連線,但不強制 TCP 時無法連線,則用戶端可能使用另一個通訊協定,例如具名管道。 若要修正此問題,請依照下列步驟執行:
    1. 在用戶端電腦上,使用 SQL Server Configuration Manager。 在左窗格中,展開 [SQL Native Client <版本設定>],然後選取 [用戶端通訊協定]
    2. 在右窗格中,確定已啟用 TCP/IP。 如果停用 TCP/IP ,請以滑鼠右鍵按一下 [TCP/IP] ,然後選取 [啟用]
    3. 請確定 TCP/IP 的通訊協定順序小於舊版的具名管道 (或舊版本上的 VIA) 通訊協定。 一般而言,您應該將共用記憶體保留為順序 1,並將 TCP/IP 保留為順序 2。 只有當用戶端和 SQL Server 在同一部電腦上執行時,才會使用共用記憶體。 所有已啟用的通訊協定都會依序嘗試,直到其中一個通訊協定成功為止,但是當連線不在同一部電腦上時,會略過共用記憶體。

步驟 10:檢查用戶權力

如果您使用命名管道進行連線,請檢查使用者是否有登入 Windows 的許可權。 如需詳細資訊,請參閱 針對命名管道連線問題進行疑難解答

另請參閱