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

SQL Server 2008 對等複寫衝突偵測機制完整應用指南

     編輯:關於SqlServer

一、對等複寫衝突產生原因

單一資料庫靠鎖機制避免衝突,但異步分散式環境中,各節點獨立執行交易,缺乏跨節點序列化機制。舊版靠兩階段提交影響效能。SQL 2008 引入衝突偵測機制解決此問題。

典型衝突情境

  • 三分公司各有伺服器 (A/B/C) 做 OA 系統
  • A 插入員工編號 PR001,B 同時也插入 PR001 (PK 衝突)
  • 單節點提交時無衝突,複寫至其他節點應用時才偵測到

二、衝突偵測運作原理

  • 每個已發行資料表新增隱藏欄位,儲存「發起者 ID + 列版本」
  • 散發代理同步時,針對每表執行同步程序
  • 讀取隱藏欄位發現版本衝突 → 回報錯誤
  • 預設:偵測到衝突 → 散發代理停止套用該節點後續變更

三、啟用衝突偵測的方式

方式 1:預存程序 sp_addpublication (彈性最高)

  • 可指定偵測到衝突時,散發代理是停止還是繼續套用
  • 建議保持預設「停止套用」

方式 2:企業管理器 / 對等複寫拓撲精靈 (簡便但選項少)

  • 「發行集屬性」→「訂閱選項」頁籤啟用
  • 缺點:無法選擇衝突處理行為,強制停止套用

四、衝突發生後的處理流程

  1. 設定警示:啟用「對等衝突偵測」警示,郵件/訊息/事件記錄通知 DBA
  2. 決策處理模式:
    • 預設:停止套用 — 保護資料一致性,需人工介入
    • 替代:繼續套用 — 可能導致資料不一致,後續需在最高優先級節點手工修正再傳播
  3. 人工解決:分析衝突資料,於權威節點修正,重新同步

五、使用限制 (必須滿足)

  1. 所有參與複寫的可更新節點必須為 SQL Server 2008 (需升級舊版)
  2. 所有節點都必須啟用 衝突偵測,否則有漏網之魚

最佳實務建議

  • 設計階段預評估衝突風險 (PK 設計、業務流程)
  • 優先使用預存程序啟用,保留「停止/繼續」選擇權
  • 必配警示機制,確保第一時間知情
  • 建立衝突處理 SOP,明確權威節點與修正流程
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved