雖然 SQL Server 2000 已停止支援,但仍有舊系統運行於此版本。本文提供系統性的遠端連線故障排查流程,涵蓋網路、通訊協定、防火牆、服務、補丁五大層面。
ping
telnet 1433
# 或 PowerShell
Test-NetConnection -ComputerName -Port 1433
| 檢查項目 | 操作方法 | 預期狀態 |
|---|---|---|
| SQL Server 服務啟動 | 服務管理器 / net start MSSQLSERVER | Running |
| TCP/IP 通訊協定啟用 | 「伺服器網路公用程式」→ 啟用的協定含 TCP/IP | 已啟用 |
| TCP/IP 連接埠設定 | TCP/IP 屬性 → 預設連接埠 1433、未勾選「隱藏伺服器」 | Port=1433, Hide=No |
| 防火牆規則 | Windows 防火牆/第三方防火牆 → 入站規則允許 TCP 1433 | 允許 (測試可暫時關閉) |
| SP3+ 修補程式 | 查詢分析器 SELECT @@VERSION → 版本號 ≥ 8.00.760 (SP3) | 已修補 |
| 埠偵聽確認 | 伺服器 netstat -an | findstr 1433 → 顯示 0.0.0.0:1433 LISTENING | LISTENING |
隱藏伺服器陷阱: 勾選「隱藏伺服器」會將 TCP 預設埠隱性改為 2433,客戶端連線字串須明確指定 Port=2433 或取消勾選。
test.udl → 提供者選 Microsoft OLE DB Provider for SQL Server → 輸入 IP、帳號、密碼 → 「測試連線」Server=IP,Port;Database=DB;User ID=sa;Password=pwd;Network Library=dbmssocn (dbmssocn 強制 TCP/IP)param([string]$ServerIP, [int]$Port=1433)
Write-Host "=== 1. ICMP Ping ==="
Test-Connection -ComputerName $ServerIP -Count 2 -Quiet | ForEach-Object { Write-Host "Ping: $_" }
Write-Host "=== 2. TCP Port ==="
$tcp = Test-NetConnection -ComputerName $ServerIP -Port $Port
Write-Host "TcpTestSucceeded: $($tcp.TcpTestSucceeded)"
Write-Host "RemoteAddress: $($tcp.RemoteAddress):$($tcp.RemotePort)"
Write-Host "=== 3. SQL Version (需遠端 RPC 啟用) ==="
try {
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Server=$ServerIP,$Port;Database=master;User ID=sa;Password=YOUR_PWD;Connect Timeout=5"
$conn.Open()
$cmd = $conn.CreateCommand()
$cmd.CommandText = "SELECT @@VERSION"
$ver = $cmd.ExecuteScalar()
Write-Host "SQL Version: $ver"
$conn.Close()
} catch {
Write-Warning "SQL連線失敗: $($_.Exception.Message)"
}
遵循「網路 → 埠 → 服務/協定 → 防火牆 → 補丁 → 客戶端」分層排查,90% 以上 SQL Server 2000 遠端連線問題可在 15 分鐘內定位解決。記錄每次排查發現,建立團隊知識庫。