疑難排解:等候時間逾時
「已超過逾時的設定」錯誤通常發生於 SQL Server Database Engine 執行個體不在執行中、伺服器名稱輸入錯誤,或是有網路問題或防火牆時。
錯誤文字
在 SQL Server Management Studio 中,此錯誤出現的方式如下:
「無法連接到 <servername>。」
「等候時間逾時。在作業完成前就已超過逾時期間,或是伺服器沒有回應。(Microsoft SQL Server 錯誤:-2)」
可能從 sqlcmd 傳回的逾時錯誤包括:
「SQL 網路介面: 尋找指定的伺服器/執行個體時發生錯誤」
「Sqlcmd: 錯誤: Microsoft SQL Server Native Client: 用戶端無法建立連接。」
「Sqlcmd: 錯誤: Microsoft SQL Server Native Client: 登入等候時間逾時。」
"無法開啟至 SQL Server 的連接"
"建立伺服器的連接時發生錯誤。連接到 SQL Server 時,可能因為在預設的設定下 SQL Server 不允許遠端連接而引起此失敗。"
此錯誤的常見原因
原因 |
解決方案 |
---|---|
伺服器名稱輸入錯誤。 |
請以正確的伺服器名稱再試一次。 |
伺服器上的 SQL Server 服務不在執行中。 |
啟動 SQL Server Database Engine 執行個體。 |
Database Engine執行個體的 TCP/IP 通訊埠被防火牆封鎖。 |
設定防火牆,以允許存取Database Engine。 |
Database Engine 並未接聽通訊埠 1433,因為它已變更,或者因為它不是預設執行個體,且 SQL Server Browser 服務不在執行中。 |
請啟動 SQL Server Browser 服務,或是指定 TCP/IP 通訊埠編號來連接。 |
SQL Server Browser 服務正在執行中,但是 UDP 通訊埠 1434 已被防火牆封鎖。 |
請將防火牆設定為允許存取伺服器上的 UPD 通訊埠 1434,或是指定 TCP/IP 通訊埠編號加以連接。 |
用戶端和伺服器未設定為使用相同的網路通訊協定。 |
使用 SQL Server 組態管理員,確認伺服器和用戶端電腦至少有一個啟用的通訊協定是共同的。 |
網路無法將伺服器名稱解析成 IP 位址。這可以使用 PING 程式測試。 |
修復網路上的電腦名稱解析問題,或是使用伺服器的 IP 位址進行連接。這不是 SQL Server 的問題。如需協助,請參閱您的 Windows 文件集或洽詢網路管理員。 |
網路無法使用 IP 位址進行連接。這可以使用 PING 程式測試。 |
修復網路上的 TCP/IP 問題。這不是 SQL Server 的問題。如需協助,請參閱您的 Windows 文件集或洽詢網路管理員。 |
不常見的錯誤
多個伺服器 IP 位址
連接至安裝在含有多個 IP 位址之叢集或非叢集電腦上的 SQL Server 具名執行個體時,Windows Vista 或 Windows Server 2008 上的用戶端就可能會收到這則錯誤。所有 SQL Server 版本都可能會發生這個問題。
原因
連接至遠端電腦上的具名執行個體時,用戶端會使用使用者資料包通訊協定 (User Datagram Protocol,UDP) 來連接至 SQL Server 電腦或叢集上的 SQL Server Browser 服務,以便取得連接端點 (TCP 通訊埠編號或具名管道)。
Windows Vista 或 Windows Server 2008 用戶端上的防火牆不允許 UDP 的鬆散來源對應。也就是說,回應必須從查詢的相同 IP 位址傳回。如果回應並非來自原本成為目標的 IP 位址,用戶端防火牆就會卸除封包。當您嘗試連接至具有多個 IP 位址的叢集伺服器或非叢集伺服器電腦時,就可能會發生這個問題。
下表描述可能會使 UDP 封包遺失的作業系統組合。這樣便無法連接至 SQL Server 的具名執行個體,或不會在 TCP 通訊埠 1433 上接聽的預設 SQL Server 執行個體。
用戶端作業系統 |
執行 SQL Server 的作業系統 |
SQL Server 2008 結果 |
SQL Server 2005 結果 |
---|---|---|---|
Windows XP 或 Windows Server 2003 |
Windows XP 或 Windows Server 2003 |
未遺失 UDP 封包。 |
未遺失 UDP 封包。 |
Windows XP 或 Windows Server 2003 |
Windows Vista 或 Windows Server 2003 |
未遺失 UDP 封包。 |
未遺失 UDP 封包。 |
Windows Vista 或 Windows Server 2008 |
Windows XP 或 Windows Server 2003 |
遺失 UDP 封包。無法連接。 |
遺失 UDP 封包。無法連接。 |
Windows Vista 或 Windows Server 2008 |
Windows Vista 或 Windows Server 2008 (x86、IA64) |
未遺失 UDP 封包。 |
遺失 UDP 封包。無法連接。 |
Windows Vista 或 Windows Server 2008 |
Windows Vista 或 Windows Server 2008 (x64) |
遺失 UDP 封包。無法連接。 |
遺失 UDP 封包。無法連接。 |
解決方案
若要解決這個問題,請執行下列其中一個動作:
在連接字串中,指定 TCP 通訊埠編號或具名管道名稱當做伺服器名稱的一部分。
在用戶端電腦上的 [具有進階安全性的 Windows 防火牆] 中,建立例外狀況。
注意 防火牆中的例外狀況可能會讓電腦或網路更容易遭受惡意使用者或惡意軟體 (例如病毒) 的攻擊。雖然我們不建議您採用這種解決方法,但是仍然提供這項資訊,以便您可以在替代方案不實用的情況下,自行斟酌實作此解決方法。
例外狀況可以是下列其中一種:
針對連接至 SQL Server 的應用程式,加入例外狀況規則。
加入允許 SQL Server 電腦或叢集之所有可能 IP 位址之流量的傳入規則。
土耳其文或阿澤里文
當現行語言為土耳其文或阿澤里文,且伺服器名稱包含 "I" 時,連接嘗試可能會失敗。若要避免這個問題,請使用 IP 位址來連接至伺服器。如果 "I" 是在執行個體名稱中,請在連接時指定 TCP/IP 通訊埠編號。若要連接到特定通訊埠,請使用別名。
[!附註]
若要協助解決連接問題,請使用教學課程<教學課程:Database Engine 使用者入門>。