SQL Server 複寫 是實現資料庫高可用性、異地災備、報表卸載的核心技術。本文系統整理從環境前置作業、發佈/訂閱/散發者設定、複寫類型選擇、常見故障排查到緊急切換流程的完整實戰指南,基於 SQL Server 2000/2005 架構但核心邏輯適用於後續版本。
在發佈端與訂閱端各建立一個隸屬 Administrators 群組的 Windows 本地帳號 (如 repl_user),密碼完全一致。此帳號用於:
發佈端建立資料夾 (如 D:\PUB) → 右鍵共享 → 權限 → 加入 repl_user → 給予 完全控制。訂閱端需能以此帳號存取 `\\Publisher\PUB`。
服務管理工具 → MSSQLSERVER / SQLSERVERAGENT → 內容 → 登入 → 選「此帳號」 → 輸入 repl_user 及密碼 → 重啟服務。
企業管理器/SSMS → 伺服器屬性 → 安全性 → 選 SQL Server 和 Windows 驗證模式。
雙向在企業管理器註冊對方 (用 SQL 驗證,帳號 sa 或專用帳號)。若無法解析電腦名,需在 用戶端網路公用程式 設定 TCP/IP 別名,指向對方 IP。
distribution 資料庫與 distributor_admin 使用者。散發者屬性 → 發佈者 → 新增 → 輸入遠端發佈者名稱、連線驗證 (用 distributor_admin 密碼)。
rowguid 欄位,適合行動/分散式場景。
distributor_admin。REPL-散發 類別作業。| 作業名稱 | 類型 | 功能 |
|---|---|---|
| 散發清理 | 維護 | 清除散發資料庫過期交易 |
| 代理程式歷史記錄清除 | 維護 | 清理複寫監視器歷程 |
| REPL-LogReader | 交易式核心 | 讀取發佈端記錄檔轉寫散發庫 |
| REPL-Snapshot | 初始化 | 產生結構/資料快照檔 (BCP/SCP) |
| REPL-Distribution / REPL-Merge | 同步 | 將命令推送/合併至訂閱端 |
-- 解除複寫標記 (謹慎使用,建議先備份)
USE master;
GO
sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;
GO
BEGIN TRAN;
UPDATE sysobjects SET replinfo = 0 WHERE replinfo > 0;
COMMIT TRAN;
GO
sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;
GO
原理:主庫 BACKUP LOG → 共享資料夾 → 備庫 RESTORE LOG ... WITH STANDBY (唯讀可查詢)。
-- 主庫建立同步作業 (每分鐘)
EXEC msdb..sp_add_job @job_name = N'LogShipping_Sync';
EXEC msdb..sp_add_jobstep @job_name = N'LogShipping_Sync', @step_name = N'BackupLog',
@command = N'BACKUP LOG Db_test TO DISK=\\Shared\Logs\test_log.bak WITH FORMAT';
EXEC msdb..sp_add_jobstep @job_name = N'LogShipping_Sync', @step_name = N'RestoreLog',
@command = N'RESTORE LOG Db_test_bak FROM DISK=\\Shared\Logs\test_log.bak WITH STANDBY=\\Shared\Logs\test_log.ldf';
-- 加入排程每分鐘執行
BACKUP LOG Db_test TO ... → 備庫 RESTORE LOG Db_test_bak FROM ... WITH RECOVERY。RESTORE LOG Db_test_bak WITH RECOVERY (損失尾部交易)。