Sql-Server

使用 CNAME 的數據庫鏡像故障轉移

  • August 10, 2018

我為數據庫鏡像配置了 SERVERA 和 SERVERB,以 A 作為主體,B 作為鏡像開始。我為 SERVERA 創建了一個 CNAME 並在我的連接字元串中使用它。我沒有使用連接字元串的 FailoverPartner 屬性,部分原因是我懷疑我的一些應用程序不支持它,部分原因是我正在嘗試了解 CNAME。

我對從 A 到 B 的故障轉移的期望是:1. 連接會失敗 2. 我需要將 CNAME 更改為指向 SERVERB。3. 我必須在我的客戶端上 ipconfig /flushdns。4. 那麼一切都會好起來的。

相反,我不必做任何事情。我的應用程序自動開始轉到 SERVERB,即使我的 CNAME 指向 SERVERA。我讀過連接字元串將從 SQL 獲取鏡像實例,這將取代連接字元串的 FailoverPartner 屬性(我猜是 CNAME),但這些都是關於何時使用 FailoverPartner 屬性的文章。同樣,我的連接字元串沒有使用該屬性。

即使連接字元串中使用的 CNAME 指向 SERVERA,有人可以解釋或指出我的應用程序如何知道到達 SERVERB 的資源嗎?

安裝程序是 Windows 2008R2 / SQL 2008R2

這是設計使然。在您的客戶端能夠連接到主伺服器但數據庫已故障轉移到輔助伺服器的情況下,主伺服器將通知客戶端。因為伺服器不知道您正在使用的 CNAME,它將使用它從鏡像配置中獲得的資訊將客戶端定向到數據庫的目前位置。

您的 CNAME 將在主伺服器不再可聯繫的情況下發揮作用。在嘗試連接到連接字元串中配置的輔助伺服器之前,客戶端將需要在聯繫主伺服器時超時。

MS的以下頁面描述了這種行為…… https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/database-mirroring-in-sql-server

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