可更新訂閱選項比較
| 選項 | 同步模式 | 網路需求 | 衝突處理 | 適用複寫類型 |
| 立即更新訂閱 | 兩階段提交,即時同步 | 需持續連線 | 時間戳記偵測,發生衝突回滾 | 快照、交易 |
| 佇列更新訂閱 | 非同步,離線可更新 | 間歇性連線 | 佇列讀取代理偵測,可自訂解決策略 | 快照、交易 |
| 以佇列更新作為熱備援的立即更新 | 正常即時,斷線切換佇列 | 混合 | 結合上述兩者 | 快照、交易 |
立即更新訂閱架構
- 觸發程序(訂閱端):攔截 DML,透過 RPC 呼叫發行端預存程序,兩階段提交保證一致性。
- 預存程序(發行端):針對 INSERT/DELETE/UPDATE 自動產生,檢查時間戳記衝突。
- MS DTC:協調分散式交易。
- 衝突偵測:比較時間戳記欄位。
- 迴路偵測:避免已套用變更重複散發導致主鍵衝突。
注意:合併複寫不支援立即更新。
佇列更新訂閱架構
- 觸發程序:將交易封裝訊息寫入本地佇列。
- 佇列:訂閱端與散發端各有一佇列,網路恢復時轉送。
- 佇列讀取代理(散發端多執行緒):讀取佇列、呼叫發行端預存程序套用、衝突偵測與補償命令產生。
適用:頻繁讀取、偶爾更新、需離線操作場景。
可轉換訂閱
利用 DTS 功能(欄位對應、資料類型轉換、篩選、使用者自訂函數),依各訂閱需求客製化資料分割(垂直/水平)。建立步驟:
- 建立發行集時勾選 Transform Published Data。

- 右鍵發行集 → Define Transformation of Publication 進入 DTS 設計介面。

- 依訂閱建立轉換封裝,最後推送訂閱。
替代同步夥伴
合併複寫專屬,允許訂閱者與非原始發行者同步。需求:具備相同資料/結構、發行集為原始克隆、屬性允許替代同步、匿名訂閱自動新增對應訂閱。
篩選複寫資料
- 欄位篩選:垂直分割,排除不需傳送欄位(主鍵、非預設 NOT NULL、唯一索引、ROWGUID 不可篩選)。
- 列篩選:水平分割,WHERE 條件決定傳送列。交易複寫每 DML 驗證增加負載。
- 動態篩選:合併複寫專屬,依訂閱者屬性(如
SUSER_SNAME())動態決定資料分割,減少發行端儲存多份發行集。
- 聯結篩選:合併複寫專屬,維護兩發行表間參考完整性(主鍵/外鍵或任意比較關係)。
小結
SQL Server 2000 提供豐富進階複寫選項,依業務需求(即時一致性 vs 離線彈性、資料客製化、多點同步)選擇適當組合,並善用篩選降低頻寬與衝突。