我很感激一些帮助,因为我在这个问题上被困了2天!
场景:我可以从我的开发机器(和其他同事)连接到SERVER \ INSTANCE,但无法从另一台SQL Server连接。我得到的错误是通用的“...验证实例名称是否正确..”。我做过/验证的事情:
我已经在目的地(和源)服务器上禁用防火墙以查看它是否是防火墙问题(这似乎很可能是因为我可以从我的机器连接,但这没有帮助)。
我已经确认SQL浏览器正在运行(因为我可以从开发机器连接,所以它是
由于两个SQL Server都有多个实例和硬编码端口,我甚至确保它们是不同的端口,因为存在一些冲突(这没有帮助)。
我重新启动了SQL Server并验证浏览器/实例服务正在运行
检查事件日志 - 没有任何注意事项
有趣的是,如果我没有通过实例名称进行连接,而是通过动态端口(即SERVER,PORT)从第二台服务器进行连接,那么它运行正常 - 这表明SQL浏览器有问题,除了它在本地服务器和我的开发机器上运行良好。
有什么想法和建议吗?感谢。
编辑:为了澄清注释,我将数据SQL Server称为SQLA和非数据SQLB。
编辑#2:添加更多测试用例/信息:
信息:上述测试均通过SSMS接口完成,以建立与数据库的连接,所涉及的数据库均为2012年。
新测试案例:我尝试运行脚本来设置链接服务器,发现在SQL Server 2005上运行脚本工作正常,但在SQL Server 2012服务器(SQLB)上运行相同的脚本无法连接到SQLA的错误:SQL Server网络接口:错误定位服务器/实例指定[xFFFFFFFF]。
编辑#3:缩小潜在问题:
下载并运行PortQry,当从我的开发框运行时,我通过UDP查询返回的所有实例,从SQLB运行相同的查询返回NO实例,并将1434表示为FILTERED而在开发框中它返回为清单。我只能认为这与防火墙有关,只是我在两台机器上都禁用了防火墙
答案 0 :(得分:15)
您无法连接“ServerName \ Instance”但是能够通过“ServerName,Port”连接到服务器的测试用例,当您使用Microsoft VPN连接到网络时会发生这种情况。 (我有这个问题)。对于我的VPN问题,我只需使用静态端口号来解决它。
这显然是由于VPN不转发UDP数据包,只允许TCP连接。
在您的情况下,您的防火墙或安全设置或防病毒或其他任何可能阻止UDP。
我建议您检查防火墙设置以明确允许UDP 。
启动时,SQL Server Browser启动并声明UDP端口1434. SQL 服务器浏览器读取注册表,标识所有SQL Server实例 在计算机上,并记下他们使用的端口和命名管道。 当服务器有两个或更多网卡时,SQL Server Browser会 返回为SQL Server启用的所有端口。 SQL Server 2005和SQL 服务器浏览器支持ipv6和ipv4。
当SQL Server 2000和SQL Server 2005客户端请求SQL Server时 资源,客户端网络库发送UDP消息 使用端口1434的服务器.SQL Server Browser使用TCP / IP进行响应 请求实例的端口或命名管道。网络库上 客户端应用程序然后通过发送一个完成连接 使用所需的端口或命名管道向服务器请求 实例
使用防火墙
要与防火墙后面的服务器上的SQL Server Browser服务进行通信,除了SQL Server使用的TCP端口外,还要打开UDP端口1434(例如,1433)。
答案 1 :(得分:6)
不确定这是否是您正在寻找的答案,但它对我有用。在Windows防火墙中旋转我的轮子之后,我回到了SQL Server配置管理器,检查了SQL Server网络配置,在我正在使用的实例的协议中查看TCP / IP。默认情况下,似乎我的设置为禁用,这允许在本地计算机上进行实例连接,但不在另一台计算机上使用SSMS。启用TCP / IP对我来说很有用。
答案 2 :(得分:4)
我终于在这里找到了这个问题。即使防火墙在两个位置都被关闭,我们发现SQLB数据中心的路由器正在主动阻止UDP 1434.我能够通过安装Microsoft(http://www.microsoft.com/en-ca/download/details.aspx?id=17148)的PorQry工具并运行一个来确定这一点。查询UDP端口。然后我安装了WireShark(http://www.wireshark.org/)来查看实际的连接细节,发现有问题的路由器拒绝转发请求。由于此路由器仅影响SQLB,因此解释了为什么每个其他连接都能正常工作。
感谢大家的建议和帮助!
答案 3 :(得分: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.
EDIT ..........
http://msdn.microsoft.com/en-us/library/ms190479.aspx
我试图在SQLB上使用哪个“程序”,我有点多云?
是SQLB上的SSMS吗?或SQLB上的客户端程序?
EDIT ...........
不知道这是否会有所帮助。 但我用它来ping“端口”......以及SSMS世界之外的东西。
http://www.microsoft.com/en-us/download/details.aspx?id=24009
答案 4 :(得分:2)
您的开发机器上是否定义了任何客户端别名?如果是这样,那么在SQLB上也定义它们相同。具体来说,我怀疑您使用InstanceName格式的客户端别名来定义端口,从而绕过实际的实例名称和SQL浏览器(部分)的需要。但是,客户端别名还有其他可能性,所以只需确保它们是相同的。
要检查SQL客户端别名,请使用SQL Server配置管理器(在Microsoft SQLServer,程序开始菜单中)。在那里,转到客户端配置,然后是“别名”。
其他要检查的事项:
SQLA和SQLB位于同一个域中,或者它们之间没有信任问题。
确保SQLB已启用TCP / IP作为客户端协议(这也在SQL配置管理器中)。
根据您的一些回复,我认为您可能忽略了我对域名和信托的陈述。除非客户端和服务器之间有足够的信任,否则无法连接到SQL“ Server \ Instance ”。这是因为SQL Sevrer使用的整个实例命名方案依赖于SPN(服务主体名称)进行发现,定位和授权,并且SPN存储在AD中。因此,除非客户端位于同一个框中,否则实例需要能够注册其SPN,并且客户端需要能够浏览服务器实例将其SPN注册到的任何AD林。
如果您不能这样做,那么实例名称实际上不起作用,您必须使用端口号(或管道名称)。这就是我现在怀疑的情况。
答案 5 :(得分:2)
答案 6 :(得分:1)
确保启动这两项服务 SQL Server(MSSQLSERVER) SQL Server Vss编写器
答案 7 :(得分: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并完成
答案 8 :(得分:0)
要解决此问题,您必须确保在托管SQL Server的计算机上执行以下操作...