本文說明如何針對事務複製中的錯誤 20598 進行疑難解答,並提供問題的因應措施。
原始產品版本:SQL Server
原始 KB 編號: 3066750
疑難排解
若要疑難排解此問題,請執行下列步驟:
在訂閱者 散發代理程式 的復寫監視器中,擷取發生錯誤的交易序號和命令標識碼:
注意
您可以使用下列查詢,從散發者伺服器取得相同的交易序號:
擷取對應至散發者伺服器上的交易序號的命令。 使用步驟 1 中的交易序號作為此指令的參數:
從步驟 2 的輸出中,使用步驟 1 中的命令標識碼來識別失敗的命令。
command_id請參閱結果集中的數據行。驗證發行者上的發行項資訊。 使用您從步驟 2 取得的文章識別碼,並檢查您嘗試更新的文章詳細資料:
驗證發行者上的主鍵。
您有兩個資訊:您嘗試執行更新的數據表,以及主鍵值。 您可以使用主鍵值來查詢數據表,並在發行者資料庫上找出數據列。 例如:
SELECT * FROM tbl_sample WHERE column_name = <primary_key_value>檢查訂閱者的問題。
在訂閱者資料庫上執行相同的查詢,並將它與您從發行者資料庫收到的結果進行比較。
因應措施
若要解決此問題,請使用下列兩種方法:
在訂閱者端手動插入遺漏的數據列。 這可讓 散發代理程式 重試失敗的命令,並繼續進行複寫。
注意
可能有其他數據列遺失,而且如果發生更多失敗,則必須手動插入訂閱者端。
指示 散發代理程式 略過此錯誤,並繼續復寫其餘的變更。 散發代理程式 接受
skiperrors參數。 您可以使用此參數傳遞錯誤碼 20598。 當您等待手動同步處理遺漏的數據列時,這可能會讓復寫設定保持不變。注意
您必須仔細評估引用完整性的下游效果,以及受影響數據表上存在的觸發程式,再繼續。
數據收集以調查此問題的原因
如果重複發生此問題,您應該收集下列數據以供Microsoft SQL Server 支援小組進行分析,以便他們嘗試找出問題的原因:
發生此問題時,散發資料庫的備份。 (這應該會在報告錯誤之後,以及重新初始化訂閱之前。
發行者和訂閱者的事務歷史記錄備份。 (在發生問題之前至少收集 24 小時的數據。
分析工具追蹤,顯示發行者、訂閱者和散發者上復寫代理程序的活動。 (請確定分析工具已在問題開始之前執行。在理想情況下,您必須在重新編製索引作業開始時間的同時啟動分析工具。
前五個步驟的輸出,用於識別受影響的數據表和遺漏的主鍵值。
發行者和訂閱者資料庫的目錄檢視輸出:
- sys.partitions
- sys.allocation_units
- sys.objects
複寫代理程式記錄的詳細信息輸出。
已解決的已知問題
舊版 SQL Server 發生下列問題: