首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 複寫錯誤處理實戰:跳過「找不到訂閱端資料列」錯誤 (20598)

     編輯:關於SqlServer

交易式複寫常遇錯誤 20598:「套用複寫命令時在訂閱服務器上找不到該列」。傳統做法刪除重建複寫耗時且風險高,實際上可透過 代理程式設定檔 -SkipErrors 參數 精準跳過特定錯誤,讓複寫自動續跑。

兩種設定代理程式設定檔的方式

  1. 散發者層級預設設定檔:影響所有複寫,適合通用參數調整。
  2. 單一複寫層級設定檔 (複寫監視器 → 動作 → 代理程式設定檔):僅影響該複寫,建議採用此方式隔離風險。

操作步驟

  1. 開啟 複寫監視器,雙擊目標複寫。
  2. 選擇 動作 → 代理程式設定檔,點選 新增設定檔。
  3. 命名 (如 Skip_20598),基於預設設定檔建立。
  4. 編輯新設定檔,找到 SkipErrors 參數,值輸入 20598。
  5. 勾選啟用該設定檔,重新啟動散發代理程式。
  6. 觀察複寫監視器:錯誤 20598 被記錄並跳過,後續交易正常套用。

對等複寫 (Peer-to-Peer) 警示

對等拓撲跳過錯誤極易導致節點間資料不一致,**必須先根因分析** (主鍵衝突? 觸發器刪除? 手動修改?) 確認可安全跳過後再啟用。

其他常見可跳過錯誤代碼

錯誤碼描述適用場景
2601唯一索引鍵值重複來源端重複資料、手動插入衝突
2627唯一/主鍵約束違反同上
547外鍵約束違反參考資料尚未同步

多代碼以分號分隔:-SkipErrors 2601;2627。

替代方案:sp_setsubscriptionxactseqno

  • 針對特定交易序號 (LSN) 跳過,精準控制但需手動計算 LSN,適用非 SQL Server 訂閱端無法使用 -SkipErrors 時。

最佳實務原則

  1. 跳過錯誤為臨時繞行,非根治;同步完成後必須補齊資料差異 (資料比對、手動修正)。
  2. 建立 錯誤記錄告警,避免長期不知情運行於不一致狀態。
  3. 定期演練 完整重新初始化 流程,確保災難時可快速恢復一致性。

結語

-SkipErrors 參數讓 DBA 以最小代價繞過特定阻斷錯誤,維持複寫流動。但核心在於「跳過後必須補齊」,切勿將跳過錯誤常態化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved