【发布时间】:2012-09-13 19:11:02
【问题描述】:
我有一个可以连接到主体的应用程序,但在故障转移期间无法连接到镜像。
(版主注意:请让我知道这个问题是否更适合 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 服务吗?
配置:
- App 是使用 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 两台服务器
- NetBIOS over TCP/IP 已在 WINS 选项卡下的适配器中启用(在镜像和客户端计算机上)
我已经能够让应用程序在其他几个安装中使用镜像,但这个让我感到困惑。
【问题讨论】:
-
我删除了Delphi标签,因为这个问题与Delphi完全无关。严格来说,这是一个 SQL Server 问题。
标签: sql-server-2008-r2 connection-string failover database-mirroring