为什么 SQL Server 客户端停止连接到本地网络上另一个节点上运行的 SQL Server?
很长时间以来,它一直运行正常。客户端 PC(PC A)两天前正在连接。PC A 或托管 SQL Server(MYSERVER)的 PC 上没有任何变化。当我尝试连接时,出现错误“建立与 SQL Server 的连接时发生网络相关错误。未找到或无法访问服务器。”我可以从另一台 PC(PC B)成功连接到同一个 SQL Server 实例。
两台 PC 都在 C# 程序中使用相同的连接字符串,但我已经确认 PC A 上的 SQL Server Management Studio 连接也失败了。此外,如果我将服务器名称更改为服务器节点的 IP 地址,SQL Server Management Studio 中的连接将正常工作,即 192.168.178.20\SQLEXPRESS 连接成功,但 MYSERVER\SQLEXPRESS 连接失败。似乎 Windows 或 SQL Client 无法解析主机名(尽管几天前它还能解析)。
两台客户端电脑和服务器电脑都运行 Windows 10。本地网络是工作组,而不是域。两台客户端使用 Windows 身份验证连接到服务器。
在 PC A 上,我检查了
HOSTS 文件不包含任何地址
我可以 ping MYSERVER 并且它解析为正确的地址 192.168.178.20
没有 SQL 别名
PC 使用路由器上正确的 DNS 服务器
作为一种解决方法,我已将 MYSERVER 包含在 hosts 文件中,并将 MYSERVER 的 ip 地址更改为静态地址 192.168.178.20,但我不想永久地这样。
有没有什么建议可以解释为什么服务器名称无法解析或者我应该做些什么来进一步调查?
答案1
答案很简单。我重启了路由器。
我在以下帮助下解决了这个问题Wireshark。我比较了客户端 PC 和服务器之间的数据包,两种情况分别是服务器地址在客户端的 Windows HOSTS 文件中(与 SQL Server 的连接始终有效)和 HOSTS 文件为空(客户端 PC 从未连接)。在这两种情况下,我都可以看到 TCP 数据包正在交换,但是服务器地址在 hosts 文件中,加密连接也有 TLS 数据包。在另一种情况下,客户端似乎向服务器发送了连接请求,但没有 TLS 加密数据。
路由器中可能存在一些 DNS 问题。从客户端到服务器的 ping 成功了,但有一点延迟。虽然客户端能够从路由器解析服务器地址并成功发送 TCP 数据包,但我认为在尝试进行 Windows 身份验证时可能存在延迟,这导致客户端无法正确发送身份验证请求。
无论如何,重新启动路由器可以解决所有 DNS 问题,并且客户端现在可以连接而不需要 Windows HOSTS 文件中的服务器地址。