資料庫同步常見需求:異地備份、報表伺服器卸載、異構平台整合。本文介紹兩種原生同步方案:SQL Agent 作業 (T-SQL 腳本排程) 與 發佈/訂閱複寫 (推式/拉式),並以大量截圖詳細說明複寫的發佈建立、文章選擇、快照代理、代理安全性、推式訂閱建立、同步排程、常見驗證錯誤排解。
方案一:SQL Agent 作業 (簡單、彈性、適用結構固定的全量/增量同步)
- 建立連結伺服器 (
sp_addlinkedserver) 或使用 OPENROWSET/OPENDATASOURCE。
- 撰寫同步預存程序 (MERGE / INSERT/UPDATE/DELETE 配合
CHANGE_TRACKING / CDC / 時間戳)。
- 建立 Agent 作業排程執行 (每日/每小時)。
- 優點:完全掌控邏輯、無複寫基礎設施開銷;缺點:需自行處理衝突、Schema 變更、監控告警。
方案二:發佈/訂閱複寫 (企業級、支援增量、Schema 變更傳播、監控完善)
核心角色:發佈者 (來源) → 散發者 (中繼/暫存) → 訂閱者 (目標)。可發佈:資料表、預存程序、使用者函數。
1. 建立發佈 (發佈端 SSMS)
- 展開 複寫 → 本地發佈,右鍵 新增發佈。
- 選擇發佈資料庫 → 發佈類型:
- 快照式:無主鍵表、資料量小、低頻同步。
- 交易式:有主鍵、高頻增量、低延遲 (生產常用)。
- 合併式:雙向同步、離線客戶端。

- 選擇文章 (資料表/檢視/SP/函數) — 可按資料行/資料列篩選 (右側顯示篩選 WHERE 子句)。


- 快照代理排程:設定頻率 (每日/每週/每月);勾選「立即建立快照」首次同步。


- 代理安全性:
- 快照代理執行帳號 (Windows) — 建議與 SQL Agent 服務帳號一致。
- 連接發佈者帳號 (SQL 驗證) — 建議
sa 或專用複寫帳號。


- 命名發佈完成。


2. 建立推式訂閱 (發佈端發起,散發者推送至訂閱者)
- 複寫 → 本地訂閱,右鍵 新增訂閱。
- 選擇發佈 → 訂閱類型:推式訂閱 (散發者主動連線訂閱者)。



- 散發代理位置:在散發者端執行 (推式)。

- 選擇訂閱者與訂閱資料庫:
- 點擊 加入 SQL Server 訂閱者 → 輸入**訂閱者電腦名稱** (非 IP) → SQL 驗證 (sa/專用帳號)。
- 訂閱資料庫:若訂閱者已有同名資料庫自動列出;否則可選「新建資料庫」。
- 訂閱帳號需具備目標資料庫 db_owner 權限。


- 散發代理安全性:
- 執行帳號 (Windows) — 散發者服務帳號。
- 連接訂閱者帳號 (SQL 驗證) — 訂閱者端 sa/專用帳號。


- 同步排程:連續執行 (低延遲) / 依排程 (如每日/每小時) / 僅手動。

- 初始化:立即 / 首次同步時。
- 完成精靈。

3. 常見問題:訂閱代理報錯「Windows 驗證失敗,來自不受信任網域」
原因:企業管理員/舊版工具中訂閱者屬性預設登入方式為 Windows 驗證,跨網域/工作群組失效。
解決:在發佈端 SSMS → 複寫 → 設定發佈、訂閱者和散發者 → 訂閱者 → 屬性 → 登入方式改為 **SQL Server 驗證**,輸入訂閱者端 sa 帳密。
方案選擇建議
| 場景 | 建議方案 |
| 少量資料表、結構固定、團隊熟悉 T-SQL | SQL Agent 作業 + MERGE/CDC |
| 大量資料表、頻繁 Schema 變更、需監控/重試/延遲告警 | 交易式複寫 (推式/拉式) |
| 雙向同步、離線用戶端 | 合併式複寫 |
| 異構目標 (Oracle, PostgreSQL) | 異構複寫 / SSIS / CDC + Kafka |
掌握 Agent 作業與複寫兩大原生同步技術,可因應從簡單到企業級的各類資料同步需求。