針對事務複製中的錯誤 20598 進行疑難解答

本文說明如何針對事務複製中的錯誤 20598 進行疑難解答,並提供問題的因應措施。

原始產品版本:SQL Server
原始 KB 編號: 3066750

疑難排解

若要疑難排解此問題,請執行下列步驟:

  1. 在訂閱者 散發代理程式 的復寫監視器中,擷取發生錯誤的交易序號和命令標識碼:

    復寫監視器中錯誤訊息的螢幕快照。

    注意

    您可以使用下列查詢,從散發者伺服器取得相同的交易序號:

    查詢項目和結果的螢幕快照。

  2. 擷取對應至散發者伺服器上的交易序號的命令。 使用步驟 1 中的交易序號作為此指令的參數:

    對應至散發者伺服器上交易序號之命令的螢幕快照。

  3. 從步驟 2 的輸出中,使用步驟 1 中的命令標識碼來識別失敗的命令。 command_id請參閱結果集中的數據行。

  4. 驗證發行者上的發行項資訊。 使用您從步驟 2 取得的文章識別碼,並檢查您嘗試更新的文章詳細資料:

    發行者文章資訊詳細數據的螢幕快照。

  5. 驗證發行者上的主鍵。

    您有兩個資訊:您嘗試執行更新的數據表,以及主鍵值。 您可以使用主鍵值來查詢數據表,並在發行者資料庫上找出數據列。 例如:

    SELECT * FROM tbl_sample WHERE column_name = <primary_key_value>
    
  6. 檢查訂閱者的問題。

    在訂閱者資料庫上執行相同的查詢,並將它與您從發行者資料庫收到的結果進行比較。

因應措施

若要解決此問題,請使用下列兩種方法:

  • 在訂閱者端手動插入遺漏的數據列。 這可讓 散發代理程式 重試失敗的命令,並繼續進行複寫。

    注意

    可能有其他數據列遺失,而且如果發生更多失敗,則必須手動插入訂閱者端。

  • 指示 散發代理程式 略過此錯誤,並繼續復寫其餘的變更。 散發代理程式 接受 skiperrors 參數。 您可以使用此參數傳遞錯誤碼 20598。 當您等待手動同步處理遺漏的數據列時,這可能會讓復寫設定保持不變。

    注意

    您必須仔細評估引用完整性的下游效果,以及受影響數據表上存在的觸發程式,再繼續。

數據收集以調查此問題的原因

如果重複發生此問題,您應該收集下列數據以供Microsoft SQL Server 支援小組進行分析,以便他們嘗試找出問題的原因:

  • 發生此問題時,散發資料庫的備份。 (這應該會在報告錯誤之後,以及重新初始化訂閱之前。

  • 發行者和訂閱者的事務歷史記錄備份。 (在發生問題之前至少收集 24 小時的數據。

  • 分析工具追蹤,顯示發行者、訂閱者和散發者上復寫代理程序的活動。 (請確定分析工具已在問題開始之前執行。在理想情況下,您必須在重新編製索引作業開始時間的同時啟動分析工具。

  • 前五個步驟的輸出,用於識別受影響的數據表和遺漏的主鍵值。

  • 發行者和訂閱者資料庫的目錄檢視輸出:

    • sys.partitions
    • sys.allocation_units
    • sys.objects
  • 複寫代理程式記錄的詳細信息輸出。

已解決的已知問題

舊版 SQL Server 發生下列問題: