KB2733630 - 合併代理在合併複製同步時可能會失敗SQL Server

套用到
SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Express SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Parallel Data Warehouse SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2008 Standard SQL Server 2008 Web SQL Server 2008 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use)

症狀

在 Microsoft SQL Server 2008 及之後版本的 SQL Server 中合併複製同步時,合併代理程式可能會失敗。 此外,您收到下列錯誤訊息:

注意

合併代理程式在偵測到基於保留的元資料清理已刪除訂閱者尚未送達發佈者的變更元資料後失敗。 你必須重新初始化訂閱 (,但沒有上傳) 。 (來源:MSSQL_REPL,錯誤號碼:MSSQL_REPL-2147199401)

尋求幫助:http://help/MSSQL_REPL-2147199401

這個問題可能有多種原因。 這些原因包括在特定情況下預期的多種原因。 要判斷是否意外遇到此錯誤,請檢視「原因」部分描述的元資料細節。

原因

此問題的原因可見於以下用戶系統表格:

  • dbo.sysMergeSubscriptions
  • DBO。MsMerge_Genhistory

確保合併代理不再同步。 接著執行以下查詢,檢視結果:

從 SubscriberDB.dbo.sysMergeSubscriptions 選擇 sentgen,其中 pubid = subid,且 sentgen 不是 null

查詢結果

sentgen 欄位標示訂閱者寄給出版社的最早變更群組。 如果回傳多個值,請檢查 dbo.sysMergeSubscriptions 表格中其他欄位,確保你看到的是正確出版的元資料。 接著,使用該查詢在以下查詢中回傳的值:

從SubscriberDB.dbo.MSmerge_genhistory中選擇前20名 * ,其中世代 >= sentgen_value 依世代排序查詢的輸出應如下:

按世代查詢結果

當以下所有條件都成立時,你可能會意外遇到錯誤:

  • 第一列 生成欄位的 值略高於前一查詢的 sentgen 值。
  • genstatus 欄位的值是 4
  • 變更計數欄位的值為 0

注意:第一列冷 柱的值通常也遠早於其他列的該欄值。

解決方式

為了解決這個問題,請重新初始化產生錯誤的訂閱者。

在某些情況下,你可能能在不完全重新初始化的情況下解決這個問題。 請聯絡 Microsoft 客服,了解可能的解決方法。

為防止此問題再次發生,請依你所使用的 SQL Server 版本,執行以下其中一項修正。

累積更新資訊

SQL Server 2008

SQL Server 2008 中沒有解決這個問題的方法。

SQL Server 2008 R2 Service Pack 2

此問題的修正最初於累積更新 3 中釋出。 欲了解更多如何取得 SQL Server 2008 R2 服務包 2 累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

2754552 2008 R2 服務包 2 SQL Server累積更新包 3
 注意:由於這些建置是累積性的,每個新修正版本都包含了先前 SQL Server 2008 R2 Service Pack 2 修正版本中包含的所有熱修正與安全修正。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2730301 2008 R2 版本SQL Server在 2008 R2 服務包 2 發布後SQL Server

SQL Server 2012

這個問題的修正最早是在累積更新 4 中釋出的。 欲了解更多如何取得 SQL Server 2012 累積更新套件的資訊,請點擊以下文章編號以瀏覽 Microsoft 知識庫中的文章:

2758687 2012 SQL Server 累積更新包 4
 注意:由於建置是累積性的,每個新修正釋版本都包含了先前 SQL Server 2012 修正版本中包含的所有熱修補與安全修補。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2692828 2012 SQL Server 2012 年版本SQL Server 2012 發布後釋出

SQL Server 2008 R2 Service Pack 1

此問題的修正最早於累積更新8中釋出。 欲了解更多如何取得 SQL Server 2008 R2 服務包 1 累積更新套件的資訊,請點擊以下文章編號以在 Microsoft 知識庫中查看該文章:

2723743 2008 R2 SP1 累積更新套件 8 SQL Server 由於建置是累積式,每個新修正釋版本都包含了先前 2008 SQL Server R2 Service Pack 1 修正釋版本中所有的熱修補與安全修補。 我們建議您考慮套用包含此熱修正的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2567616 2008 年 R2 SQL Server 版本,SQL Server 2008 R2 SP1 發行後釋出