我们在服务器(服务器 A)上安装了 TFS 版本 15.105.27412.0,并将其配置为指向我们的数据库服务器(服务器 B)。
我们有两个 TFS 数据库 (tfs_defaultcollection
和tfs_configuration
) ServerB
,它们被镜像ServerC
,但是 TFS 配置管理器中的连接字符串不是“镜像感知” - 请参见下面的 TFS 管理控制台屏幕截图
此外,如果我如下查询 TFS 配置数据库
SELECT * FROM Tfs_configuration.dbo.tbl_Database
这确认了两个数据库的连接字符串都没有指定故障转移伙伴。
今天早上我们有一个计划的故障转移ServerB
,ServerC
其中包括两个TFS
数据库,令所有人惊讶的是,它TFS
继续与数据库一起failover
运行并在ServerC
.
我停止了 SQL Server 服务ServerB
并运行了一个ExtendedEvents
会话ServerC
(查找访问TFS
数据库的查询),并且可以确认TFS
应用程序确实在查询ServerC
。
这怎么发生的?TFS 安装不知道ServerC
存在,是在 SQL Server 级别发生了什么吗?
在连接字符串中指定故障转移伙伴仅用于初始连接。连接后,客户端会收到故障转移伙伴的通知,并将在发生故障转移时使用它重新连接。
将客户端连接到数据库镜像会话
因此,即使没有专门为数据库镜像配置的应用程序也会在启动时发现故障转移伙伴。
因此,如果在其连接字符串中指定的服务器不可用并且托管主体数据库,则在重新启动或冷启动时,TFS 将无法连接。但是,如果在 TFS 成功连接到主体后发生故障转移,它将知道重新连接到故障转移伙伴。