导航

  客户遇到一个问题,用“服务器名\实例名”远程连接另外一台命名实例的时候连接失败,报“在与SQL Server建立连接时出现于网络相关的或特定于实例的错误,未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server已配置允许远程访问连接。(provider:SQL Network Interfaces,error:26-定位指定的服务器/实例时出错)”。

  1. 首先,尝试用ip和端口号进行连接,发现可以连接上,说明实例运行正常,并不是因为实例未开启导致无法连接,如果此连接失败,则需要检查实例是否开始并且是否开启了允许远程连接;
  2. 再尝试用“服务器名,端口号”进行连接,依旧可以连接,则可以判断不是因为服务器名解析不到ip导致连接失败,如果用此方法连接失败,需要在host记录中添加对应的服务器名和ip;
  3. 那么这里可以锁定是因为用“服务器名\实例名”连接远程命名实例的时候无法解析到对方的端口号所导致无法连接。

  那么,在SQL Server里,我们平时使用“服务器名\实例名”连接一台数据库实例时,具体是如何连接的。这里就必须要提一个服务:SQL Server Browser服务。客户端要连接SQL Server,如果使用的是TCP/IP协议,就必须指定SQL Server正在侦听的端口。SQL Server Browser启动后,它会启动并使用UDP 1434端口。SQL Server浏览器会读取注册表(所有HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\MSSQLServer\Super- SocketNetLib下的记录),识别计算机上所有的SQL Server实例,并注明它们使用的端口和命名管道。当一台服务器具有两个或多个网卡时,SQL Server Browser会为SQL Server返回其遇到的第一个已启用的端口。

  当SQL Server客户端请求SQL Server资源时,客户端数据驱动程序将使用1434端口向服务器发送一条UDP消息,SQL Server Browser将会回应请求实例的TCP/IP端口或命名管道名称。然后,客户端数据驱动程序将使用所需实例的端口或命名管道向服务器发送请求来完成连接。当SQL

  Server Browser服务不运行时,如果您提供了正确的端口号或命名管道,仍可以连接到SQL Server。如果SQL Server的默认实例在1433端口上运行,则可以使用TCP/IP连接到此默认实例。

  在了解了SQL Server Browser运行的原理后,让客户将查看是否未启用该服务,但是客户启用后用“服务器名\实例名”仍然无法连接,再次推断是UDP 1434端口被禁,开启该端口之后连接正常。