我正在尝试连接到一台机器上的 SQL 实例(默认实例)。当使用机器的 IP 时,它会连接到该机器。使用该机器上的机器名称,您可以建立与 SQL 实例的连接,但使用另一台 PC 上的机器名称则无法建立连接。并给出错误
A network-related or instance-specific error occurred while establishing a connection to SQL Server. ... (Microsoft Server, Error: 10060)
我尝试建立连接的计算机可以通过 IP 和名称 ping 具有 SQL 实例的计算机。为什么会出现这种情况?我该如何修复?
编辑:ping 名称确实解析了正确的 IP。ping FQDN 也可以正常工作。
答案1
[原文]您用于连接服务器的 DNS 名称可能未解析为托管实例的 IP。您可以使用 nslookup 解析名称并验证它是否解析为您在 SQL 服务器上配置的实例 IP 地址。
除此之外,tas @mrdenny 提到,可能存在基于网络的防火墙,或者基于主机的 [/original]
编辑1:看到了关于按名称 ping 的部分...您正在 ping 的名称实际上是否解析为托管 SQL 实例的服务器?
编辑2:您创建的命名实例可能配置为使用唯一的不同的侦听器的 TCP 端口。基于 IP 的侦听器可能位于默认端口上,但命名实例可能正在侦听下一个端口或其他任意定义的端口。
另外,在 SQL 配置管理器中,验证命名实例服务是否正在运行...
答案2
听起来好像防火墙已启用,或者 SQL Server 未配置为允许远程连接。
防火墙可以通过控制面板进行配置。SQL Server 可以通过 SQL Server 配置管理器进行配置,以支持远程连接。
一旦您确认 SQL 正在监听 TCP 端口,您就可以通过从客户端计算机 telnet 到端口 1433 上的 SQL 端口号,轻松地测试它是否是防火墙。
答案3
经过进一步调查,问题的原因是机器名称作为别名添加到正确机器的 IP 上,但监听端口 2305 而不是 1433。将其更改为 1433 即可解决问题。
答案4
这看起来像是一个名称解析问题。
您说您可以使用其名称 ping SQL 服务器;好的,但请仔细检查这一点。
尝试 ping SQL 服务器的 FQDN(servername.domain.com
不仅servername
限于此)。这有效吗?它实际上是 ping 服务器的 IP 地址,还是 ping 另一个 IP 地址?
然后,尝试 ping 服务器的名称,但不带域后缀(因此,servername
仅带域后缀)。这有效吗?它会 ping 服务器的 IP 地址吗?它会自动解析为服务器的 FQDN(servername.domain.com
),还是保持您请求的状态(servername
)?
这里有几个可能的问题:要么名称映射到 DNS 中的错误服务器,要么 DNS 不起作用并且使用 NetBIOS 来解析名称(这也可能映射到错误的服务器);上述测试应该可以澄清这一点。请尝试一下,然后发布您的结果。