分層排查路徑
- 物理連通:
ping <ServerIP> 成功 → 網路通;失敗 → 檢查網卡、交換機、路由、VPN、防火牆封鎖 ICMP。
- 埠連通:
telnet <ServerIP> 1433 (預設埠) → 閃爍游標 = 成功;「無法開啟連線」 → 進入第 3 步。
- 伺服器端服務與協議:
- SQL Server 服務是否運行 (
net start mssqlserver)。
- 「伺服器網路實用程式」→ 啟用 **TCP/IP**,檢查埠號 = 1433,**未勾選「隱藏伺服器」**。
- 若 OS 打 SP2+,Windows 防火牆需開放 1433 輸入規則 (或暫時關閉測試)。
netstat -an 確認 0.0.0.0:1433 LISTENING;否則打 SP3+ 熱修補。
- 客戶端協議:「用戶端網路實用程式」→ 啟用 TCP/IP,預設埠 1433 與伺服器一致。
- 連線測試:查詢分析器 (超時 15 秒) 優於企業管理器 (預設 4 秒);工具 → 選項 → 連線 → 調大登入逾時。
- 驗證模式陷阱:錯誤「用戶登入失敗」多因伺服器設為 **「僅 Windows 驗證」**。修正:企業管理器 → 伺服器屬性 → 安全性 → **「SQL Server 和 Windows」** → 重啟服務。或登錄表
HKLM\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode = 2 (混合模式)。
四大經典錯誤與對策
| 錯誤訊息 | 核心原因 | 關鍵排查 |
| SQL Server 不存在或存取被拒 | IP/名稱錯誤、協議未啟用、防火牆、DNS | ping → telnet → 伺服器/用戶端網路實用程式 → hosts/DNS |
| 無法連線,用戶 xxx 登入失敗 | 僅 Windows 驗證模式 | 改混合模式、重啟服務、補齊 BUILTIN\Administrators 登入 |
| 連線逾時 | 慢速鏈路、預設逾時太短 | 調大 EM/QA 登入逾時 (建議 20-30 秒) |
| Named Pipes 成功但 TCP 失敗 | 協議順序/預設協議設定 | 用戶端/伺服器網路實用程式調整協議順序;註冊表 ProtocolOrder |
協議順序註冊表鍵值 (進階)
-- 用戶端
HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\SuperSocketNetLib\ProtocolOrder
-- 伺服器端
HKLM\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\ProtocolOrder
-- 值範例 (TCP/IP 優先):
hex(7):74,00,63,00,70,00,00,00,00,00
最佳實踐清單
- 生產環境**僅開放 TCP/IP**,停用 Named Pipes/VIA/Shared Memory (本機除外)。
- 非預設埠 (如 2433) 需在用戶端別名或連線字串顯式指定
Server=IP,Port。
- 叢集/命名實例:SQL Browser 服務必須運行 (UDP 1434)。
- 定期掃描
sys.dm_exec_connections 審計異常來源 IP。