我在本地安装的SQL Server 2014命名实例存在相同的问题。连接使用FQDN\InstanceName
会失败,而只使用我的连接hostname\InstanceName
工作。例如:使用mycomputername\sql2014
work进行连接,但是使用mycomputername.mydomain.org\sql2014
无效。DNS正确解析,在SQL Configuration Manager中启用了TCP / IP,添加了Windows防火墙规则(然后关闭防火墙进行测试,以确保它不会阻止任何东西),但是这些都没有解决问题。
最后,我必须启动“ SQL Server浏览器 ”服务,该服务解决了连接问题。
我从来没有意识到SQL Server Browser服务实际上可以帮助SQL Server建立连接。我的印象是,当您单击“浏览更多”服务器以进行连接时,它只是帮助填充了下拉列表,但实际上,如果未明确分配端口号(类似,则它实际上有助于使客户端请求与要使用的正确端口号保持一致)网站绑定如何帮助缓解托管多个网站的IIS Web服务器上的同一问题)。
此连接项为我提供了有关SQL Server浏览器服务的线索:https : //connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine-名称
- 当您将wstst05 \ sqlexpress用作服务器名称时,客户端代码会将计算机名称与实例名称分开,并将wstst05与netbios名称进行比较。我认为它们匹配没有问题,并且该连接被视为本地连接。从那里,我们无需获取所需信息联系SQL Browser即可并通过共享内存连接到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/zh-cn/library/ms181087(v=sql.120 ) .aspx
在“使用SQL Server浏览器”部分中:
如果SQL Server Browser服务未运行,则在您提供正确的端口号或命名管道的情况下仍可以连接到SQL Server。例如,如果它在端口1433上运行,则可以使用TCP / IP连接到SQL Server的默认实例。但是,如果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浏览器的工作原理”部分的同一篇文章的更多信息:
因为 只有一个SQL Server实例可以使用端口或管道,为命名实例(包括SQL Server Express)分配了不同的端口号和管道名称。默认情况下,启用后,命名实例和SQL Server Express均配置为使用动态端口,即,在SQL Server启动时分配了可用端口。如果需要,可以将特定端口分配给SQL Server实例。连接时,客户端可以指定一个特定的端口。但是如果端口是动态分配的,则端口号可以在SQL Server重新启动时随时更改,因此客户端不知道正确的端口号。...当SQL Server客户端请求SQL Server资源时,客户端网络库使用端口1434向服务器发送UDP消息。SQLServer Browser用请求的实例的TCP / IP端口或命名管道进行响应。