凌峰创科服务平台

SQL 2012无法连接服务器,原因何在?

第一步:检查服务器端状态(最基本)

在客户端尝试连接之前,首先要确认 SQL Server 服务本身是否正在运行。

SQL 2012无法连接服务器,原因何在?-图1
(图片来源网络,侵删)
  1. 登录到 SQL Server 服务器(即安装了 SQL Server 2012 的那台物理机或虚拟机)。
  2. 打开 SQL Server 配置管理器
    • 你可以在“开始”菜单中搜索它,或者通过 SQL Server 安装中心 -> 工具 -> SQL Server 配置管理器 来打开。
  3. 检查 SQL Server 服务状态
    • 在左侧导航栏中,展开“SQL Server 网络配置”。
    • 在中间窗口中,找到你的 SQL Server 实例(通常是 MSSQLSERVER,如果命名实例则可能是 SQLEXPRESS 或你自定义的名字)。
    • 右键点击它,选择“属性”。
    • 在“服务”选项卡中,检查“启动类型”是否为“自动”,“状态”是否为“正在运行”
    • 如果没有运行,右键点击并选择“启动”,如果启动失败,检查 Windows 的事件查看器(应用程序日志)以获取错误信息。

第二步:检查网络配置(最常见原因)

如果服务正在运行但仍然无法连接,99% 的情况是网络配置问题。

  1. 在 SQL Server 配置管理器中检查 TCP/IP 协议是否启用

    • 同样在“SQL Server 网络配置”下,找到你实例的 协议MSSQLSERVER 的协议)。
    • 确保右键点击 TCP/IP,并选择“启用”,如果它是“已禁用”状态,客户端将无法通过 TCP/IP(这是最常用的网络方式)连接。
    • 重要:启用后,需要重启 SQL Server 服务才能生效,右键点击你的 SQL Server 实例,选择“重新启动”。
  2. 检查 TCP/IP 端口

    • 双击 TCP/IP 协议,进入“属性”。

      SQL 2012无法连接服务器,原因何在?-图2
      (图片来源网络,侵删)
    • 切换到“IP 地址”选项卡。

    • 你会看到多个 IP 地址条目(IPAll, IP1, IP2... IPv4, IPv6)。

    • 关键点 - TCP 动态端口

      • 找到最下面的 IPAll
      • 检查 “TCP 动态端口” 是否为空,如果为空,说明 SQL Server 会随机选择一个高端口(如 49165, 50132 等)进行监听,这会导致客户端连接时不知道具体该用哪个端口。
      • 解决方案:在 “TCP 动态端口” 中清空,然后在 “TCP 端口” 中指定一个静态端口号,最常用的是 1433
    • 注意:如果服务器有多个 IP 地址,你需要为每个想监听的 IP 地址(如 IP1, IP2)的 “TCP 端口” 也设置成相同的静态端口(如 1433),并将 “已启用” 设置为 “是”。

      SQL 2012无法连接服务器,原因何在?-图3
      (图片来源网络,侵删)

第三步:检查 SQL Server 身份验证模式

SQL Server 有两种身份验证模式:Windows 身份验证混合模式

  1. 检查当前模式

    • 在服务器上,打开 SQL Server Management Studio (SSMS)
    • 连接到你的 SQL Server 实例(如果本地连接没问题,这里肯定能连上)。
    • 在对象资源管理器中,右键点击服务器名称,选择“属性”。
    • 切换到“安全性”选项卡。
    • 查看“服务器身份验证”部分,如果选择的是“Windows 身份验证模式”,那么使用 SQL Server 用户名和密码(如 sa)的连接请求将会被拒绝。
  2. 解决方案(如果需要使用 SQL 账户)

    • 选择“SQL Server 和 Windows 身份验证模式”。
    • 点击“确定”。
    • 必须重启 SQL Server 服务使新设置生效。
    • 确保 sa 账户没有被禁用且设置了密码,在 SSMS 中,展开“安全性” -> “登录名”,右键点击 sa,选择“属性”,检查“状态”选项卡,确保“登录已启用”并设置了密码。

第四步:检查 Windows 防火墙

