天天看點

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

<a href="#_labelContents">本文所涉及的内容(Contents)</a>

<a href="#_labelContexts">背景(Contexts)</a>

<a href="#_labelProcess">搭建過程(Process)</a>

<a href="#_labelAttention">注意事項(Attention)</a>

<a href="#_labelQuestions">疑問(Questions)</a>

<a href="#_labelReferences">參考文獻(References)</a>

  當SQL Server遇到同樣需要對曆史資料庫搭建複制,通常的做法是在本地釋出快照,再由訂閱傳輸資料,那SQL Server應該如何實作備份曆史資料搭建複制(釋出/訂閱)呢?下圖是備份檔案初始化訂閱的基本邏輯結構圖:

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure0:備份檔案初始化訂閱邏輯結構圖)

(一) 環境資訊

系統環境:Windows Server 2008 + SQL Server 2008

釋出伺服器:192.168.1.105,伺服器名稱:QuZhoushiwei105

分發伺服器:與釋出伺服器同一台機器

訂閱伺服器:192.168.1.106,伺服器名稱:QuZhoushiwei106

釋出資料庫:Barfoo.TestPublish

訂閱資料庫:Barfoo.TestSubscribe

資料庫帳号:ReplicationUser/ ReplicationPassword

(二) 搭建步驟

1) 在釋出伺服器上以QuZhoushiwei105伺服器名稱登陸釋出伺服器,如果你以localhost或者IP形式登陸伺服器,在建立釋出的時候會出現下圖Figure1的錯誤資訊;

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure1:錯誤資訊)

登陸伺服器之後使用下面的SQL腳本建立一個測試資料庫:Barfoo.TestPublish,建立一個測試表:UserInfo,并插入一條資料,用于模拟曆史資料;

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure2:UserInfo表記錄)

2) 在釋出資料庫和訂閱伺服器上分别執行下面的SQL腳本建立帳号和密碼(ReplicationUser/ ReplicationPassword);

3) 在釋出伺服器上建立一個釋出,具體步驟如下圖所示:

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure3:建立釋出)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure4:選擇資料Barfoo.TestPublish)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure5:選擇事務釋出)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure6:選擇需要釋出的字段)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure7:不勾選)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure8:設定快照代理)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure9:設定代理安全性)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure10:設定日志讀取器代理)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure11:設定帳号密碼)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure12:建立釋出)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure13:釋出名稱)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure14:建立成功)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure15:建立的釋出)

4) 設定釋出屬性中的訂閱選項,把允許從備份檔案初始化的預設值false設定為true;也可以使用下面的SQL腳本進行修改;

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure16:Allow initialization from backup files)

5) 使用下面的SQL腳本備份資料庫Barfoo.TestPublish,保留備份檔案,在後面建立訂閱的時候需要用到;

6) 在訂閱伺服器:192.168.1.106上使用下面的SQL腳本還原剛剛的備份檔案;

7) 在訂閱伺服器行修改帳号ReplicationUser,SQL腳本如下:

8) 在釋出伺服器上執行sp_addsubscription存儲過程添加訂閱,SQL腳本如下:

如果上面的SQL腳本執行成功,資料庫會傳回下面的提示資訊:

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure17:建立訂閱傳回資訊)

注意:如果備份檔案之後相隔太長時間,執行上面的腳本有可能會出現下面的錯誤資訊,如果遇到這個問題,可以參考下面【疑問】的内容:

消息21397,級别16,狀态1,過程sp_MSaddautonosyncsubscription,第271 行

對從指定備份建立的非同步訂閱進行同步時需要一些事務,但這些事務在分發伺服器上不可用。請使用更新的日志以及差異或完整資料庫備份再試此操作。

9) 檢查新添加的訂閱屬性中的安全性-&gt;訂閱伺服器連接配接,确認正确的帳号和密碼,預設是使用代理帳号;

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure18:訂閱伺服器屬性)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure19:設定安全性)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure20:設定登入名密碼)

也可以通過下面的SQL腳本設定訂閱伺服器連接配接的帳号密碼:

10) 檢查釋出伺服器和訂閱伺服器的訂閱狀态;

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure21:啟動複制螢幕)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure22:訂閱狀态)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure23:訂閱伺服器的本地訂閱)

11) 檢視訂閱伺服器QuZhoushiwei106的資料庫Barfoo.TestSubscribe的UserInfo表的資料;

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure24:UserInfo表資料)

12) 使用下面的SQL腳本在釋出伺服器上UserInfo表插入新資料,測試複制,分别檢視釋出伺服器與訂閱伺服器的資料;

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure25:釋出伺服器上UserInfo表資料)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure26:訂閱伺服器上UserInfo表資料)

