Azure SQL 資料同步最佳做法
適用於:Azure SQL 資料庫
重要
SQL 資料同步將於 2027 年 9 月 30 日淘汰。 請考慮移轉至替代資料複寫/同步處理解決方案。
本文描述 Azure SQL 資料同步的最佳做法。
如需 SQL 資料同步的概觀,請參閱什麼是適用於 Azure 的 SQL 資料同步?
安全性與可靠性
用戶端代理程式
- 使用具有網路服務存取權的最低權限使用者帳戶安裝用戶端代理程式。
- 在與安裝 SQL Server 不同的伺服器上,安裝用戶端代理程式。
- 請勿向多個代理程式註冊內部部署資料庫。
- 即使是要同步處理相異同步群組的不同資料表,也請避免該行為。
- 如果您向多個用戶端代理程式註冊內部部署資料庫,當您刪除其中一個同步群組時將會帶來挑戰。
擁有最低必要權限的資料庫帳戶
針對同步安裝:
- SQL Server 權限:CREATE/ALTER TABLE、ALTER DATABASE、CREATE PROCEDURE、SELECT/ALTER SCHEMA、CREATE TYPE。 這些權限 (以及其他權限) 包含在內建資料庫角色
ddl_admin
中。 - 在資源群組層級,需要 SQL DB 參與者角色的成員資格。 如需詳細資訊,請參閱使用 Azure 入口網站指派 Azure 角色。 如果已指派參與者或擁有者等更廣泛的角色成員資格也可以。
- 訂閱層級的權限應該不是必要的,但可以提供一種簡化的 (雖然不是最低要求) 方式來為訂閱中的多個 Azure 資料同步實現提供必要的權限。 原始已淘汰的 API 需要這些 Azure RBAC 權限,但不應再使用。
- "Microsoft.Sql/locations/syncMemberOperationResults/read"
- "Microsoft.Sql/locations/syncAgentOperationResults/read"
- "Microsoft.Sql/locations/syncGroupOperationResults/read"
- SQL Server 權限:CREATE/ALTER TABLE、ALTER DATABASE、CREATE PROCEDURE、SELECT/ALTER SCHEMA、CREATE TYPE。 這些權限 (以及其他權限) 包含在內建資料庫角色
針對持續同步。
- SQL Server 權限:選取要同步處理之使用者資料表的 SELECT、INSERT、UPDATE 和 DELETE 權限。 使用者定義資料表類型的 EXECUTE 權限。
- SQL Server 權限:同步中繼資料和系統建立追蹤資料表的 SELECT、INSERT、UPDATE 和 DELETE 權限。 服務所建立預存程序的 EXECUTE 權限。
DataSync
結構描述會用於中樞和成員資料庫中的系統建立物件。dss
和TaskHosting
結構描述會用於同步中繼資料資料庫中的系統建立物件。
針對取消佈建。
- SQL Server 權限:同步處理的所有資料表上的 ALTER;同步中繼資料資料表上的 SELECT 和 DELETE;同步追蹤資料表、預存程序和使用者定義型別上的 CONTROL。
- 若要清除,請移除
DataSync
、dss
和TaskHosting
結構描述中的系統建立物件。
Azure SQL 資料庫 僅支援一組認證。 若要在此條件約束內完成這些工作,請考慮以下選項:
- 變更不同階段的認證 (例如,credentials1 適用於設定,credentials2 適用於持續)。
- 變更認證的權限 (也就是在設定同步處理後變更權限)。
稽核
建議您在同步群組的資料庫層級啟用稽核。 了解如何在 Azure SQL 資料庫 上啟用稽核或在 SQL Server 資料庫上啟用稽核。
安裝程式
資料庫考量與限制
資料庫大小
當您建立新的資料庫時,請設定大小上限,使其一律大於您所部署的資料庫。 如果您未將大小上限設為大於已部署的資料庫,同步處理將會失敗。 雖然 SQL 資料同步不提供自動成長,不過,您可以在資料庫建立之後執行 ALTER DATABASE
命令來增加它的大小。 確定您保持在資料庫大小限制內。
重要
SQL 資料同步會與每個資料庫一起儲存其他中繼資料。 在計算所需的空間時,請務必將這些中繼資料納入考量。 所增加的額外負荷量與資料表寬度 (例如,窄的資料表需要更多額外負荷) 和流量相關。
資料表考量與限制
選取資料表
您不需要將所有資料表加入同步群組中的資料庫內。 加入同步群組的資料表會影響效率和成本。 請根據商務需求將資料表和與其相依的資料表加入同步群組即可。
主索引鍵
同步群組中的每個資料表都必須有主索引鍵。 SQL 資料同步無法同步沒有主索引鍵的資料表。
在生產環境中使用 SQL 資料同步之前,請先測試初始和持續進行的同步處理效能。
空資料表提供最佳效能
空資料表在初始化階段提供最佳效能。 如果目標資料表是空的,則資料同步會使用大量插入來載入資料。 否則,資料同步會逐列比較並插入以檢查是否有衝突。 但是,如果不考慮效能,您可以在已經包含資料的資料表之間設定同步。
佈建目的地資料庫
SQL 資料同步提供基本資料庫自動佈建。
本節將討論 SQL 資料同步的佈建限制。
自動佈建限制
「SQL 資料同步」的自動佈建限制如下:
- 只選取會在目的地資料表中建立的資料行。 所有不屬於同步群組的資料行,都不會佈建在目的地資料表中。
- 只會針對所選資料行建立索引。 如果來源資料表索引具有不是同步群組一部分的資料行,那些索引便不會佈建在目的地資料表中。
- 不會佈建 XML 型別資料行的索引。
- 資料同步只支援下列兩個索引屬性:Unique、Clustered/Non-Clustered。 不支援索引的其他屬性,例如 IGNORE_DUP_KEY、Where 篩選述詞等,而且即使來源索引已設定這些屬性,仍會在不使用這些屬性的情況下佈建目的地索引。
- 不會佈建 CHECK 條件約束。
- 不會佈建來源資料表上的現有觸發程序。
- 不會在目的地資料庫上建立檢視和預存程序。
- 目的地資料表中不會針對外部索引鍵限制式重新建立 ON UPDATE CASCADE 和 ON DELETE CASCADE 動作。
- 如果 decimal 或 numeric 資料行的精確度大於 28,則 SQL 資料同步可能會在同步期間遇到轉換溢位問題。建議您將 decimal 或 numeric 資料行的精確度限制為小於或等於 28。
建議
- 唯有當您試用服務時,才能使用 SQL 資料同步自動佈建功能。
- 針對生產環境,佈建資料庫結構描述。
要在哪裡尋找中樞資料庫
企業至雲端案例
若要將延遲降至最低,請讓中樞資料庫靠近最集中的同步群組資料庫流量。
雲端至雲端案例
- 當同步群組中的所有資料庫都在一個資料中心時,中樞應該位於相同的資料中心。 此設定可減少延遲以及資料中心之間的資料傳輸成本。
- 同步群組中的資料庫在多個資料中心時,中樞應該位於與大多數的資料庫和資料庫流量相同的資料中心。
混合案例
請將前述指導方針套用在複雜的同步群組設定,例如混合企業到雲端和雲端到雲端等案例的設定。
Sync
避免慢速和高成本的首次同步處理
在本節中,我們會討論同步群組的首次同步處理。 了解如何預防首次同步處理花費過長的時間和不必要的成本。
首次同步處理的運作方式
當您建立同步群組時,請從只有一個資料庫的資料開始。 如果您在多個資料庫中均有資料,則 SQL 資料同步會將每個資料列視為需要解決的衝突。 解決衝突會導致首次同步處理進展緩慢。 如果您有多個容納資料的資料庫,首次同步處理可能需要耗費幾天到幾個月的時間,視資料庫大小而定。
如果資料庫位在不同的資料中心內,每個資料列都必須在不同資料中心之間移動。 這會導致首次同步處理的成本增加。
建議
可以的話,請從某一個同步群組資料庫的資料開始。
避免同步迴圈的設計
當同步群組中有循環參考時,就會形成同步迴圈。 在這種情況下,資料庫中的每項變更都會循環且無止盡地複寫到同步群組中的所有資料庫。
請務必避免同步迴圈,因為其會導致效能降低,且可能會大幅增加成本。
無法傳播的變更
未能傳播變更的原因
無法傳播變更的原因可能是以下其中之一:
- 結構描述/資料類型不相容。
- 在不可為 Null 的資料行中插入 Null。
- 違反外部索引鍵條件約束。
未能傳播變更時會發生什麼事?
- 同步群組顯示處於警告狀態。
- 詳細資料列示於入口網站 UI 記錄檢視器。
- 如果問題未解決達 45 天,資料庫會變成過期。
注意
這些變更無法傳播。 此時,唯一的復原方法是重新建立同步群組。
建議
透過入口網站和記錄介面,定期監視同步群組和資料庫健康狀態。
維護
避免資料庫和同步群組過期
同步群組或同步群組中的資料庫可能會過期。 當同步群組的狀態為過期時,其會停止運作。 當資料庫的狀態為過期時,可能會遺失資料。 建議您最好避免這種情況發生,而不是嘗試從中復原。
避免資料庫過期
資料庫已離線 45 天以上時,狀態會設定為過期。 若要避免資料庫變成過期狀態,請確認沒有任何資料庫離線 45 天以上。
避免同步群組過期
當同步群組內的任何變更無法傳播到其餘同步群組長達 45 天以上時,狀態會設定為過期。 若要避免同步群組變為過期狀態,請定期檢查同步群組的歷程記錄。 請確定所有衝突都已解決,且變更已成功傳播到整個同步群組資料庫。
同步群組可能會無法套用變更,原因包括以下其中之一:
- 資料表之間的結構描述不相容。
- 資料表之間的資料不相容。
- 在不允許 Null 值的資料行中插入具有 Null 值的資料列。
- 使用違反外部索引鍵條件約束的值更新資料列。
若要避免同步群組過期:
- 更新結構描述,以允許失敗資料列中包含的值。
- 更新外部索引鍵值,以包含失敗資料列內含的值。
- 更新失敗資料列中的資料值,以和目標資料庫中的結構描述或外部索引鍵相容。
避免取消佈建問題
在某些情況下,向用戶端代理程式取消註冊資料庫可能會導致同步處理失敗。
案例
- 同步群組 A 是使用 SQL 資料庫執行個體和 SQL Server 資料庫所建立,其與本機代理程式 1 相關聯。
- 相同的內部部署資料庫已向本機代理程式 2 註冊 (此代理程式並未與任何同步群組建立關聯)。
- 從本機代理程式 2 取消註冊內部部署資料庫,會移除內部部署資料庫之同步群組 A 的追蹤和中繼資料表。
- 同步群組 A 作業失敗,並發生下列錯誤:「目前的作業無法完成,因為資料庫未佈建以進行同步處理,或是您沒有同步設定資料表的權限。」
解決方法
若要避免這種情況發生,請勿向一個以上的代理程式註冊資料庫。
若要從這種情況中復原,請:
- 從資料庫所屬的每個同步群組移除資料庫。
- 將資料庫新增回剛才移除資料庫的每個同步群組。
- 部署每個受影響的同步群組 (此動作會佈建資料庫)。
修改同步群組
請勿嘗試從同步群組移除資料庫,然後編輯同步群組而不先部署其中一項變更。
相反地,請先從同步群組移除資料庫。 然後部署變更,並等候取消佈建完成。 取消佈建完成時,您可以編輯同步群組及部署變更。
如果您嘗試移除資料庫,然後編輯同步群組而不先部署其中一項變更,則其中一項作業會失敗。 入口網站介面也可能會呈現不一致的狀態。 發生這種情況時,您可以重新整理頁面以還原正確狀態。
避免結構描述重新整理逾時
如果您有複雜的同步結構描述,則在同步中繼資料資料庫有較低的 SKU (範例:基本) 時,可能會在結構描述重新整理期間遇到「作業逾時」。
解決方法
若要減輕此問題,請考慮擴大同步中繼資料資料庫資源。
相關內容
如需有關 SQL 資料同步的詳細資訊,請參閱:
- 概觀 - 使用 Azure SQL 資料同步,跨多個雲端和內部部署資料庫同步資料
- 設定 SQL 資料同步
- Data Sync Agent - 適用於 Azure SQL Data Sync 的 Data Sync Agent
- 監視 - 使用 Azure 監視器記錄監視 SQL 資料同步
- 疑難排解 - 為 Azure SQL 資料同步的問題進行疑難排解
- 更新同步結構描述
- 使用 Transact-SQL - 在 Azure SQL 資料同步中自動執行結構描述變更複寫
- 使用 PowerShell - 使用 PowerShell 更新現有同步群組中的同步結構描述
如需有關 SQL Database 的詳細資訊,請參閱: