什麼是適用於 Azure 的 SQL 資料同步?

適用於:Azure SQL Database

「SQL 資料同步」是建置在 Azure SQL Database 上的服務,可同步處理跨多個資料庫 (內部部署和雲端) 所雙向選取的資料。

重要

Azure SQL 資料同步目前不支援 Azure SQL 受控執行個體或 Azure Synapse Analytics。

概觀

資料同步以「同步群組」的概念為基礎。 「同步群組」是您想要同步的資料庫群組。

資料同步使用中樞和輪輻拓撲來同步資料。 您可以將同步群組中的其中一個資料庫定義為「中樞資料庫」。 其餘的資料庫則是成員資料庫。 只有中樞和個別成員之間才會進行同步。

  • 中樞資料庫必須是 Azure SQL Database。
  • 成員資料庫可以是 Azure SQL Database 或 SQL Server 執行個體中的資料庫。
  • 同步中繼資料資料庫包含「資料同步」的中繼資料和記錄。「同步中繼資料」資料庫必須是與中樞資料庫位於相同區域的 Azure SQL Database。 「同步中繼資料」資料庫由客戶所建立並擁有。 您在每個區域和訂用帳戶只能有一個「同步中繼資料」資料庫。 當同步群組或同步代理程式存在時,無法刪除或重新命名「同步中繼資料」資料庫。 Microsoft 建議您建立新的空白資料庫作為同步中繼資料資料庫。 資料同步會在此資料庫中建立資料表,並頻繁執行工作負載。

注意

如果您使用內部部署資料庫當做成員資料庫,則必須安裝和設定本機同步代理程式

Sync data between databases

同步群組具有下列屬性:

  • 同步結構描述說明要同步的資料。
  • 同步處理方向可以是雙向或只有單向。 也就是說,同步處理方向可以是「中樞到成員」或是「成員到中樞」,或兩者皆可。
  • 同步處理間隔說明了進行同步處理的頻率。
  • 衝突解決原則是群組層級原則,可以是中樞獲勝成員獲勝

使用時機

如果 Azure SQL Database 或 SQL Server 中,數個資料庫之間的資料需要保持在最新狀態,則資料同步便可發揮功效。 以下是資料同步主要的使用案例:

  • 混合式資料同步:使用資料同步,您可以讓 SQL Sever 與 Azure SQL Database 之間的資料保持同步,以啟用混合式應用程式。 此功能對於考慮移轉至雲端,而且想要將部分應用程式放在 Azure 的客戶很有吸引力。
  • 分散式應用程式:在許多情況下,將不同的工作負載分散到不同的資料庫會有好處。 例如,如果您有大型的實際執行資料庫,但也必須針對這些資料執行報告或分析工作負載,此時有第二個資料庫分擔這額外的工作負載就很有幫助。 這個方法可以減少對您實際執行工作負載的效能影響。 您可以使用「資料同步」,讓這兩個資料庫保持同步。
  • 全域分散式應用程式:許多企業橫跨多個區域,甚至橫跨多個國家/區域。 若要盡可能降低網路延遲,最好讓資料靠近您所在的區域。 使用資料同步,您就可以輕鬆地讓全世界各個區域中的資料庫保持同步。

在下列案例中,資料同步並不是最佳的解決方案:

案例 某些建議的解決方案
災害復原 Azure 異地備援備份
讀取級別 針對唯讀查詢工作負載,使用唯讀複本進行負載平衡
ETL (OLTP 到 OLAP) Azure Data FactorySQL Server Integration Services
SQL Server 移轉至 Azure SQL Database。 不過,您可以在完成移轉之後使用 SQL 資料同步,以確保來源和目標保持同步。 Azure 資料庫移轉服務

運作方式

  • 追蹤資料變更:資料同步使用 insert、update 和 delete 觸發程序追蹤變更。 變更會記錄在使用者資料庫中的資料表。 BULK INSERT 依預設不會引發觸發程序。 如果未指定 FIRE_TRIGGERS,便不會執行插入觸發程序。 新增 FIRE_TRIGGERS 選項,資料同步就能追蹤那些插入。
  • 同步處理資料:資料同步是以「中樞和輪輻」的模型進行設計。 中樞會與每個成員個別同步。 中樞的變更內容會下載到成員,而成員的變更內容會接著上傳到中樞。
  • 解決衝突:資料同步提供兩個衝突解決選項:中樞獲勝成員獲勝
    • 如果您選取 [中樞獲勝],中樞的變更永遠會覆寫成員的變更。
    • 如果您選取 [成員獲勝],成員的變更永遠會覆寫中樞的變更。 如果有多個成員,最終的值則取決於哪一個成員先同步。

