已过时故障转移伙伴名称的影响

数据库管理员可以随时更改故障转移伙伴。 因此,客户端提供的故障转移伙伴名称可能“已过时”。 例如,假设名为 Partner_B 的故障转移伙伴已由另一个服务器实例 Partner_C 替换。现在,如果客户端使用 Partner_B 作为故障转移伙伴名称,则该名称已过时。 如果客户端提供的故障转移伙伴名称已过时,数据访问接口的行为与客户端未提供故障转移伙伴名称时的行为相同。

例如,假设客户端使用一个连接字符串连续进行四次连接尝试。 在此连接字符串中,初始伙伴名称为 Partner_A,故障转移伙伴名称为 Partner_B:

"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks"

下表显示了四个伙伴配置,并指示了对于每个配置,此连接字符串是否可以用于与客户端进行第一次连接。

注意注意

应用程序可以跟踪配置更改并相应地更改其连接字符串。 这要求使用额外的代码但同时要求减轻管理负担。

配置

主体服务器

镜像服务器

尝试与指定的 Partner_A 和 Partner_B 进行连接时的行为

原始镜像配置。

Partner_A

Partner_B

Partner_A 作为初始伙伴名称保存在缓存中。 客户端成功连接到 Partner_A。 客户端下载镜像服务器的名称 Partner_B 并将其保存在缓存中,同时忽略客户端提供的故障转移伙伴名称。

Partner_A 出现硬件故障,并进行了故障转移(从客户端断开连接)。

Partner_B

Partner_A 仍作为初始伙伴名称保存在缓存中,但却使用客户端提供的故障转移伙伴名称 Partner_B 使客户端连接到当前的主体服务器。

数据库管理员停止镜像(从客户端断开连接),用 Partner_C 替换 Partner_A,然后重新启动镜像。

Partner_B

Partner_C

客户端尝试连接到 Partner_A 并且连接失败,然后客户端尝试连接到 Partner_B(当前的主体服务器)并成功连接。 数据访问接口下载当前镜像服务器 Partner_C 的名称,并将其缓存为当前故障转移伙伴名称。

在出现故障时手动将服务转移到 Partner_C(从客户端断开连接)。

Partner_C

Partner_B

客户端最初尝试连接到 Partner_A,然后又尝试连接到 Partner_B,但均未成功。最后,连接请求超时,无法成功连接。