SQL Server複製是我們常用的一個提高性能和可用性的功能,但這東東確實已存在很多不穩定因素,會造成複製功能的失效,今天就遇到了一個問題是由於SQL Server數據衝突造成的事務複製失敗。解決這個問題可以重新初始化複製來保障兩邊的數據一致性。也可以選擇跳過失敗的事務,這樣雖然可能會有部分數據不一致但如果能夠確保這部分數據不是關鍵數據則可以使用這個方案。
跳過失敗的事務需要用到兩個SP,第一個是sp_helpsubscriptionerrors,用於查詢具體是哪個事務造成了數據衝突,此存儲過程在分發服務器的分發數據庫中執行。
語法
在返回的表格中xact_seqno列就是我們要找的事務ID。
這時候就可以使用我們的第二個SP:sp_setsubscriptionxactseqno
語法
此存儲過程在訂閱服務器上對訂閱數據庫(業務數據庫)執行。非 SQL Server 訂閱服務器不支持該過程。
執行成功後,就可以跳過這個事務,複製就可以繼續執行了。當然最好能夠在複製修復後驗證是否存在關鍵數據的缺失或不一致。