1. 在SQL SERVER下實作釋出伺服器和訂閱伺服器的通信正常(即可以互訪),打開1433端口,在防火牆中設定入站規則;

2. 釋出伺服器與訂閱伺服器的SQL Server Agent代理帳号必須設定的一樣,否則不能互訪;

3. 後期添加新的表需要手動在訂閱伺服器建立表結構,主要先在釋出屬性的項目中勾選新表,再通過表的右鍵菜單建立表結構腳本。

(一) 怎麼確定在釋出伺服器持續進資料的情況下,如何保證在拷貝曆史資料備份之後還能知道訂閱從哪個LSN開始讀取?

解答:如果備份檔案之後相隔太長時間,執行上面的腳本有可能會出現下面的錯誤資訊:

如果遇到這個問題,有3種解決辦法:

A. 按照上面的提示,對Barfoo.TestPublish資料庫做一個差異備份,再在Barfoo.TestSubscribe資料庫做差異還原,需要注意的是在使用sp_addsubscription的時候應該指定差異備份的檔案;

B. 如果你的資料庫Barfoo.TestPublish可以接受短時間不寫入資料,可以在做完整備份之前就先設定資料庫為隻讀狀态,在資料庫【屬性】-【選項】-【狀态】-【資料庫為隻讀】設定為True;

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure27:資料庫隻讀)

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure28:分發清除)

(二) 如果是transactional的replication,建立完畢之後是會産生對應的三個Job,下面3個是複制作業中的Job,他們的作用分别是什麼呢?

A. QUZHOUSHIWEI105-Barfoo.TestPublish-12

B. QUZHOUSHIWEI105-Barfoo.TestPublish-testpub-12

C. QUZHOUSHIWEI105-Barfoo.TestPublish-testpub-QUZHOUSHIWEI106-22

QUZHOUSHIWEI105-Barfoo.TestPublish-12,這是REPL-LogReader類别的JOB,一個資料庫隻會有一個日志讀取器作業,命名的格式是:ServerName-DBName-Num;

QUZHOUSHIWEI105-Barfoo.TestPublish-testpub-12,這是REPL-Snapshot類别,的JOB,一個釋出(也叫做一條同步鍊)對應一個快照作業,命名的格式是:ServerName-DBName-PublishName-Num;

QUZHOUSHIWEI105-Barfoo.TestPublish-testpub-QUZHOUSHIWEI106-22,這是一個REPL-Distribution類别的JOB,一個訂閱對應一個分發作業,命名的格式是:ServerName-DBName-PublishName-ServerName-Num;

可以通過下面的SQL腳本查詢訂閱JOB和訂閱屬性的相關資訊:

SQL Server 通過備份檔案初始化複制一.本文所涉及的内容(Contents)二.背景(Contexts)三.搭建過程(Process)四.注意事項(Attention)五.疑問(Questions)六.參考文獻(References)

(Figure29:訂閱配置資訊)

<a href="http://technet.microsoft.com/zh-cn/library/75c8c1f8-60bc-44a8-944b-d18d1f6bda11(v=sql.90)">初始化事務訂閱(不使用快照)</a>

<a href="http://technet.microsoft.com/zh-cn/library/ms147834(v=sql.105)">如何從備份初始化事務訂閱(複制 Transact-SQL 程式設計)</a>

<a href="http://technet.microsoft.com/zh-cn/library/ms151795(v=sql.110).aspx">使用快照初始化訂閱</a>

<a href="http://blog.csdn.net/arrow_gx/article/details/6370134">SQL Server事務複制通過備份檔案進行訂閱初始化</a>

<a href="http://database.51cto.com/art/201010/230683.htm">SQL Server複制用備份檔案初始化訂閱</a>

<a href="http://msdn.microsoft.com/zh-cn/magazine/ms187359(SQL.90).aspx">ALTER AUTHORIZATION (Transact-SQL)</a>

<a href="http://blog.sina.com.cn/s/blog_4b05f08e01011rue.html">Server2008+SQL2008 日志讀取代理器未運作 程序無法在“WIN-XXX”上執行“sp_replcmds”</a>

<a href="http://www.cnblogs.com/fygh/archive/2011/07/04/2097405.html">SQLServer Replication 常見錯誤</a>

<a href="http://technet.microsoft.com/zh-cn/library/ms181702.aspx">sp_addsubscription (Transact-SQL)</a>

<a href="http://technet.microsoft.com/zh-cn/library/ms188358(v=sql.110).aspx">sp_addpullsubscription_agent (Transact-SQL)</a>