SQL Server 交易式複寫 (Transactional Replication)--學習心得 與 設定重點

摘要:SQL Server 交易式複寫 (Transactional Replication)





 

簡單的說,有兩台DB

第一台,稱為「發行者」(Distribution / 資料的主要來源)。

第二台,稱為「訂閱者」(Subscription)。接受第一台DB複製過來的資料。

 

先依照自己的情況,挑選一種複寫方式。

我想,不少需求都是第一種「交易式複寫」便能搞定。 

    資料來源 http://technet.microsoft.com/zh-tw/library/ms152531(v=sql.105).aspx

 

1. 交易式複寫 *
交易式複寫一般用於伺服器 對 伺服器環境,並適用於下列各案例:
    ‧您希望發生累加式更新時,能立即傳播給「訂閱者」。
    ‧應用程式在發行者進行變更的時間與變更到達訂閱者的”時間”需要有低度延遲
    ‧應用程式需要中繼資料狀態的存取權。例如,若資料列變更五次,交易式複寫允許應用程式回應至每個變更 (如引發觸發程序),而非只有回應至資料列的資料變更。
    ‧發行者有極大量的插入、更新和刪除活動。
    ‧發行者或訂閱者為非 SQL Server 資料庫,如 Oracle。
 
依預設,交易式發行集的訂閱者應當成唯讀處理,因為變更並不會寫回發行者。
 
 
2. 合併式複寫
合併式複寫通常會在 伺服器 至 用戶端環境中使用。
合併式複寫適合於下列任何情況:
    ‧多個訂閱者可能會在不同時間更新相同的資料,並將這些變更傳播到發行者與其他訂閱者。
    ‧「訂閱者」需要接收資料、離線變更資料,稍後同步變更「發行者」和其他「訂閱者」。
    ‧每個訂閱者需要一個不同的資料分割。
    ‧可能會發生衝突,而在發生衝突時,您需要偵測與解決衝突的能力。
    ‧應用程式需要淨資料變更,而非對中繼資料狀態的存取。例如,如果資料列在「訂閱者」與「發行者」同步之前,於「訂閱者」端變更了五次,則該資料列只需在「發行者」端變更一次,以反映最終資料變更 (即第五次的值)。
 
合併式複寫允許各站台自發地工作,然後將更新合併到單一的統一結果。
 
 
3. 快照式複寫
若下列一或多項敘述為真,則最適合單獨使用快照式複寫:
    ‧較少變更資料。
    ‧可接受已過時的發行者相關資料副本放置一段時間。
    ‧複寫小量資料時。
    ‧在短時間內發生大量變更。
 
資料變更數量可觀  但次數不頻繁時,最適合快照式複寫。
 

 

***************************************************************************************************************************************

有一些相關的文章,可以先參考一下。

網友的經驗談、安裝步驟都有圖片說明了。話雖如此,我還是買了幾本書先看過一遍。

 

http://www.dotblogs.com.tw/dotjason/archive/2009/08/03/9819.aspx  (這篇寫得最完整)

http://www.dotblogs.com.tw/jerrymow/archive/2010/12/30/20472.aspx

http://caryhsu.blogspot.tw/2012/03/sql-server-nlb.html

http://blog.xuite.net/tolarku/blog/41423198-%5BSQL%5D+2008++Transactional+Replication+-+%E4%BA%A4%E6%98%93%E5%BC%8F%E8%A4%87%E5%AF%AB

http://www.dotblogs.com.tw/ricochen/archive/2010/12/11/20066.aspx

***************************************************************************************************************************************

 

當然,微軟有一份說明也很詳細。步驟最明確!

 

 

我是依照 "微軟的教學課程" 來做實驗,個人心得如下

   無法保證正確,因為我不是網管與DBA高手。但我做了很多次,這是成功經驗

================================================

1.  文件中提到的多個帳號,我只用了一個就能完成。

    重點,這個帳號必須在兩台DB都有權限最好設定 "高"一點,以免後續步驟的執行權限不足

 

2. 發行者(第一台DB),資料的主要來源。這個資料庫請設定為 sa,以免後續步驟的執行權限不足

    點選這一個資料庫,按下"滑鼠右鍵"並選「屬性 Property」

    畫面左側的 Menu,請選第二個 Files。

    然後在畫面右邊的第二格,請輸入 sa(原本可能寫 default).....微軟上面的教學文章沒有提到這一點

 

執行權限不足,是我十餘次設定中最常發生的錯誤。 

另外幾個「權限設定」在微軟的教學文章中有提到。只要沒有漏了做,應該都能運作。

...........................完成了上面兩個重點(微軟教學文章中沒有提到),就OK啦!

 

3. 本文一開始收錄的相關BLOG文章,其他網友、前輩都會自己寫SQL Script來做設定。

    微軟教學文件中、我自己的設定經驗,發覺這並非必要條件。

    只要依照微軟的教學文章,畫面上的精靈步驟逐一做好,效果是一樣的。

    精靈設定,完成後一樣可以產生SQL Scriipt,我有拿出來其他前輩的寫法作比對,100%雷同。

 

4. "似乎(我不確定)"只能複寫「資料表(Table)」

    設定過程中,我把 View、Stored Procedure打勾以後,都會造成失敗。

    網路上看見的設定步驟(包含微軟教學文件),都 "只有" 勾選「資料表(Table)」

 

5. 「資料表(Table)」必須要有主索引鍵(P.K. / Primary Key)

    不然的話,不能勾選(不能複寫到別人身上)

 

 

我想,不少需求都是第一種「交易式複寫」便能搞定。 

    小型的資料庫(例如幾百MB的 .mdf檔),延遲時間大約只有一秒 (Intranet裡面比較快)。

    稍微大一點的資料庫(例如20GB的 .mdf檔),延遲時間則可能到達十餘秒才能複寫過去(如果是 Internet不知道會不會更慢?)

但效果已經不錯了。

 

資料庫的大小,跟運作時間有正相關。

    在建立(設定)時、或是重新 run一次快照(snapshot)會很花時間

    我曾經放置一天就發現 複寫的Agent壞了,必須重來一次(重新做  Reinitialization才恢復)

 

如果做壞了,想要重新設定「複寫」(把原本的設定刪除)

有時需要重新啟動SQL Server服務才能將步驟重做一次

 

 

== 結 論 ==

    設定很簡單......微軟的產品與設定,大家不用擔心

    重點是 發生問題時該 怎麼處理?

 

    書上都沒講到(這些 "經驗" 比較寶貴,但比較難取得)

 

 

因為網管、DBA這部分我不熟悉,初學的時候,比較難下關鍵字

所以常常 Google不到資訊,但是在對岸的百度(http://www.baidu.com/就很容易查到東西

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約 135hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.tw  或  school (at) mis2000lab.net

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

.........   facebook社團   https://www.facebook.com/mis2000lab   ......................

.........  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)。

...................................................................................................................................................... 

ASP.NET MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課