和異動複寫進行比較

資料同步 異動複寫
優點 - 主動-主動支援
- 在內部部署與 Azure SQL Database 之間雙向進行
- 更低的延遲性
- 交易一致性
- 移轉後重複使用現有的拓撲
-Azure SQL 受控執行個體支援
缺點 - 無交易一致性
- 更高的效能影響
- 無法從 Azure SQL 資料庫發佈
- 高維護成本

注意

SQL 資料同步的私人連結與 Azure Private Link 不同。

新的私人連結功能可讓您選擇服務管理的私人端點,以在資料同步處理程序期間,於同步服務與您的成員/中樞資料庫之間建立安全的連接。 服務管理的私人端點,是特定虛擬網路和子網路內的私人 IP 位址。 在資料同步中,服務管理的私人端點是由 Microsoft 所建立,並由資料同步服務專門用於指定的同步作業。

在設定私人連結之前,請先閱讀功能的一般需求

Private link for Data Sync

注意

您必須在同步群組的部署期間,或透過使用 PowerShell,在 Azure 入口網站的私人端點連接頁面中,手動核准服務管理的私人端點。

開始使用

在 Azure 入口網站中設定資料同步

使用 PowerShell 設定資料同步

使用 REST API 設定資料同步

檢閱資料同步最佳做法

發生錯誤了嗎?

一致性與效能

最終一致性

由於資料同步是以觸發程序為基礎,因此無法保證交易一致性。 Microsoft 保證最終會進行所有變更,且資料同步不會造成資料遺失。

效能影響

資料同步使用 insert、update 和 delete 觸發程序追蹤變更。 其會在使用者資料庫中建立側邊資料表,以便進行變更追蹤。 這些變更追蹤活動會影響您的資料庫工作負載。 請評估您的服務層級,如有必要則請升級。

在建立同步群組期間佈建和取消佈建、更新和刪除也可能會影響資料庫效能。

需求及限制

一般需求

  • 每個資料表都必須有主索引鍵。 請勿變更任何資料列的主索引鍵值。 如果您必須變更主索引鍵值,請刪除資料列,再利用新的主索引鍵值重新建立。

重要

變更現有主索引鍵的值將會導致下列錯誤行為:

  • 雖然同步處理不會回報任何問題,但可能會遺失中樞和成員之間的資料。
  • 由於主索引鍵變更,追蹤資料表會具有來源的非現有資料列,進而使同步處理失敗。
  • 同步成員和中樞都必須啟用快照集隔離。 如需詳細資訊,請參閱 SQL Server 中的快照集隔離

  • 若要使用資料同步的私人連結,成員和中樞資料庫都必須裝載於 Azure 中 (相同或不同區域),並屬於相同的雲端類型 (例如公用雲端或政府雲端)。 此外,若要使用私人連結,則裝載中樞和成員伺服器的訂用帳戶必須註冊 Microsoft.Network 資源提供者。 最後,您必須在同步設定期間,於 Azure 入口網站的私人端點連接區段中,或透過 PowerShell,手動核准資料同步的私人連結。 如需如何核准私人連結的相關資訊,請參閱設定 SQL 資料同步。核准服務管理的私人端點後,同步服務和成員/中樞資料庫之間的所有通訊,都會透過私人連結進行。 您可以更新現有的同步群組以啟用此功能。

