Sql-Server-2016

儘管未指定故障轉移夥伴,但 TFS 安裝故障轉移到鏡像輔助

  • August 21, 2019

我們在伺服器(伺服器 A)上安裝了 TFS 版本 15.105.27412.0,並將其配置為指向我們的數據庫伺服器(伺服器 B)。

我們有兩個 TFS 數據庫 (tfs_defaultcollectiontfs_configuration) ServerB,它們被鏡像ServerC,但是 TFS 配置管理器中的連接字元串不是“鏡像感知” - 請參見下面的 TFS 管理控制台螢幕截圖

圖片

此外,如果我如下查詢 TFS 配置數據庫

SELECT * FROM Tfs_configuration.dbo.tbl_Database

這確認了兩個數據庫的連接字元串都沒有指定故障轉移夥伴。

在此處輸入圖像描述

今天早上我們有一個計劃的故障轉移ServerBServerC其中包括兩個TFS數據庫,令所有人驚訝的是,它TFS繼續與數據庫一起failover執行並在ServerC.

我停止了 SQL Server 服務ServerB並執行了一個ExtendedEvents會話ServerC(查找訪問TFS數據庫的查詢),並且可以確認TFS應用程序確實在查詢ServerC

這怎麼發生的?TFS 安裝不知道ServerC存在,是在 SQL Server 級別發生了什麼嗎?

在連接字元串中指定故障轉移夥伴僅用於初始連接。連接後,客戶端會收到故障轉移夥伴的通知,並將在發生故障轉移時使用它重新連接。

$$ After connecting to the principal $$數據訪問提供者下載目前鏡像伺服器的伺服器實例名稱。此名稱作為故障轉移夥伴名稱儲存在記憶體中,覆蓋客戶端提供的故障轉移夥伴名稱(如果有)。

將客戶端連接到數據庫鏡像會話

因此,即使沒有專門為數據庫鏡像配置的應用程序也會在啟動時發現故障轉移夥伴。

我們的 TFS 安裝沒有指定故障轉移夥伴

因此,如果在其連接字元串中指定的伺服器不可用並且託管主體數據庫,則在重新啟動或冷啟動時,TFS 將無法連接。但是,如果在 TFS 成功連接到主體後發生故障轉移,它將知道重新連接到故障轉移夥伴。

引用自:https://dba.stackexchange.com/questions/245332