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

SQL Server 2008 交易式複寫實現資料庫同步備份:架構、部署、FTP 快照傳遞、Log Reader Agent 故障排解

     編輯:SQL Server 2008

為實現主資料庫 (CNBlogsDB1) 與備份資料庫 (CNBlogsDB2) 的**近即時同步備份**,採用 SQL Server 2008 **交易式複寫** (基於快照初始化 + 記錄讀取代理持續傳遞交易)。本文記錄完整部署流程:發佈端設定 (快照資料夾、FTP 傳遞)、訂閱端設定 (Pull 訂閱)、驗證同步、兩大關鍵故障排解 (Log Reader Agent 啟動失敗、快照存取權限)。

環境

  • 兩台 Windows Server 2008 R2 + SQL Server 2008 R2 (英文版)
  • 主庫:CNBlogsDB1 (發佈者/散發者);備庫:CNBlogsDB2 (訂閱者)
  • 復原模式:**完整** (交易式複寫必要)

複寫原理

快照初始化:發佈端產生結構與資料快照 → 訂閱端載入。
記錄讀取代理:持續掃描發佈資料庫交易記錄 → 將標記為複寫的交易送至散發資料庫。
散發代理:訂閱端 (Pull) 從散發資料庫讀取交易 → 重播至訂閱資料庫。

交易式複寫架構

一、發佈端部署 (CNBlogsDB1)

1. 建立示範資料庫與測試表

CREATE DATABASE CNBlogsDemo;
USE CNBlogsDemo;
CREATE TABLE CNBlogsTest (ID INT PRIMARY KEY, Info NVARCHAR(100));

建立測試表

2. 設定快照資料夾 (本地路徑)

  1. SSMS → 複寫 → 本地發佈 → 右鍵 屬性 → 發佈者 頁籤。
  2. 點擊預設快照資料夾右側按鈕 → 設定 Default Snapshot Folder (如 D:\ReplData\Snapshot)。

發佈者屬性

快照資料夾設定

3. 建立交易式發佈

  1. 本地發佈右鍵 新增發佈 → 選擇 CNBlogsDemo → **交易式發佈**。
  2. 若表無主鍵會報錯,**必須先建主鍵** 才能建立交易式發佈。
  3. 選擇發佈文章 (勾選 CNBlogsTest)。
  4. 快照代理:勾選 立即建立快照並保持可用。

發佈類型

主鍵錯誤

文章選擇

快照代理選項

  1. 代理安全性:
  • 快照代理執行帳號:與 SQL Agent 服務帳號相同。
  • 連接發佈者:sa 帳號。

代理安全性

帳號設定

  1. 命名發佈:CNBlogsDemo_Publication → 完成。

發佈名稱

發佈建立成功

4. 設定 FTP 快照傳遞 (解決跨網段/權限存取問題)

  1. 發佈端架設 FTP 站點,指向快照資料夾 (D:\ReplData\Snapshot),建立 FTP 帳號。
  2. 發佈屬性 → FTP 快照:
  • 勾選 允許訂閱者使用 FTP 下載快照檔案。
  • FTP 伺服器位址、連接埠 (21)、使用者名稱、密碼。
  • FTP 根目錄下的路徑:/ftp (需與 FTP 站點虛擬目錄對應)。

FTP 快照設定

設定完成後,快照資料夾下會自動建立 ftp 子資料夾並放入快照檔案。

二、訂閱端部署 (CNBlogsDB2)

  1. 建立同名資料庫 CNBlogsDemo (完整復原模式)。
  2. 複寫 → 本地訂閱 → 新增訂閱 → 尋找 SQL Server 發佈者。

連接發佈者

重要:伺服器名稱**必須填寫發佈者電腦名稱**;無法解析時在 hosts 檔新增 IP 對應。
  1. 選擇發佈 CNBlogsDemo_Publication。
  2. 散發代理位置:**在訂閱者端執行 (Pull 訂閱)**,減輕發佈端負載。

選擇發佈

Pull 訂閱

  1. 訂閱資料庫:自動偵測同名庫。
  2. 散發代理安全性:
  • 連接散發者:發佈端 sa。
  • 執行帳號:訂閱端 SQL Agent 服務帳號。

散發代理安全性

帳號設定

  1. 排程:依需求 (連續/排程/手動) → 完成。

排程設定

訂閱建立成功

三、驗證同步

  1. 發佈端 CNBlogsTest 插入一筆資料。

發佈端插入資料

  1. 訂閱端立即查詢,資料已同步到達。

訂閱端同步資料

同步成功

四、關鍵故障排解

1. Log Reader Agent 無法啟動 (錯誤 15517 / 20011 / 22037)

現象:記錄讀取代理報錯:
Cannot execute as the database principal because the principal "dbo" does not exist...

原因:資料庫擁有者 (dbo) 為空 (如從 SQL 2005 附加上來的資料庫)。

解決:變更資料庫擁有者為 sa:

ALTER AUTHORIZATION ON DATABASE::[CNBlogsDemo] TO sa;
-- 或 SSMS:資料庫屬性 → 檔案 → 擁有者 選擇 sa

變更資料庫擁有者

2. 訂閱端無法存取發佈端快照資料夾

現象:共享資料夾權限/工作群組驗證導致無法讀取。

解決:採用 **FTP 傳遞** (如上文設定),避開 SMB/權限問題。

五、維護建議

  • 定期監控 複寫監視器:延遲時間、代理狀態、錯誤記錄。
  • 設定 **警報**:Log Reader Agent 停止、延遲超過閾值、磁碟空間不足。
  • 備份 **散發資料庫** 與 **發佈資料庫** 同步進行,確保時間點一致性。
  • Schema 變更 (DDL) 會自動傳播 (交易式複寫預設);大量 DDL 操作建議維護窗口執行。

交易式複寫 + FTP 快照 + Pull 訂閱,構建低延遲、可維護的 SQL Server 2008 資料庫同步備份架構。

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