一般限制

  • 資料表的識別欄位必須是主索引鍵。
  • 主索引鍵不能具有下列資料類型:sql_variant、binary、varbinary、image、xml。
  • 當您使用下列資料類型作為主要索引鍵時請務必謹慎,原因是支援的有效位數只到秒:time、datetime、datetime2、datetimeoffset。
  • 物件 (資料庫、資料表和資料行) 的名稱不能包含可列印的字元句號 (.)、左括弧 ([),或右括弧 (])。
  • 資料表名稱不能包含可列印的字元:! " # $ % ' ( ) * + - 或空格。
  • 不支援 Microsoft Entra (以前稱為 Azure Active Directory) 驗證。
  • 如果資料表具有相同名稱,但結構描述不同 (例如 dbo.customerssales.customers),則只有其中一個資料表可新增至同步作業中。
  • 不支援具有使用者定義資料類型的資料行。
  • 不支援在不同的訂用帳戶之間移動伺服器。
  • 如果兩個主索引鍵僅大小寫不同 (例如 Foofoo),則資料同步將不會支援此案例。
  • 資料同步不支援截斷資料表作業 (不會追蹤變更)。
  • 不支援使用 Azure SQL 超大規模資料庫作為中樞,或使用同步中繼資料資料庫。 不過,超大規模資料庫可以是資料同步拓撲中的成員資料庫。
  • 記憶體最佳化資料表不受支援。
  • 無法自動複寫結構描述的變更內容。 您可以建立自訂解決方案,以自動執行結構描述變更複寫
  • 資料同步只支援下列兩個索引屬性:Unique、Clustered/Non-Clustered。 不支援索引的其他屬性,例如 IGNORE_DUP_KEY 或 WHERE 篩選述詞等,而且即使來源索引已設定這些屬性集,仍會在不使用這些屬性的情況下佈建目的地索引。
  • Azure Elastic 作業資料庫不能當做 SQL 資料同步的中繼資料資料庫使用,反之亦然。
  • 總帳資料庫不支援 SQL 資料同步。

不支援的資料類型

  • FileStream
  • SQL/CLR UDT
  • XMLSchemaCollection (支援 XML)
  • Cursor、RowVersion、Timestamp、Hierarchyid

不支援的資料行類型

資料同步無法同步處理唯讀或系統產生的資料行。 例如:

  • 計算資料行。
  • 適用於時態表的系統所產生的資料行。

服務和資料庫維度的限制

維度 限制 因應措施
任何資料庫可以隸屬的同步群組數目上限。 5
單一同步群組中的端點數目上限 30
單一同步群組中的內部部署端點數目上限。 5 建立多個同步群組
資料庫名稱、資料表名稱、結構描述名稱和資料行名稱 每個名稱 50 個字元
一個同步群組中的資料表 500 建立多個同步群組
一個同步群組中一個資料表中的資料行 1000
一個資料表上的資料列大小 24 Mb

注意

如果只有一個同步群組,則在單一同步群組中最多可有 30 個端點。 如果有多個同步群組,則所有同步群組之間的端點總數不能超過 30 個。 如果資料庫屬於多個同步群組,系統會將它計算為多個端點,而不是一個。

網路需求

注意

如果您使用同步私人連結,則不適用於這些網路需求。

建立同步群組時,資料同步服務需要連接到中樞資料庫。 建立同步群組時,Azure SQL 伺服器的設定 Firewalls and virtual networks 必須具有下列設定:

  • 拒絕公用網路存取必須設為關閉
  • 允許 Azure 服務和資源存取此伺服器必須設為,或者,您必須針對資料同步服務所用的 IP 位址建立 IP 規則。

建立並佈建同步群組後,便可停用這些設定。 同步代理程式直接連接到中樞資料庫,您可以使用伺服器的防火牆 IP 規則,或私人端點,以允許代理程式存取中樞伺服器。

注意

如果您變更同步群組的結構描述設定,則必須允許資料同步服務再次存取伺服器,才能重新佈建中樞資料庫。

區域資料落地

如果您同步處理相同區域內的資料,SQL 資料同步不會儲存/處理服務執行個體部署所在區域以外的客戶資料。 如果您在不同區域之間同步處理資料,SQL 資料同步會將客戶資料複寫至配對區域。

SQL 資料同步常見問題集

SQL 資料同步服務的成本為何?

SQL 資料同步服務本身不會收取任何費用。 不過,當您將資料移入或移出 SQL 資料庫執行個體時,仍需支付資料傳輸費用。 如需詳細資訊,請參閱資料傳輸費用

哪些區域支援資料同步?

SQL 資料同步會在以下所有區域內上市。

是否需要 SQL Database 帳戶?

是。 您必須具有可裝載中樞資料庫的 SQL Database 帳戶。

資料同步能否僅在 SQL Server 資料庫之間進行?

