針對 SQL 資料同步的問題進行疑難排解
適用於:Azure SQL 資料庫
重要
SQL 資料同步將於 2027 年 9 月 30 日淘汰。 請考慮移轉至替代資料複寫/同步處理解決方案。
此文章描述如何針對 Azure 中 SQL 資料同步的已知問題進行疑難排解。 如果有解決問題的方式,則會在這裡提供。
如需 SQL 資料同步的概觀,請參閱什麼是適用於 Azure 的 SQL 資料同步?
SQL 資料同步不支援 Azure SQL 受控執行個體或 Azure Synapse Analytics。
同步問題
與用戶端代理程式建立關聯的內部部署資料庫的入口網站 UI 同步失敗
在 SQL 資料同步入口網站 UI 上,與用戶端代理程式相關聯之內部部署資料庫的同步失敗。 在執行代理程式的本機電腦上,您會在事件記錄檔看到 System.IO.IOException
錯誤。 錯誤說明磁碟空間不足。
原因:。 磁碟機沒有足夠的空間。
解決方案。 在 %TEMP% 目錄所在的磁碟機上建立更多空間。
我的同步群組停頓於處理中狀態
SQL 資料同步中的同步群組已處於處理中狀態一段時間。 它不會回應停止命令,而記錄中未顯示新的項目。
下列任何一種情況都可能導致同步群組停滯於處理狀態中:
原因:。 用戶端代理程式已離線
解決方案。 確定用戶端代理程式已上線,然後再試一次。
原因。 用戶端代理程式已解除安裝或遺失。
解決方案。 用戶端代理程式已解除安裝或遺失:
- 如果檔案存在,請從 SQL 資料同步安裝資料夾中移除代理程式的 XML 檔案。
- 在內部部署電腦上安裝代理程式 (可在相同或不同電腦上)。 然後提交在入口網站中為顯示為離線之代理程式所產生的代理程式金鑰。
原因。 SQL 資料同步服務已停止。
解決方案。 重新啟動 SQL 資料同步服務。
- 在 [開始] 功能表中,搜尋 [服務]。
- 在搜尋結果中,選取 [服務]。
- 尋找 SQL 資料同步服務。
- 如果服務狀態是 [已停止],請以滑鼠右鍵按一下服務名稱,然後選取 [啟動]。
注意
如果上述資訊不會將您的同步群組移出處理狀態,Microsoft 支援服務可以重設同步群組的狀態。 若要重設同步群組狀態,請在 Microsoft Q&A 的 Azure SQL 資料庫問題頁面中,建立文章。 在文章中,包含需要重設之群組的訂用帳戶識別碼和同步群組識別碼。 Microsoft 支援服務工程師會回應您的貼文,並讓您知道何時重設狀態。
我在資料表中看到錯誤的資料
如果資料表有相同的名稱,但在同步中併入了來自不同資料庫結構描述,在同步之後,您會在資料表中看到發生錯誤的資料。
原因。 SQL 資料同步佈建程序對於具有相同名稱但位在不同結構描述的資料表會使用相同的追蹤資料表。 因此,來自這兩個資料表的變更會反映在相同的追蹤資料表。 這會導致在同步期間產生錯誤的資料變更。
解決方案。 確定同步牽涉的資料表名稱彼此不同,即使資料裝屬於資料庫中的不同結構描述。
我在同步成功之後看到不一致的主索引鍵資料
同步報告為成功,且記錄檔顯示沒有任何失敗或略過的資料列,但您發現主索引鍵資料在同步群組中的資料庫之間不一致。
原因。 此結果是原先的設計。 任何主索引鍵資料行中的變更都會導致主索引鍵已變更的資料列中資料不一致。
解決方案。 若要避免這個問題,請確認主要索引鍵資料行中的資料都未變更。 在發生問題之後,若要修正此問題,請從同步群組中的所有端點刪除具有不一致資料的資料列。 然後,重新插入資料列。
我看到效能顯著降低
您的效能大幅降低,可能會達到甚至無法開啟資料同步 UI 的程度。
原因。 最可能的原因是同步迴圈。 當同步群組 A 的同步觸發同步群組 B 的同步,然後觸發同步群組 A 的同步,即發生同步迴圈。實際情況可能更為複雜,而且它也可能在迴圈中牽涉到兩個以上的同步群組。 問題在於同步有因同步群組彼此重疊造成的循環觸發。
解決方案。 最佳的修正方式就是預防。 確保您的同步群組中沒有循環參考。 由某個同步群組同步的任何資料列不能同步至另一個同步群組。
我看到這條訊息:「無法將 NULL 值插入資料行<資料行>中。 資料行不允許 Null。」這有何意義,以及該如何修正?
此錯誤訊息表示發生了下列兩種問題的其中之一:
- 資料表沒有主索引鍵。 若要修正此問題,將主索引鍵新增至要同步的所有資料表。
- 在 CREATE INDEX 陳述式中可能有 WHERE 子句。 資料同步不會處理這個狀況。 若要修正此問題,移除 WHERE 子句或手動變更所有資料庫。
資料同步如何處理循環參考? 也就是,相同的資料已在多個同步群組中同步,且因此持續變更。
資料同步不會處理循環參考。 請務必避免。
用戶端代理程式問題
若要針對用戶端代理程式的問題進行疑難排解,請參閱針對 Data Sync Agent 問題進行疑難排解。
設定和維護問題
我收到「磁碟空間不足」的訊息
原因。 如果必須刪除剩餘的檔案,可能會出現「磁碟空間不足」訊息。 這可能是因為防毒軟體,或是嘗試進行刪除作業時檔案開啟。
解決方案。 手動刪除 %temp% 資料夾 (
del \*sync\* /s
) 中的同步檔案。 然後,刪除 %temp% 資料夾中的子目錄。
重要
請勿於同步正在進行時刪除任何檔案。
我無法刪除我的同步群組
您嘗試刪除同步群組失敗。 任何下列的情節可能會導致無法刪除同步群組:
原因。 用戶端代理程式已離線。
解決方案。 確保用戶端代理程式已上線,然後再試一次。
原因。 用戶端代理程式已解除安裝或遺失。
解決方案。 用戶端代理程式已解除安裝或遺失:
a. 如果檔案存在,請從 SQL 資料同步安裝資料夾中移除代理程式的 XML 檔案。
b. 在內部部署電腦上安裝代理程式 (可在相同或不同電腦上)。 然後提交在入口網站中為顯示為離線之代理程式所產生的代理程式金鑰。原因。 資料庫處於離線狀態。
解決方案。 確保您的資料庫全部上線。
原因。 同步群組正在佈建或同步。
解決方案。 等候佈建或同步程序完成,然後重試刪除同步群組。
我無法取消註冊 SQL Server 資料庫
原因。 最有可能的原因是您正在嘗試取消註冊已刪除的資料庫。
解決方案。 若要取消註冊 SQL Server 資料庫,請選取資料庫,然後按一下 [強制刪除]。
如果這項作業無法從同步群組移除資料庫:
- 停止然後再重新啟動用戶端代理程式主機服務:
a. 選取 [開始] 功能表。
b. 在搜尋方塊中輸入 services.msc。
c. 在搜尋結果窗格的 [程式] 區段中按兩下 [服務]。
d. 以滑鼠右鍵按一下 [SQL 資料同步] 服務。
e. 如果服務正在執行,請將它停止。
f. 以滑鼠右鍵按一下服務,然後選取 [啟動]。
.g 檢查資料庫是否仍註冊。 如果它不再為已註冊,則作業完成。 否則,請繼續下一個步驟。 - 開啟用戶端代理程式應用程式 (SqlAzureDataSyncAgent)。
- 選取 [編輯認證],然後輸入資料庫的認證。
- 繼續進行取消註冊。
- 停止然後再重新啟動用戶端代理程式主機服務:
我沒有足夠的權限可以啟動系統服務
原因。 有兩種情況會發生此錯誤:
- 使用者名稱及/或密碼不正確。
- 指定的使用者帳戶沒有足夠的權限,無法以服務方式登入。
解決方案。 授與以服務方式登入的服務認證給使用者帳戶:
- 前往 [開始]>[控制台]>[系統管理工具]>[本機安全性原則]>[本機原則]>[使用者版權管理]。
- 選取 [以服務方式登入]。
- 在 [屬性] 對話框中,新增使用者帳戶。
- 選取 [套用],然後選取 [確定] 。
- 關閉所有視窗。
資料庫具有「過期」狀態
原因。 SQL 資料同步會從服務移除已離線 45 天以上 (從資料庫離線的時開始計算) 的資料庫。 如果資料庫離線 45 天以上,然後再恢復上線,其狀態是過期。
解決方案。 您可以藉由確定沒有任何資料庫離線 45 天以上來避免過期狀態。
如果資料庫具有過期狀態:
- 從同步群組中移除具有過期狀態的資料庫。
- 將資料庫重新新增回同步群組。
警告
您遺失此資料庫離線時對其所有變更。
同步群組具有「過期」狀態
原因。 如果一或多個變更無法套用 45 天的整個保留期間,則同步群組可能會過時。
解決方案。 若要避免同步群組的過期狀態,請定期檢查歷程記錄檢視器中同步作業的結果。 調查並解決任何無法套用的變更。
如果同步群組的狀態為過期,則請刪除同步群組,然後重新建立。
解除安裝或停止代理程式三分鐘內無法刪除同步群組
您無法在解除安裝或停止相關聯之 SQL 資料同步用戶端代理程式的三分鐘內,刪除同步群組。
解決方案。
- 在相關聯的同步處理代理程式為線上時移除同步群組 (建議選項)。
- 如果代理程式為離線但已安裝,請讓其在內部部署電腦上連線。 等候代理程式在 SQL 資料同步入口網站顯示為線上狀態。 然後,移除同步群組。
- 如果代理程式因為已解除安裝而離線:
a. 如果檔案存在,請從 SQL 資料同步安裝資料夾中移除代理程式的 XML 檔案。
b. 在內部部署電腦上安裝代理程式 (可在相同或不同電腦上)。 然後提交在入口網站中為顯示為離線之代理程式所產生的代理程式金鑰。
c. 嘗試刪除同步群組。
當我還原遺失或損毀的資料庫時,會發生什麼情況?
如果您從備份還原遺失或損毀的資料庫,資料庫所屬的同步群組中可能有無法聚合的資料。
錯誤訊息「Sync0022 客戶沒有執行動作 'syncGroupOperationResults/read' 的授權」
如果您收到錯誤訊息 Sync0022 Customer does not have authorization to perform action 'syncGroupOperationResults/read'
,則嘗試執行作業的帳戶沒有足夠的訂用帳戶層級權限。 新增:
- "Microsoft.Sql/locations/syncMemberOperationResults/read"
- "Microsoft.Sql/locations/syncAgentOperationResults/read"
- "Microsoft.Sql/locations/syncGroupOperationResults/read"
如需詳細資訊,請參閱資源提供者作業 RBAC 和SQL 資料同步:具有最低必要權限的資料庫帳戶。
相關內容
- 什麼是適用於 Azure 的 SQL 資料同步?
- 教學課程:設定 Azure SQL Database 與 SQL Server 中資料庫之間的 SQL 資料同步
- 使用 PowerShell 同步 Azure SQL 資料庫中多個資料庫的資料
- 使用 PowerShell 同步 SQL Database 與 SQL Server 之間的資料
- 適用於 SQL 資料同步的 Data Sync Agent
- Azure SQL 資料同步最佳做法
- Azure SQL 資料庫和 Azure SQL 受控執行個體的監視和效能微調
- 在 Azure SQL 資料同步中自動複寫結構描述的變更內容
- 使用 PowerShell 更新現有同步群組中的同步結構描述
- 什麼是 Azure SQL 資料庫?
- 資料庫生命週期管理