15

我会很感激一些帮助,因为我在这个问题上被困了 2 天!

场景:我可以从我的开发机器(和另一个同事)连接到 SERVER\INSTANCE,但不能从另一个 SQL Server 连接。我得到的错误是通用的“......验证实例名称是否正确......”。我做过/验证的事情:

  1. 我已经禁用了目标(和源)服务器上的防火墙,以查看它是否是防火墙问题(这似乎很可能,因为我可以从我的机器连接,但这没有帮助)。

  2. 我已经验证 SQL Browser 正在工作(因为我可以从开发机器连接)

  3. 由于两个 SQL Server 都有多个实例和硬编码端口,我什至确保它们是不同的端口,以防出现一些冲突(这没有帮助)。

  4. 我已重新启动 SQL Server 并验证浏览器/实例服务正在运行

  5. 检查事件日志 - 没有什么值得注意的

  6. 有趣的是,如果我不通过实例名称进行连接,而是通过第二台服务器的动态端口(即 SERVER、PORT)进行连接,它工作正常 - 这表明 SQL 浏览器有问题,除了它在本地工作正常服务器和我的开发机器。

有什么想法和建议吗?谢谢。

编辑:为了澄清评论,我将数据 SQL Server 称为 SQLA 和非数据 SQLB。

编辑#2:添加更多测试用例/信息:

信息:以上测试都是通过SSMS接口建立数据库连接的,涉及的数据库都是2012的。

新测试用例:我尝试运行脚本来设置链接服务器,发现在 SQL Server 2005 机器上运行脚本运行良好,但在 SQL Server 2012 服务器 (SQLB) 上运行相同的脚本无法连接到 SQLA错误:SQL Server 网络接口:查找指定的服务器/实例时出错 [xFFFFFFFF]。

编辑#3:缩小潜在问题:

下载并运行 PortQry,当从我的开发盒运行时,我得到所有通过 UDP 查询 1434 返回的实例,从 SQLB 运行相同的查询返回 NO 实例,它声明 1434 已过滤,而在开发盒上它返回为 LISTING。我只能认为这是与防火墙相关的,除了我在两台机器上都禁用了防火墙

4

9 回答 9

15

您无法使用“ServerName\Instance”连接但能够通过“ServerName,Port”连接到服务器的测试用例是当您使用 Microsoft VPN VPN 进入网络时发生的情况。(我有这个问题)。对于我的 VPN 问题,我只是使用静态端口号来解决它。

这显然是由于 VPN 不转发 UDP 数据包,只允许 TCP 连接。

在您的情况下,您的防火墙或安全设置或防病毒软件或任何可能阻止 UDP 的东西。

我建议您检查防火墙设置以专门允许 UDP

浏览器艺术

启动时,SQL Server Browser 启动并声明 UDP 端口 1434。SQL Server Browser 读取注册表,识别计算机上的所有 SQL Server 实例,并记录它们使用的端口和命名管道。当服务器有两个或更多网卡时,SQL Server Browser 将返回为 SQL Server 启用的所有端口。SQL Server 2005 和 SQL Server Browser 支持 ipv6 和 ipv4。

当 SQL Server 2000 和 SQL Server 2005 客户端请求 SQL Server 资源时,客户端网络库使用端口 1434 向服务器发送一条 UDP 消息。SQL Server Browser 使用所请求实例的 TCP/IP 端口或命名管道进行响应。然后,客户端应用程序上的网络库通过使用所需实例的端口或命名管道向服务器发送请求来完成连接。

使用防火墙

要与防火墙后面的服务器上的 SQL Server Browser 服务进行通信,除了 SQL Server 使用的 TCP 端口(例如 1433)之外,还要打开 UDP 端口 1434。

于 2013-06-10T19:53:28.540 回答
6

不确定这是否是您正在寻找的答案,但它对我有用。在 Windows 防火墙中转动轮子后,我回到 SQL Server 配置管理器,检查 SQL Server 网络配置,在我正在使用的实例的协议中查看 TCP/IP。默认情况下,我的似乎设置为禁用,这允许在本地机器上进行实例连接,但不允许在另一台机器上使用 SSMS。启用 TCP/IP 对我有用。

http://technet.microsoft.com/en-us/library/hh231672.aspx

于 2014-04-04T20:23:54.037 回答
4

我终于在这里找到了问题。即使在两个位置都关闭了防火墙,我们发现 SQLB 数据中心中的路由器正在主动阻止 UDP 1434。我能够通过安装 Microsoft 的 PorQry 工具来确定这一点(http://www.microsoft.com /en-ca/download/details.aspx?id=17148)并针对 UDP 端口运行查询。然后我安装了 WireShark ( http://www.wireshark.org/ ) 来查看实际的连接细节,发现有问题的路由器拒绝转发请求。由于此路由器仅影响 SQLB,这就解释了为什么其他所有连接都正常工作。

感谢大家的建议和帮助!

于 2013-06-11T02:21:20.387 回答
3

你已经尝试了很多。我对你有感觉。这是一个想法。我有点遵循你尝试的一切。我脑子里的想法是这样的:“当你尝试了一切后 Sql Server 无法连接时,通过程序连接你的防火墙规则,而不是端口”

我知道你说你禁用了防火墙。但是有些东西告诉我无论如何都要尝试一下。

我认为您必须“按程序”打开防火墙,而不是按端口。

http://technet.microsoft.com/en-us/library/cc646023.aspx

To add a program exception to the firewall using the Windows Firewall item in Control Panel.


On the Exceptions tab of the Windows Firewall item in Control Panel, click Add a program.


Browse to the location of the instance of SQL Server that you want to allow through the firewall, for example C:\Program Files\Microsoft SQL Server\MSSQL11.<instance_name>\MSSQL\Binn, select sqlservr.exe, and then click Open.


 Click OK.

编辑..........

http://msdn.microsoft.com/en-us/library/ms190479.aspx

我对您尝试在 SQLB 上使用哪个“程序”有点模糊?

它是 SQLB 上的 SSMS 吗?还是 SQLB 上的客户端程序?

编辑...........

不知道这是否会有所帮助。但我用它来ping“端口”......以及SSMS世界之外的东西。

http://www.microsoft.com/en-us/download/details.aspx?id=24009

于 2013-06-10T17:53:49.220 回答
2

您的开发机器上是否定义了任何客户端别名?如果是这样,那么在 SQLB 上也同样定义它们。具体来说,我怀疑您有定义端口的 InstanceName 格式的客户端别名,从而绕过了实际的实例名称和对 SQL Browser 的需求(部分)。不过,客户端别名也有其他可能性,因此请确保它们相同。

要检查 SQL 客户端别名,请使用 SQL Server 配置管理器(在 Microsoft SQLServer 的“程序开始”菜单中)。在那里,转到客户端配置,然后转到“别名”。


其他要检查的事项:

  1. SQLA 和 SQLB 要么在同一个域中,要么它们之间没有信任问题。

  2. 确保 SQLB 已启用 TCP/IP 作为客户端协议(这也在 SQL 配置管理器中)。


根据您的一些回复,我认为您可能错过了我关于域和信托的陈述的要点。除非客户端和服务器之间有足够的信任,否则您无法连接到 SQL“ Server\Instance ”。这是因为 SQL Sevrer 使用的整个 Instance-Naming 方案依赖于 SPN(服务主体名称)进行发现、定位和授权,并且 SPN 存储在 AD 中。因此,除非客户端在同一个盒子上,否则实例需要能够注册其 SPN,并且客户端需要能够浏览服务器实例将其 SPN 注册到的任何 AD 林。

如果您不能这样做,则实例名称实际上不起作用,您必须改用端口号(或管道名称)。这就是我现在怀疑正在发生的事情。

于 2013-06-10T20:07:20.277 回答
2
  1. 我必须在 SQL 配置管理器 > TCP/IP 中指定一个端口
  2. 打开防火墙上的端口
  3. 然后使用远程连接:“服务器名称\其他数据库实例,(端口号)”
  4. 连接的!
于 2015-01-28T12:23:14.210 回答
1

在花了大约 10 天的时间试图解决这个问题之后,我今天终于想通了,并决定发布解决方案

在开始菜单中,输入RUN,在运行框中打开,输入SERVICES.MSC,点击ok

确保这两个服务启动 SQL Server(MSSQLSERVER) SQL Server Vss writer

于 2014-04-27T12:31:15.160 回答
0

我需要做两件事来连接实例名称

1. Enable SQL Server Browser (in SQL server config manager)
2. Enable UDP, port 1434 trong file wall (if you using amazon EC2 or other service you need open port in their setting too)

重启sql就完成了

于 2015-08-22T10:06:23.943 回答
0

要解决此问题,您必须确保在托管 SQL Server 的计算机上满足以下条件...

  1. 确保服务器浏览器服务正在运行
  2. 确保为您希望通过网络进行通信的每个实例启用 TCP/IP 通信。 在此处输入图像描述
  3. 如果运行多个实例,请确保每个实例都使用不同的端口,并且该端口未在使用中。例如,对于两个实例 1433(默认实例的默认端口,命名实例的 1435。 在此处输入图像描述
  4. 确保防火墙具有允许通过UDP协议在端口1434上与 SQL Server 浏览器进行通信的条目。
  5. 确保防火墙具有允许通过TCP协议 在步骤 3 中分配给它们的端口上与 SQL Server 实例进行通信的条目在此处输入图像描述
于 2017-10-31T06:44:34.640 回答