交易式複寫常遇錯誤 20598:「套用複寫命令時在訂閱服務器上找不到該列」。傳統做法刪除重建複寫耗時且風險高,實際上可透過 代理程式設定檔 -SkipErrors 參數 精準跳過特定錯誤,讓複寫自動續跑。
兩種設定代理程式設定檔的方式
- 散發者層級預設設定檔:影響所有複寫,適合通用參數調整。
- 單一複寫層級設定檔 (複寫監視器 → 動作 → 代理程式設定檔):僅影響該複寫,建議採用此方式隔離風險。
操作步驟
- 開啟 複寫監視器,雙擊目標複寫。
- 選擇 動作 → 代理程式設定檔,點選 新增設定檔。
- 命名 (如
Skip_20598),基於預設設定檔建立。
- 編輯新設定檔,找到 SkipErrors 參數,值輸入
20598。
- 勾選啟用該設定檔,重新啟動散發代理程式。
- 觀察複寫監視器:錯誤 20598 被記錄並跳過,後續交易正常套用。
對等複寫 (Peer-to-Peer) 警示
對等拓撲跳過錯誤極易導致節點間資料不一致,**必須先根因分析** (主鍵衝突? 觸發器刪除? 手動修改?) 確認可安全跳過後再啟用。
其他常見可跳過錯誤代碼
| 錯誤碼 | 描述 | 適用場景 |
| 2601 | 唯一索引鍵值重複 | 來源端重複資料、手動插入衝突 |
| 2627 | 唯一/主鍵約束違反 | 同上 |
| 547 | 外鍵約束違反 | 參考資料尚未同步 |
多代碼以分號分隔:-SkipErrors 2601;2627。
替代方案:sp_setsubscriptionxactseqno
- 針對特定交易序號 (LSN) 跳過,精準控制但需手動計算 LSN,適用非 SQL Server 訂閱端無法使用 -SkipErrors 時。
最佳實務原則
- 跳過錯誤為臨時繞行,非根治;同步完成後必須補齊資料差異 (資料比對、手動修正)。
- 建立 錯誤記錄告警,避免長期不知情運行於不一致狀態。
- 定期演練 完整重新初始化 流程,確保災難時可快速恢復一致性。
結語
-SkipErrors 參數讓 DBA 以最小代價繞過特定阻斷錯誤,維持複寫流動。但核心在於「跳過後必須補齊」,切勿將跳過錯誤常態化。