Microsoft 發佈 Microsoft SQL Server 2008 R2 Service Pack 1 (SP1)或 Microsoft SQL Server 2012 (以一個可下載的檔案修正)。 因為修正程式是累加的,所以每個新發行版本本都包含舊版 SQL Server 2008 R2 Service Pack 1 (SP1)或 Microsoft SQL Server 2012 更新版本中所包含的所有熱修復程式及所有安全性更新。

徵狀

請試想下列案例:

  • 您可以根據 Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2012 中的一個資料庫,建立至少兩個異動複寫發佈。

  • 每個出版物都至少有一個專案。 本文不會重疊,且每個專案只屬於一個發佈。

  • 您將發佈的 [ @sync_method ] 屬性設定為 [ 併發]。

  • 您將發佈的 @immediate_sync 屬性設定為 True。

  • 您將記錄讀取器代理程式的 MaxCmdsInTran 參數設定為非零值。

  • 其中一個發佈會在一個交易中接收多個插入。

  • 在提交事務之後,記錄讀取器代理程式會根據 MaxCmdsInTran 參數開始處理及分割事務。

  • 另一個發佈的快照代理程式會在記錄讀取器代理程式完成工作之前啟動。

在這種情況下,記錄讀取器代理程式會失敗,而且您會收到下列錯誤訊息:

程式無法在 "server\instance" 上執行 "sp_MSadd_replcmds"。 (來源: MSSQLServer,錯誤號碼:1007)無法在物件 ' dbo 中插入重複的索引鍵列。MSrepl_commands "中的唯一索引" ucMSrepl_commands "。 (來源: MSSQLServer,錯誤號碼:1007)

解決方案

累積更新資訊

SQL Server 2012

此問題的修正程式是在 SQL Server 2012 的累積更新1中第一次發行。如需此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2679368 SQL Server 2012 的累積更新套件1注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2012 修正版本中所包含的所有修復程式及所有安全性修正程式。 Microsoft 建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2692828 在發行 SQL Server 2012 之後發行的 SQL Server 2012 組建 您必須將 SQL Server 2012 修補程式套用至 SQL Server 2012 的安裝。

SQL Server 2008 R2 SP1 的累積更新套件4

此問題的修正程式是以累積更新4第一次發行。如需有關如何取得 SQL Server 2008 R2 SP1 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2633146 SQL Server 2008 R2 SP1 的累積更新套件4注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 SP1 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2567616 在發行 SQL Server 2008 R2 SP1 之後發行的 SQL Server 2008 R2 組建

因應措施

若要解決這個問題,請使用下列其中一個方法:

  • 請勿將發佈的 [ @sync_method ] 屬性設定為 [併發],而且不要將發佈的 @immediate_sync 屬性設定為 [true]。

  • 將 MaxCmdsInTran 參數的值設定為零。

狀態

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

需要更多協助嗎?

想要其他選項嗎?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。