防火墙是阻止外部连接的“门卫”。

  1. 检查防火墙规则

    • 在服务器上,打开“控制面板” -> “Windows Defender 防火墙” -> “高级设置”。
    • 在左侧,点击“入站规则”。
    • 在右侧列表中,查找名为 “SQL Server” 或 “SQL Server 的 TCP” 的规则。
    • 确保该规则的“操作”是“允许连接”,配置文件”适用于你当前的网络类型(域、专用、公用)。
  2. 快速解决方案(临时测试)

    • 为了排查是否是防火墙问题,你可以临时禁用 Windows Defender 防火墙进行测试。
    • 警告:在生产环境中,禁用防火墙有安全风险,测试完毕后必须立即重新启用!

第五步:检查客户端连接字符串

如果以上服务器端配置都正确,问题可能出在客户端的连接方式上。

一个常见的错误:在客户端使用 服务器名\实例名 的格式连接,但服务器上实例可能没有正确配置为“监听”。

  1. 使用正确的服务器名称

    • 默认实例:SQL Server 安装为默认实例,客户端只需连接服务器的计算机名或 IP 地址即可,168.1.100
    • 命名实例:如果安装为命名实例(如 SQL2012),客户端需要使用 计算机名\实例名IP地址\实例名168.1.100\SQL2012
  2. 指定端口号

    • 如果你在服务器上设置了静态端口(如 1433),可以在客户端连接字符串中明确指定,168.1.100,1433
    • 如果没有设置静态端口,你需要先通过服务器端的 SQL Server 配置管理器 或查询系统视图 sys.tcp_endpoints 来确认实际监听的端口,然后在客户端使用 IP地址,端口号 的格式连接。

第六步:使用 SQL Server 配置管理器进行客户端连接测试

这是一个非常强大的工具,可以帮你精确定位问题。

  1. 客户端机器上安装 SQL Server 2012 的客户端工具(包括 SQL Server 配置管理器)。
  2. 打开客户端的 SQL Server 配置管理器
  3. 在左侧导航栏中,展开“SQL Native Client 11.0 配置”(或你安装的版本)。
  4. 点击“客户端协议”。
  5. 在右侧窗口中,双击“TCP/IP”。
  6. 在“常规”选项卡中,输入你的服务器名称(格式见第五步)。
  7. 点击“确定”。
  8. 现在尝试使用 SSMS 连接,如果配置正确,这会强制客户端使用你指定的协议和服务器进行连接,有助于绕过一些 DNS 或别名解析问题。

第七步:使用 telnetTest-NetConnection 测试网络连通性

这是验证网络是否通的最终手段。

  1. 在客户端机器上打开命令提示符 (CMD) 或 PowerShell

  2. 使用 telnet(如果未安装,需先启用或安装)

    telnet <服务器IP地址> <端口号>

    telnet 192.168.1.100 1433

    • 如果成功:屏幕会变黑,光标闪烁,表示网络和端口是通的。
    • 如果失败:会提示 “Could not open connection to the host...”,说明网络不通或端口被阻止。
  3. 使用 PowerShell(推荐,现代系统自带)

    Test-NetConnection -ComputerName <服务器IP地址> -Port <端口号>

    Test-NetConnection -ComputerName 192.168.1.100 -Port 1433

    • 如果成功:会显示 TcpTestSucceeded : True
    • 如果失败:会显示 TcpTestSucceeded : False,并给出 RemoteAddressRemotePort 的信息,帮助你定位问题。

排查流程清单

当你遇到“无法连接到服务器”时,请按以下顺序检查:

  1. [服务器端] SQL Server 服务是否正在运行?(配置管理器)
  2. [服务器端] TCP/IP 协议是否已启用?(配置管理器 -> 协议)
  3. [服务器端] 是否设置了静态 TCP 端口(如 1433)而不是动态端口?(配置管理器 -> TCP/IP 属性 -> IPAll)
  4. [服务器端] 是否启用了混合身份验证模式,sa 账户已启用?(SSMS -> 服务器属性 -> 安全性)
  5. [服务器端] Windows 防火墙是否阻止了 SQL 端口的入站连接?(防火墙高级设置)
  6. [客户端] 连接字符串中的服务器名、实例名和端口号是否正确?
  7. [网络] 在客户端上使用 telnetTest-NetConnection 测试到服务器 IP 和端口的连通性。

按照这个流程,绝大多数连接问题都能被解决,祝你成功!

分享:
扫描分享到社交APP
上一篇
下一篇