適用於:Azure SQL 資料庫
重要
SQL 資料同步將於 2027 年 9 月 30 日淘汰。 請考慮移轉至替代資料複寫/同步處理解決方案。
SQL 資料同步 是一項建立在 Azure SQL Database 上的服務,你可以用來雙向同步選取的資料,跨多個資料庫,無論是本地端還是雲端。
Azure SQL 資料同步不支援Azure SQL 受控執行個體或Azure Synapse Analytics。
概觀
資料同步以「同步群組」的概念為基礎。 「同步群組」是您想要同步的資料庫群組。
資料同步使用中樞和輪輻拓撲來同步資料。 您可以將同步群組中的其中一個資料庫定義為「中樞資料庫」。 其餘的資料庫則是成員資料庫。 只有中樞和個別成員之間才會進行同步。
- 中樞資料庫必須是 Azure SQL 資料庫。
- 成員資料庫可以是 Azure SQL 資料庫 或 SQL Server 執行個體中的資料庫。
- 同步中繼資料資料庫包含「資料同步」的中繼資料和記錄。「同步中繼資料」資料庫必須是與中樞資料庫位於相同區域的 Azure SQL 資料庫。 「同步後設資料資料庫」是由客戶建立並擁有。 您在每個區域和訂用帳戶只能有一個「同步中繼資料」資料庫。 當同步群組或同步代理程式存在時,無法刪除或重新命名「同步中繼資料」資料庫。 Microsoft 建議您建立新的空白資料庫作為同步中繼資料資料庫。 資料同步會在此資料庫中建立資料表,並頻繁執行工作負載。
注意
如果您使用內部部署資料庫當做成員資料庫,則必須安裝和設定本機同步代理程式。
同步群組具有下列屬性:
- 同步結構描述說明要同步的資料。
- 同步方向可以是雙向,也可以僅單向進行:樞紐到成員、成員到樞紐,或兩者皆可。
- 同步處理間隔說明了進行同步處理的頻率。
- 衝突解決原則是群組層級原則,可以是中樞獲勝或成員獲勝。
使用時機
如果 Azure SQL Database 或 SQL Server 中,數個資料庫之間的資料需要保持在最新狀態,則資料同步便可發揮功效。 以下是資料同步主要的使用案例:
- 混合式資料同步:使用資料同步,您可以讓 SQL Sever 與 Azure SQL 資料庫 之間的資料保持同步,以啟用混合式應用程式。 此功能對於考慮移轉至雲端,而且想要將部分應用程式放在 Azure 的客戶可能很有吸引力。
- 分散式應用程式:在許多情況下,將不同的工作負載分散到不同的資料庫會有好處。 例如,如果您有大型的實際執行資料庫,但也必須針對這些資料執行報告或分析工作負載,此時有第二個資料庫分擔這額外的工作負載就很有幫助。 這個方法可以減少對您實際執行工作負載的效能影響。 您可以使用「資料同步」,讓這兩個資料庫保持同步。
- 全域分散式應用程式:許多企業橫跨多個區域,甚至橫跨多個國家/區域。 若要盡可能降低網路延遲,最好讓資料靠近您所在的區域。 使用資料同步,您就可以輕鬆地讓全世界各個區域中的資料庫保持同步。
在下列案例中,資料同步並不是最佳的解決方案:
| 情境 | 某些建議的解決方案 |
|---|---|
| 災害復原 | Azure SQL 資料庫 中的自動備份 |
| 讀取範圍 | 使用唯讀複本來卸載唯讀查詢工作負載 |
| ETL (OLTP 到 OLAP) | Azure Data Factory 或 SQL Server Integration Services |
| SQL Server 移轉至 Azure SQL 資料庫。 不過,您可以在完成移轉之後使用 SQL 資料同步,以確保來源和目標保持同步。 | Azure 資料庫移轉服務 |
運作方式
-
資料變更追蹤:資料同步 透過插入、更新與刪除觸發器追蹤變更。 變更會記錄在使用者資料庫中的一個附加資料表中。
BULK INSERT預設不會觸發扳機。 如果未指定FIRE_TRIGGERS,則不會執行任何插入觸發器。 新增FIRE_TRIGGERS這個選項,讓 資料同步 能追蹤那些插入。 - 同步處理資料:資料同步是以「中樞和輪輻」的模型進行設計。 集線器會與每位成員分別同步。 中樞的變更內容會下載到成員,而成員的變更內容會接著上傳到中樞。
-
解決衝突:資料同步提供兩個衝突解決選項:中樞獲勝或成員獲勝。
- 如果您選取 [中樞獲勝],中樞的變更永遠會覆寫成員的變更。
- 如果您選取 [成員獲勝],成員的變更永遠會覆寫中樞的變更。 如果有多個成員,最終的值則取決於哪一個成員先同步。
與交易複製比較
| 資料同步 | 事務性複寫 | |
|---|---|---|
| 優點 | - 主動-主動支援 - 本地端與 Azure SQL Database 之間的雙向傳輸 |
- 更低的延遲性 - 交易一致性 - 移轉後重複使用現有的拓撲 -Azure SQL 受控執行個體支援 |
| 缺點 | - 無交易一致性 - 更高的效能影響 |
- 無法從 Azure SQL 資料庫發佈 - 高維護成本 |
謹慎
SQL 資料同步需要 SQL 認證 才能連接樞紐及成員資料庫。 SQL 資料同步 不支援 Microsoft Entra ID 認證。
由於 SQL 認證依賴靜態密碼,因此無法受益於現代的多重驗證(MFA)、條件存取或受管身份等保護措施。 這種依賴會增加整個 SQL 實例面臨憑證竊取、暴力破解攻擊,以及密碼輪換與政策執行的營運負擔。
若有可能,優先選擇支援 Microsoft Entra 認證或受管理身份的解決方案。 由於 SQL 資料同步 即將退役,請遷移到符合貴組織安全標準的替代方案。
資料同步的私人連結
注意
SQL 資料同步的私人連結與 Azure Private Link 不同。
新的私人連結功能可讓您選擇服務管理的私人端點,以在資料同步處理程序期間,於同步服務與您的成員/中樞資料庫之間建立安全的連接。 服務管理的私人端點,是特定虛擬網路和子網路內的私人 IP 位址。 在資料同步中,服務管理的私人端點是由 Microsoft 所建立,並由資料同步服務專門用於指定的同步作業。
在設定私人連結之前,請先閱讀功能的一般需求。
注意
您必須在同步群組部署時,或透過使用 PowerShell,在 Azure 入口網站的私人端點連接頁面中,手動核准由服務管理的私人端點。
開始
在 Azure 入口網站中設定資料同步
使用 PowerShell 設定資料同步
使用 REST API 設定資料同步
檢閱資料同步最佳做法
發生錯誤嗎?
一致性與效能
最終一致性
由於 資料同步 是基於觸發器,因此無法保證交易一致性。 Microsoft 保證 資料同步 最終會完成所有變更,且不會造成資料遺失。
效能影響
資料同步使用 insert、update 和 delete 觸發器追蹤變更。 其會在使用者資料庫中建立側邊資料表,以便進行變更追蹤。 這些變更追蹤活動會影響您的資料庫工作負載。 請評估您的服務層級,如有必要則請升級。
在同步群組的建立、更新和刪除過程中,進行佈建和解除佈建可能會影響資料庫效能。
需求及限制
一般需求
- 每個資料表都必須有主索引鍵。 請勿變更任何資料列的主鍵值。 如果您必須變更主索引鍵值,請刪除資料列,再利用新的主索引鍵值重新建立。
重要
更改現有主鍵的值會導致以下錯誤行為:
- 即使同步沒有回報問題,集線器和成員之間的資料仍可能遺失。
- 同步失敗是因為追蹤表中來源的列不存在,這是主鍵的變更所致。
同步成員和中樞都必須啟用快照集隔離。 如需詳細資訊,請參閱 SQL Server 中的快照集隔離。
要使用 資料同步 私有連結,成員資料庫與集線器資料庫必須都托管在 Azure(相同或不同區域),且屬於同一雲端類型(例如兩者皆在公有雲或兩者皆在政府雲中)。 同時,註冊
Microsoft.Network承載中心及會員伺服器的訂閱資源提供者。 您必須在同步設定時手動核准 資料同步 的私有連結,無論是在 Azure 入口網站的私有端點連線區塊,或是透過 PowerShell。 欲了解更多如何核准私有連結的資訊,請參閱教學:在 Azure SQL Database 與 SQL Server 中設定資料庫間的 SQL 資料同步。 一旦你核准服務管理的私有端點,同步服務與成員/樞紐資料庫之間的所有通訊都會透過私有連結進行。 你可以更新現有的同步群組來啟用這個功能。
一般限制
- 資料表的身份欄不能不是主要鍵。
- 主索引鍵不能具有下列資料類型:sql_variant、binary、varbinary、image、xml。
- 當您將下列資料類型用作主要鍵時請務必謹慎,因為支援的精度僅到秒:time、datetime、datetime2、datetimeoffset。
- 物件 (資料庫、資料表和資料行) 的名稱不能包含可列印的字元句號 (
.)、左括弧 ([),或右括弧 (])。 - 資料表名稱不能包含可列印的字元:
! " # $ % ' ( ) * + -或空格。 - 不支援 Microsoft Entra (以前稱為 Azure Active Directory) 驗證。
- 如果有同名但結構不同的資料表(例如,
dbo.customers和sales.customers),你只能將其中一個資料表加入同步群組。 - 不支援使用者定義資料類型的欄位。
- 不支援在不同的訂用帳戶之間移動伺服器。
- 如果兩個主索引鍵僅大小寫不同 (例如
Foo和foo),則資料同步將不會支援此案例。 - 資料同步不支援截斷資料表作業 (不會追蹤變更)。
- 不支援將 Azure SQL Hyperscale 資料庫作為中樞或同步中繼資料資料庫使用。 不過,超大規模資料庫可以是資料同步拓撲中的成員資料庫。
- 記憶體最佳化資料表不受支援。
- 架構變更不會自動複製。
- 資料同步 僅支援以下兩種索引屬性:獨特、叢集/非叢集。 不支援索引的其他屬性,例如
IGNORE_DUP_KEY或WHERE篩選述詞等,而且即使來源索引已設定這些屬性集,仍會在不使用這些屬性的情況下佈建目的地索引。 - Azure Elastic 作業資料庫不能當做 SQL 資料同步的中繼資料資料庫使用,反之亦然。
- 總帳資料庫不支援 SQL 資料同步。
- 資料同步 不是災難復原或高可用性工具,也不會同步自己的同步群組資訊。 資料同步 沒有自動災難復原功能。
- 資料同步 設計上不支援網路安全邊界。 資料同步 是以代理服務運作,而非 Azure 資源,因此沒有完整限定的網域名稱或 IP 位址可供撰寫邊界規則。 邊界會阻擋 資料同步 在轉換和強制模式下所需的網路路徑,沒有任何存取規則能讓它運作。 如果你的邏輯伺服器有邊界,請遷移到支援網路安全邊界的資料移動解決方案。
不支援的資料類型
- FileStream
- SQL/CLR UDT
- XMLSchemaCollection (支援 XML)
- Cursor、 RowVersion、 Timestamp、 Hierarchyid
不支援的資料行類型
資料同步工具無法同步唯讀或系統自動產生的資料行。 例如:
- 計算資料行
- 系統產生的時態表欄
服務和資料庫維度的限制
| 維度 | 限制 | 因應措施 |
|---|---|---|
| 任何資料庫可以隸屬的同步群組數目上限。 | 5 | |
| 單一同步群組中的端點數目上限 | 30 | |
| 單一同步群組中的內部部署端點數目上限。 | 5 | 建立多個同步群組 |
| 資料庫名稱、資料表名稱、結構描述名稱和資料行名稱 | 每個名稱 50 個字元 | |
| 一個同步群組中的資料表 | 500 | 建立多個同步群組 |
| 一個同步群組中一個資料表中的資料行 | 1000 | |
| 一個資料表上的資料列大小 | 24 MB |
注意
如果只有一個同步群組,可能最多會有 30 個端點。 如果有多個同步群組,所有同步群組的終端總數不得超過 30 個。 如果資料庫屬於多個同步群組,它會被視為多個端點,而非單一端點。
網路需求
注意
如果你使用 Sync Private Link,這些網路要求就不適用。
建立同步群組時,資料同步服務需要連接到中樞資料庫。 建立同步群組時,Azure SQL 伺服器的設定 Firewalls and virtual networks 必須具有下列設定:
- 拒絕公用網路存取必須設為關閉。
- 允許 Azure 服務和資源存取此伺服器必須設為是,或者,您必須針對資料同步服務所用的 IP 位址建立 IP 規則。
建立並佈建同步群組後,便可停用這些設定。 同步代理程式直接連接到中樞資料庫,您可以使用伺服器的防火牆 IP 規則,或私人端點,以允許代理程式存取中樞伺服器。
注意
如果你更改了同步群組的結構設定,你需要允許 資料同步 服務再次存取伺服器,這樣才能重新配置集線器資料庫。
區域資料駐留
如果您同步處理相同區域內的資料,SQL 資料同步不會儲存/處理服務執行個體部署所在區域以外的客戶資料。 如果您在不同區域之間同步處理資料,SQL 資料同步會將客戶資料複寫至配對區域。
SQL 資料同步常見問題集
SQL 資料同步服務的成本為何?
SQL 資料同步服務本身不會收取任何費用。 不過,當您將資料移入或移出 SQL 資料庫執行個體時,仍需支付資料傳輸費用。 如需詳細資訊,請參閱資料傳輸費用。
哪些區域支援資料同步?
SQL 資料同步在所有區域均可用。
是否需要 Azure SQL Database 帳戶?
是。 您必須有 Azure SQL Database 帳戶才能裝載中樞資料庫。
我是否可以僅在 SQL Server 資料庫之間使用資料同步?
不直接。 您可以間接在 SQL Server 資料庫之間進行同步作業,不過,必須先在 Azure 建立中樞資料庫,接著將內部部署資料庫新增到同步群組。
能否在屬於不同訂用帳戶的 Azure SQL 資料庫之間設定資料同步?
是。 您可以設定不同訂用帳戶所擁有之資源群組的資料庫之間的同步,即使這些訂用帳戶屬於不同的租用戶。
- 如果訂用帳戶屬於同一個租用戶,且您具有所有訂用帳戶的權限,則可以在 Azure 入口網站中設定同步群組。
- 否則,您必須使用 PowerShell 來新增同步成員。
- Private Link 在跨租戶情境下不被支援。
能否在屬於不同雲端 (如 Azure 公用雲端和由 21Vianet 營運的 Azure) 的 SQL Database 資料庫之間,設定資料同步並進行同步作業?
資料同步 不支援跨雲端同步。
能否使用資料同步將生產資料庫的資料植入空白資料庫,再進行同步?
是。 從原始資料庫撰寫結構描述腳本,然後在新的資料庫中手動建立結構描述。 建立結構描述之後,請將資料表新增到同步群組,以複製資料並讓資料保持同步。
應該使用 SQL 資料同步來備份及還原資料庫嗎?
不建議使用 SQL 資料同步來建立資料的備份。 您無法備份並還原到特定點時間,因為 SQL 資料同步處理並未設定版本。 此外,SQL 資料同步不會備份其他 SQL 物件 (例如預存程序),且不會快速進行同等的還原作業。
如需一項建議的備份技術,請參閱在 Azure SQL 資料庫中複製資料庫的交易一致性複本。
資料同步是否可以同步加密的資料表和資料行?
- 如果資料庫是使用 Always Encrypted,您就只能同步「未」加密的資料表和資料行。 您無法同步加密的資料行,因為資料同步無法解密資料。
- 如果欄位使用 Column-Level 加密(CLE),只要列大小小於最大 24 MB 大小,就可以同步欄位。 資料同步會將金鑰加密的資料行 (CLE) 視為一般的二進位資料。 若要解密其他同步成員中的資料,您必須具有相同的憑證。
SQL 資料同步是否支援定序?
是。 在下列案例中 SQL 資料同步可支援設定定序設定:
- 如果所選取的同步結構描述資料表尚未在您的中樞或成員資料庫中,則當您部署同步群組時,此服務會在空白的目的地資料庫中,使用所選取的定序設定,自動建立對應的資料表和資料行。
- 如果要同步處理的資料表已存在於您的中樞和成員資料庫中,則 SQL 資料同步會要求主索引鍵資料行在中樞與成員資料庫之間有相同的定序,才能成功部署同步群組。 除了主鍵欄以外,其他欄沒有任何定序限制。
SQL 資料同步是否支援同盟?
你可以無限制地使用結合根資料庫搭配 SQL 資料同步。 你無法將聯邦資料庫端點加入目前版本的 SQL 資料同步。
是否可以使用資料同步(資料同步)來同步處理從 Dynamics 365 匯出的資料,並使用自備資料庫 (BYOD) 功能?
Dynamics 365 自備資料庫功能,可讓系統管理員將應用程式中的資料實體,匯出至自身的 Microsoft Azure SQL 資料庫。 如果資料是使用增量推送進行匯出 (不支援完整推送),且目標資料庫中的啟用觸發程序設定為是,您便可使用資料同步,將該資料同步至其他資料庫。
如何在故障轉移群組中建立數據同步以支援災難恢復?
SQL 資料同步不提供自動故障轉移或災害復原功能。 如果資料庫切換到其他區域,同步群組就會停止運作。 手動在故障轉移區域用與主要區域相同的設定重新建立同步群組。
相關內容
監視及疑難排解
SQL 資料同步是否能如期運行? 若要監視活動並針對問題進行疑難排解,請參閱下列文章:
深入了解 Azure SQL 資料庫
欲了解更多關於 Azure SQL Database 的資訊,請參閱以下文章: