我在本地安装的 SQL Server 2014 命名实例中遇到了同样的问题。使用连接FQDN\InstanceName
会失败,而仅使用我的hostname\InstanceName
工作连接。例如:使用连接mycomputername\sql2014
工作,但使用mycomputername.mydomain.org\sql2014
没有。DNS 正确解析,在 SQL 配置管理器中启用了 TCP/IP,添加了 Windows 防火墙规则(然后关闭防火墙进行测试以确保它没有阻止任何内容),但这些都没有解决问题。
最后,我不得不在 SQL Server 上启动“ SQL Server Browser ”服务,从而解决了连接问题。
我从来没有意识到 SQL Server Browser 服务实际上是在帮助 SQL Server 建立连接;我的印象是,当您单击“浏览更多”服务器以连接到时,它只是帮助填充下拉列表,但它实际上有助于将客户端请求与要使用的正确端口 # 对齐,如果端口 # 未明确分配(类似网站绑定如何帮助缓解托管多个网站的 IIS Web 服务器上的相同问题)。
这个连接项目给了我关于 SQL Server Browser 服务的线索:https ://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine-姓名
- 当您使用 wstst05\sqlexpress 作为服务器名称时,客户端代码将机器名称与实例名称分开,并将 wstst05 与 netbios 名称进行比较。我认为他们匹配没有问题,并且连接被认为是本地的。从那里,我们在不联系 SQL 浏览器的情况下检索所需的信息,并通过共享内存毫无问题地连接到 SQL 实例。
- 当您使用 wstst05.capatest.local\sqlexpress 时,客户端代码无法将名称 (wstst05.capatest.local) 与 netbios 名称 (wstst05) 进行比较,并认为连接“远程”。这是设计使然,我们肯定会考虑在未来改进这一点。无论如何,由于考虑到远程连接和它是一个命名实例的事实,客户端决定它需要使用 SQLBrowser 进行名称解析。它尝试在 wstst05.capatest.local(UDP 端口 1434)上联系 SQL Browser,显然该部分失败了。因此你得到的错误。
TechNet 提供“SQL Server Browser”服务的原因(重点由我添加):https ://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx
从“使用 SQL Server 浏览器”部分:
如果 SQL Server Browser 服务未运行,如果您提供正确的端口号或命名管道,您仍然可以连接到 SQL Server。例如,如果 SQL Server 在端口 1433 上运行,您可以使用 TCP/IP 连接到默认实例。但是,如果 SQL Server Browser 服务未运行,则以下连接不起作用:
- 任何在未完全指定所有参数(例如 TCP/IP 端口或命名管道)的情况下尝试连接到命名实例的组件。
- 生成或传递服务器\实例信息的任何组件,稍后其他组件可以使用这些信息重新连接。
- 在不提供端口号或管道的情况下连接到命名实例。
- DAC 到命名实例或默认实例(如果不使用 TCP/IP 端口 1433)。
- OLAP 重定向器服务。
- 在 SQL Server Management Studio、企业管理器或查询分析器中枚举服务器。
如果您在客户端-服务器方案中使用 SQL Server(例如,当您的应用程序通过网络访问 SQL Server 时),如果您停止或禁用 SQL Server Browser 服务,则必须为每个实例分配一个特定的端口号,并且编写您的客户端应用程序代码以始终使用该端口号。这种方法存在以下问题:
- 您必须更新和维护客户端应用程序代码,以确保它连接到正确的端口。
- 您为每个实例选择的端口可能被服务器上的另一个服务或应用程序使用,从而导致 SQL Server 实例不可用。
以及来自“SQL Server Browser 的工作原理”部分的同一篇文章的更多信息:
因为只有一个 SQL Server 实例可以使用端口或管道,为命名实例分配不同的端口号和管道名称,包括 SQL Server Express。默认情况下,启用后,命名实例和 SQL Server Express 都配置为使用动态端口,即在 SQL Server 启动时分配一个可用端口。如果需要,可以将特定端口分配给 SQL Server 实例。连接时,客户端可以指定特定的端口;但是如果端口是动态分配的,则端口号可以在 SQL Server 重新启动时随时更改,因此客户端不知道正确的端口号。...当 SQL Server 客户端请求 SQL Server 资源时,客户端网络库使用端口 1434 向服务器发送一条 UDP 消息。SQL Server 浏览器使用所请求实例的 TCP/IP 端口或命名管道进行响应。