我有一个可以连接到主体的应用程序,但在故障转移期间无法连接到镜像。
(版主注意:请让我知道这个问题是否更适合 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 浏览器服务正在运行,我无法弄清楚为什么连接到镜像时名称无法解析。
我假设必须运行一项服务以启用未运行的 NetBIOS 名称解析,因为这是我在 WireShark 中看到的一致而没有来自镜像的响应:
Source Destination Protocol Length Info
10.200.3.111 10.200.5.255 NBNS 92 Name query NB SQL-02-SVR-<00>
问题1:什么可能导致问题?;-)
问题 2:我真的不想启用 NetBIOS(出于安全原因),我在镜像配置和连接字符串中使用 IP 地址(无 FQDN)。鉴于镜像伙伴在连接到主体时的缓存行为,有没有办法强制使用 TCP/IP,以便缓存的值是 IP 地址而不是名称?我需要运行 SQL Server Browser/Computer Browser 服务吗?
配置:
- 应用程序是使用 SDAC 6.5.9 的 Delphi XE2(我认为这与我正在使用的组件无关,因为它可以在其他带有镜像的安装中使用并且没有问题)
- SQL Server 2012 Enterprise 作为默认实例安装在使用证书身份验证的非域配置中的 Principal、Mirror 和 Witness 上。
- 所有机器上的 Windows Server 2008 R2 SP1 64 位
- 在主体、镜像和客户端(应用程序运行的地方)禁用防火墙
- 在主体和镜像上启用 TCP/IP 和命名管道
- 镜像上运行的 SQL Server Browser 服务
- 在 Mirror 上运行的计算机浏览器服务
- 镜像配置为使用见证进行自动故障转移并且工作正常(我可以在镜像和主体之间来回切换而不会出现问题)
- 安装在客户端机器上的 SQL Native Client 2012
- Principal 和 Mirror 上存在相同的应用登录(具有相同的 SID 和用户权限)
- 在我的应用程序日志中验证的正确服务器、故障转移伙伴、数据库名称、用户名和密码
- 在连接字符串中,主体服务器是“tcp:10.200.3.15,1433”,故障转移伙伴是使用 SQL Native 客户端的“tcp:10.200.3.16,1433”
- 我可以从客户端机器 ping 两台服务器
- 已在 WINS 选项卡下的适配器中启用 TCP/IP 上的 NetBIOS(在镜像和客户端计算机上)
我已经能够让应用程序在其他几个安装上使用镜像,但是这个让我感到困惑。