無法直接進行。 您可以間接在 SQL Server 資料庫之間進行同步作業,不過,必須先在 Azure 建立中樞資料庫,接著將內部部署資料庫新增到同步群組。

能否在屬於不同訂用帳戶的 Azure SQL Database 資料庫之間,設定資料同步並進行同步作業?

是。 即使訂用帳戶屬於不同的租用戶,仍可以針對屬於資源群組的資料庫 (由不同訂用帳戶所擁有),設定資料庫之間的同步作業。

  • 如果訂用帳戶屬於同一個租用戶,且您具有所有訂用帳戶的權限,則可以在 Azure 入口網站中設定同步群組。
  • 否則,您必須使用 PowerShell 來新增同步成員。

能否在屬於不同雲端 (如 Azure 公用雲端和由 21Vianet 營運的 Azure) 的 SQL Database 資料庫之間,設定資料同步並進行同步作業?

是。 您可以在屬於不同雲端的資料庫之間設定同步作業。 您必須使用 PowerShell,新增屬於不同訂用帳戶的同步成員。

能否使用資料同步將生產環境資料庫的資料植入空白資料庫,然後同步處理資料?

是。 請從原始結構描述編寫結構描述,藉此在新的資料庫中手動建立結構描述。 建立結構描述之後,請將資料表新增到同步群組,以複製資料並讓資料保持同步。

應該使用 SQL 資料同步來備份及還原資料庫嗎?

不建議使用 SQL 資料同步來建立資料的備份。 您無法備份並還原到特定點時間,因為 SQL 資料同步處理並未設定版本。 此外,SQL 資料同步不會備份其他 SQL 物件 (例如預存程序),且不會快速進行同等的還原作業。

如需建議的備份技術,請參閱複製 Azure SQL Database 中的資料庫

資料同步是否可以同步加密的資料表和資料行?

  • 如果資料庫是使用 Always Encrypted,您就只能同步「未」加密的資料表和資料行。 您無法同步加密的資料行,因為資料同步無法解密資料。
  • 如果資料行是使用資料行層級加密 (CLE),則只要資料列大小小於 24 Mb 的大小上限,您就可以同步資料行。 資料同步會將金鑰加密的資料行 (CLE) 視為一般的二進位資料。 若要解密其他同步成員中的資料,您必須具有相同的憑證。

SQL 資料同步是否支援定序?

是。 在下列案例中 SQL 資料同步可支援設定定序設定:

  • 如果所選取的同步結構描述資料表尚未在您的中樞或成員資料庫中,則當您部署同步群組時,此服務會在空白的目的地資料庫中,使用所選取的定序設定,自動建立對應的資料表和資料行。
  • 如果要同步處理的資料表已存在於您的中樞和成員資料庫中,則 SQL 資料同步會要求主索引鍵資料行在中樞與成員資料庫之間有相同的定序,才能成功部署同步群組。 主索引鍵資料行以外的資料行沒有任何定序限制。

SQL 資料同步是否支援同盟?

同盟根資料庫可使用於 SQL 資料同步服務 (無任何限制)。 您無法將同盟資料庫端點新增至目前的 SQL 資料同步版本。

能否使用自備資料庫 (BYOD) 功能,同步處理 Dynamics 365 的匯出資料?

Dynamics 365 自備資料庫功能,可讓系統管理員將應用程式中的資料實體,匯出至自身的 Microsoft Azure SQL 資料庫。 如果資料是使用增量推送進行匯出 (不支援完整推送),且目標資料庫中的啟用觸發程序設定為,您便可使用資料同步,將該資料同步至其他資料庫。

如何在容錯移轉群組中建立資料同步以支援災害復原?

  • 若要確保容錯移轉區域中的資料同步作業與主要區域相同,在容錯移轉之後,您必須在容錯移轉區域中手動重新建立與主要區域相同設定的同步群組。

後續步驟

更新已同步資料庫的結構描述

是否必須更新同步群組中的資料庫結構描述? 無法自動複寫結構描述的變更內容。 如需某些解決方案,請參閱下列文章:

監視及疑難排解

SQL 資料同步是否能如期運行? 若要監視活動並針對問題進行疑難排解,請參閱下列文章:

深入了解 Azure SQL Database

如需 Azure SQL Database 的詳細資訊,請參閱下列文章: