注意
SQL Server 中的資料庫鏡像是與 Microsoft Fabric 資料庫鏡像不同的技術。
SQL Server 中的資料庫鏡像可讓您將 SQL Server 資料庫的複本或鏡像保存在待命伺服器上。 鏡像可確保一律存在兩份資料複本,進而提供高可用性與完整的資料備援能力。 Microsoft SqlClient Provider for SQL Server 提供資料庫鏡像的隱含支援。 一旦為 SQL Server 資料庫設定好此用戶端,開發人員就不需要執行任何動作。 此外,SqlConnection 物件支援可在 ConnectionString 中提供容錯移轉夥伴伺服器名稱的明確連線模式。
下列簡化的事件順序會針對 SqlConnection 物件發生,此物件會以設定為用於鏡像的資料庫作為目標:
- 用戶端應用程式成功連線到主體資料庫,而伺服器會傳回夥伴伺服器的名稱,以供用戶端快取。
- 如果包含主體資料庫的伺服器失敗或連線中斷,連線和交易狀態就會遺失。 用戶端應用程式嘗試重新建立與主體資料庫的連線,但失敗。
- 然後,用戶端應用程式會以透明方式,嘗試建立與夥伴伺服器上鏡像資料庫的連線。 如果成功,會將連線重新導向至鏡像資料庫,接著鏡像資料庫會成為新的主體資料庫。
在連接字串中指定容錯移轉夥伴
如果您在連接字串中提供容錯移轉夥伴伺服器的名稱,而且當用戶端應用程式連線時主體資料庫無法使用,則用戶端會以透明方式嘗試與容錯移轉夥伴連線。
";Failover Partner=PartnerServerName"
如果您省略容錯移轉夥伴伺服器的名稱,而且當用戶端應用程式第一次連線時主體資料庫無法使用,則會發生 SqlException。
成功開啟 SqlConnection 之後,伺服器就會傳回容錯移轉夥伴名稱,並取代連接字串中提供的任何值。
注意
您必須在資料庫鏡像案例的連接字串中,明確指定初始目錄或資料庫名稱。 如果用戶端在沒有明確指定初始目錄或資料庫的連線上收到容錯移轉資訊,則不會快取該容錯移轉資訊,且應用程式在主體伺服器失敗時不會嘗試容錯移轉。 如果連接字串內含容錯移轉夥伴的值,但是沒有初始目錄或資料庫的值,就會引發 InvalidArgumentException。
擷取目前的伺服器名稱
當發生容錯移轉時,您可以使用 SqlConnection 物件的 DataSource 屬性,擷取目前連線所連線的伺服器名稱。 假設連接變數參考已開啟的 SqlConnection,下列程式碼片段就會擷取使用中伺服器的名稱。
當發生容錯移轉事件且連線切換到鏡像伺服器時,DataSource 屬性會更新以反映鏡像名稱。
string activeServer = connection.DataSource;
SqlClient 鏡像行為
用戶端一律會嘗試連線到主體伺服器。 如果失敗,會嘗試容錯移轉夥伴。 如果鏡像資料庫已經切換到夥伴伺服器上的主體角色,連線就會成功,而且新的主體-鏡像對應會傳送至用戶端,並在呼叫 AppDomain 的存留期間進行快取。 這不會儲存在永續性儲存體中,而且無法供不同 AppDomain 或處理序中的未來連線使用。 不過,其可供相同 AppDomain 內的稍後連線使用。 在相同或不同電腦上執行的其他 AppDomain 或處理序一律會有自己的連線集區,而且不會重設這些連線。 在此情況下,如果主要資料庫關閉,則每個處理序或 AppDomain 會失敗一次,且會自動清除集區。
注意
伺服器上的鏡像支援是以個別資料庫為基礎所設定的。 如果是針對不包含在主體/鏡像集內的其他資料庫執行資料操作作業,不論是使用多部分名稱或透過變更目前的資料庫,這些對其他資料庫所做的變更都不會在發生失敗時傳播。 在未鏡像的資料庫中修改資料時,並不會產生任何錯誤。 開發人員必須評估此類作業可能產生的影響。
後續步驟
資料庫鏡像資源
如需設定、部署和管理鏡像的概念文件和資訊,請參閱 SQL Server 文件中的下列資源。
| 資源 | 描述 |
|---|---|
| 資料庫鏡像 | 描述如何在 SQL Server 中設定鏡像。 |