Sql server 2008 r2 数据库镜像-应用程序可以';t连接到镜像命名管道提供程序:无法打开到SQL Server的连接[53]

Sql server 2008 r2 数据库镜像-应用程序可以';t连接到镜像命名管道提供程序:无法打开到SQL Server的连接[53],sql-server-2008-r2,connection-string,failover,database-mirroring,Sql Server 2008 R2,Connection String,Failover,Database Mirroring,我有一个应用程序可以连接到主体,但在故障切换期间无法连接到镜像 (主持人注意:请让我知道这个问题是否更适合serverfault。我将其发布在这里,因为我发现与此问题类似的问题比serverfault上的问题更多。) 这是我的应用程序在故障切换后尝试连接到镜像时收到的错误: Named Pipes Provider: Could not open a connection to SQL Server [53]. Cannot open database "MY_DB_NAME" requeste

我有一个应用程序可以连接到主体,但在故障切换期间无法连接到镜像

(主持人注意:请让我知道这个问题是否更适合serverfault。我将其发布在这里,因为我发现与此问题类似的问题比serverfault上的问题更多。)

这是我的应用程序在故障切换后尝试连接到镜像时收到的错误:

Named Pipes Provider: Could not open a connection to SQL Server [53].
Cannot open database "MY_DB_NAME" requested by the login. The login failed.
我熟悉这样一个事实:当最初连接到主体时,镜像服务器的名称将被缓存以在故障切换期间使用,并且我在连接字符串中指定的故障切换伙伴仅在与主体的初始连接失败时使用

这清楚地描述了我遇到的问题:

…但是SQL Browser服务正在运行,我不明白为什么连接到镜像时无法解析名称

我假设有一个服务必须运行才能启用未运行的NetBIOS名称解析,因为这是我在WireShark中看到的,没有镜像响应:

Source       Destination  Protocol Length Info
10.200.3.111 10.200.5.255 NBNS     92     Name query NB SQL-02-SVR-<00>
源-目标协议长度信息
10.200.3.111 10.200.5.255 NBNS 92名称查询NB SQL-02-SVR-
问题1:什么可能导致问题?;-)

问题2:我真的不想启用NetBIOS(出于安全原因),我在镜像配置和连接字符串中使用IP地址(无FQDN)。考虑到镜像伙伴在连接到主体时的缓存行为,是否有办法强制使用TCP/IP,以便缓存的值是IP地址而不是名称?是否需要运行SQL Server浏览器/计算机浏览器服务

配置:

  • 应用程序是使用SDAC 6.5.9的Delphi XE2(我认为这与我使用的组件无关,因为它可以在其他安装中使用镜像,并且没有问题)
  • SQL Server 2012 Enterprise作为默认实例安装在使用证书身份验证的非域配置中的主体、镜像和见证上
  • 所有计算机上的Windows Server 2008 R2 SP1 64位
  • 在主体、镜像和客户端(应用正在运行的位置)上禁用防火墙
  • 在主体和镜像上启用TCP/IP和命名管道
  • 在镜像上运行的SQL Server浏览器服务
  • 在镜像上运行的计算机浏览器服务
  • 镜像配置为使用见证进行自动故障切换,并且工作正常(我可以在镜像和主体之间来回失败而不会出现问题)
  • SQL本机客户端2012安装在客户端计算机上
  • 主体和镜像上都存在相同的应用程序登录(具有相同的SID和用户权限)
  • 在我的应用程序日志中验证了正确的服务器、故障切换伙伴、数据库名称、用户名和密码
  • 在连接字符串中,使用SQL本机客户端的主体服务器是“tcp:10.200.3.151433”,故障转移伙伴是“tcp:10.200.3.161433”
  • 我可以从客户端计算机ping两个服务器
  • TCP/IP上的NetBIOS已在WINS选项卡下的适配器中启用(在镜像和客户端计算机上)

我已经能够让应用程序在其他几个安装上使用镜像,但这一个让我感到困惑。

我发现了问题,即客户在一个VLAN中有主体和镜像,在另一个VLAN中有客户端。虽然IP寻址方案相同,但VLAN之间的通信策略阻止了广播消息,这就是为什么客户端上的NetBIOS查询失败的原因。将实施WINS或DNS服务器来解决此问题


但是,我仍然对上面问题2的答案感兴趣。

我删除了Delphi标签,因为这个问题与Delphi完全无关。这完全是SQL Server的问题。您最终有了解决方案吗?介意分享。我们现在也遇到了同样的问题。