在 SQL Server Native Client 中使用資料庫鏡像

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

注意

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 Always On 可用性群組。

重要

SQL Server Native Client (通常縮寫為 SNAC) 已從 SQL Server 2022 (16.x) 和 SQL Server Management Studio 19 (SSMS) 中移除。 不建議使用 SQL Server Native Client (SQLNCLI 或 SQLNCLI11) 和舊版 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 開發新的應用程式。 往後請改用新的 Microsoft OLE DB Driver (MSOLEDBSQL) for SQL Server 或最新的 Microsoft ODBC Driver for SQL Server。 針對 SQL Server 資料庫引擎 (2012 到 2019 版) 的隨附元件 SQLNCLI,請參閱支援生命週期例外狀況

在 SQL Server 2005 (9.x) 中導入的資料庫鏡像是一套增加資料庫可用性與資料冗餘的解決方案。 SQL Server Native Client 提供資料庫鏡像的隱含支援,因此開發人員不需要撰寫任何程式碼,或在針對資料庫設定後採取任何其他動作。

資料庫鏡像是根據每個資料庫來實作,會在待命伺服器上保留 SQL Server 生產環境資料庫的複本。 此伺服器為熱或暖待命伺服器,端視資料庫鏡像工作階段的組態和狀態而定。 熱待命伺服器支援不會遺失任何已認可交易的快速容錯移轉,而暖待命伺服器支援強制服務 (資料可能會遺失)。

生產資料庫稱為「主體資料庫」,而待命副本則稱為「鏡像資料庫」。 主體資料庫和鏡像資料庫必須位於個別的 SQL Server 執行個體 (伺服器執行個體) 上,如有可能,也應該位於個別的電腦上。

稱為「主體伺服器」的實際執行伺服器執行個體會與稱為「鏡像伺服器」的待命伺服器執行個體進行通訊。 主體伺服器和鏡像伺服器會在資料庫鏡像「工作階段」內當做夥伴運作。 如果主體伺服器失敗,則鏡像伺服器可以透過稱為「容錯移轉」的處理序,使鏡像伺服器的資料庫成為主體資料庫。 例如,Partner_A 與 Partner_B 是兩個夥伴伺服器,其中主體資料庫一開始位於 Partner_A 上做為主體伺服器,而鏡像資料庫位於 Partner_B 上做為鏡像伺服器。 如果 Partner_A 離線,Partner_B 上的資料庫可以容錯移轉,變成目前的主體資料庫。 當 Partner_A 重新加入鏡像工作階段時,它會變成鏡像伺服器而其資料庫會變成鏡像資料庫。

替代的資料庫鏡像組態提供不同層次的效能及資料安全,並支援不同形式的容錯移轉。 如需詳細資訊,請參閱資料庫鏡像 (SQL Server)

指定鏡像資料庫名稱時,可以使用別名。

注意

如需有關鏡像資料庫之初始連線嘗試與重新連線嘗試的詳細資訊,請參閱將用戶端連線至資料庫鏡像工作階段 (SQL Server)

程式設計考量

當主體資料庫伺服器失敗時,用戶端應用程式會在回應 API 呼叫時收到錯誤,這表示與資料庫的連接已經中斷。 發生這個情況時,對於資料庫的任何未認可變更都會遺失,而且目前的交易會回復。 如果發生這個情況,應用程式應該關閉連接 (或釋出資料來源物件) 然後再重新開啟它。 此連接會以透明的方式重新導向鏡像資料庫,現在當做主體伺服器使用。

建立連接時,主體伺服器會將其容錯移轉夥伴的識別傳送到容錯移轉發生時所使用的用戶端。 在應用程式嘗試在主體伺服器失敗後建立連接的情況下,用戶端不會知道容錯移轉夥伴的識別。 為了讓用戶端有機會處理此狀況,初始化屬性和相關聯的連接字串關鍵字可讓用戶端自行指定容錯移轉夥伴的識別。 只有在有可用的主體伺服器,但未使用時,才會在此狀況中使用用戶端屬性。 如果用戶端提供的容錯移轉夥伴伺服器指的不是當做容錯移轉夥伴的伺服器,伺服器就會拒絕連接。 若要讓應用程式符合組態變更,實際容錯移轉夥伴的識別可以透過檢查建立連接後的屬性來判斷。 如果第一次建立連接的嘗試失敗,您應該考慮快取處理夥伴資訊來更新連接字串或想出重試策略。

注意

如果您要在 DSN、連接字串或連接屬性 (Property)/屬性 (Attribute) 中使用此功能,您必須明確指定連接所使用的資料庫。 如果未這麼做,SQL Server Native Client 將不會嘗試故障轉移至夥伴資料庫。

鏡像是資料庫的一個功能。 使用多個資料庫的應用程式可能無法使用此功能。

此外,伺服器名稱不區分大小寫,但是資料庫名稱會區分大小寫。 因此,您應該確認您在 DSN 和連接字串中使用相同的大小寫。

SQL Server Native Client OLE DB 提供者

SQL Server Native Client OLE DB 提供者支援透過連線和 連接字串 屬性進行資料庫鏡像。 SSPROP_INIT_FAILOVERPARTNER 屬性已加入到 DBPROPSET_SQLSERVERDBINIT 屬性集,而 FailoverPartner 關鍵字是 DBPROP_INIT_PROVIDERSTRING 的新連接字串屬性。 如需詳細資訊,請參閱搭配 SQL Server Native Client 使用 連線 ion String 關鍵詞。

只要載入提供者,就會維護故障轉移快取,直到 呼叫 CoUninitialize ,或只要應用程式有 SQL Server Native Client OLE DB 提供者所管理之某些對象的參考,例如數據源物件為止。

如需資料庫鏡像之 SQL Server Native Client OLE DB 提供者支援的詳細資訊,請參閱 初始化和授權屬性

SQL Server Native Client ODBC Driver

SQL Server Native Client ODBC 驅動程式支援透過連接和 連接字串 屬性的資料庫鏡像。 具體來說,已新增SQL_COPT_SS_FAILOVER_PARTNER屬性以搭配 SQLSet 連線 Attr 和 SQLGet 連線 Attr 函式使用;Failover_Partner關鍵詞已新增為新的 連接字串 屬性。

只要應用程式至少有一個已配置的環境句柄,故障轉移快取即會維持。 相反地,當最後一個環境句柄解除分配時,它就會遺失。

注意

ODBC 驅動程式管理員已增強,以支援故障轉移伺服器名稱的規格。

另請參閱

SQL Server Native Client 功能
將用戶端連接至資料庫鏡像工作階段 (SQL Server)
資料庫鏡像 (SQL Server)