SQL Server主從數據庫同步方式及同步問題解決方案總結


SQL Server中的高可用特性
工作中使用SQL Server高可用特性的場景也就是數據庫主從復制,可以用的特性有三個:復制、鏡像、日志傳送。

復制(發布-訂閱模式):
復制嚴格來說並不算是一個為高可用性設計的功能,但的確可以被應用於高可用性。復制提供了數據庫對象級別的保護。復制使用的是發布-訂閱模式,即由主服務器(稱為發布服務器)向一個或多個輔助服務器或訂閱服務器發布數據。復制可在這些服務器間提供實時的可用性和可伸縮性。它支持篩選,以便為訂閱服務器提供數據子集,同時還支持分區更新。訂閱服務器處於聯機狀態,並且可用於報表或其他功能,而無需進行查詢恢復。
SQL Server 提供四種復制類型:快照復制、事務復制、對等復制以及合並復制。

我們一般選擇快照復制或事務復制,兩者概念介紹如下:
快照復制   
  1、概念     快照復制是完全按照數據和數據庫對象出現時的狀態來復制和分發它們的過程。快照復制不需要連續地監控數據變化,因為已發布數據的變化不被增量地傳播到訂閱服務器,而是周期性的被一次復制。   
  2、 適用情況   
  數據主要是靜態的,比如將數據倉庫復制到數據集市中   
  一段時間內允許有已過時的數據拷貝的情況   
  小批量數據   
  站點經常脫離連接,並且可接受高延遲

事務復制   
  1、概念    使用事務復制,初始快照數據將被傳播到訂閱服務器,因此該訂閱服務器就具有了一個所謂的初始負載,這是可以開始工作的內容。當出版服務器上發生數據修改時,這些單獨的事務會被及時捕獲並復制到訂閱服務器。並保留事務邊界,當所有的改變都被傳播后,所有訂閱服務器將具有與傳播服務器相同的值。   
  2、適用情況   
  需要數據修改經常在其發生的幾秒鍾內被傳播到訂閱服務器   
  需要事務是原子性的   
  訂閱服務器在通常是連接到出版服務器上的   
  應用程序不能忍受訂閱服務器接收改變的高延遲  

創建發布-訂閱的數據庫服務器名不能是IP,只能是具體的服務器名稱,如:

可以執行以下SQL查看:

use master  
go  
select @@servername
select serverproperty('servername') 

結果:

如果上下一致,則說明沒有問題,否則就需要改成一致的。

如果右鍵點擊創建發布或訂閱都不報錯,那么可以進行下一步。

根據具體情況使用不同的復制類型,這里我使用了事務復制:

具體創建過程參考https://www.cnblogs.com/zhaow/articles/8275064.html,這里我們創建個名叫DBPublishZW20180815的發布。

並且成功地在訂閱數據庫中創建了訂閱,如:

創建發布-訂閱后,我們可以監測發布和訂閱狀態,如:


還可以監測發布JOB和Agent的運行狀態:



復制中發布服務器和訂閱服務器內容不一致的解決辦法

在事務復制的過程中,有時候會由於各種各樣的原因導致發布服務器和訂閱服務器的數據不一致,造成這種情況往往是由於以下幾種原因之一:
①某個Agent運行出現錯誤或者Agent進程崩潰
②比較大型的發布是使用了備份還原,而不是快照復制初始化,而備份后發布端修改了數據
③非Distribution Agent線程修改了訂閱服務器的數據

上面三種情況是最常見的導致發布端和訂閱端數據不一致的原因,其中第三種原因往往出現的最多,在這種情況下,通常來說,可以通過重新初始化訂閱來解決該問題,但對於比較大的訂閱來說,或者發布和訂閱之間相隔太遠而造成網絡寬帶的問題,則重新初始化訂閱就不是那么吸引人的提案了。因此通過數據對比分析工具來比對有差異的數據,並僅僅更新那些和源不同步的數據則是更好的選擇。
這類工具包括類似Redgate和xSql的數據對比工具,也可以使用Visual Studio自帶的數據對比工具。

首先,我刪除訂閱庫中表中的一條數據(其實訂閱庫應該是只讀的),此時訂閱庫就與發布庫數據不一致了。
我們來看下監測結果:


可以看到,這里已經有了數據不同步的Log了,還可以看到發布-訂閱的整個過程Log:


使用Visual Studio自帶的數據對比工具
關於Visual Studio的SQL SERVER數據庫項目介紹:
1、打開VS,點擊文件-新建項目-SQL SERVER 數據庫項目(tips:安裝vs時需要添加數據庫管理插件)
2、創建項目后,在創建的解決方案下右鍵點擊導入-數據庫-選擇數據庫所在連接,導入設置默認就好,如果你們的數據庫權限范圍較高的話,根據自身情況設置
3、啟動成功后,會自動掃描數據庫的相關配置加載到VS列表當中,這樣對系統的數據庫架構就一覽無遺了
4、打開某個表的結構文件,可以看到我們表結構設計,相關的索引、主鍵、觸發器等,當然都只是結構,並且我們在界面上修改后,同時會生成對應的SQL語句,我們可以直接到數據庫中F5執行 以下即可

由於我本機Visual Studio沒裝這個項目類型,所以參考https://www.cnblogs.com/CareySon/p/3302369.html吧!
1、找出被刪除的數據

2、然后我們點擊"更新目標",則被刪除的數據會由發布端同步到訂閱端。如:

我們再次進行驗證訂閱,顯示已經通過訂閱。


有關配置日志傳送的相關文章:
https://blog.csdn.net/dba_huangzj/article/details/8312787
https://blog.csdn.net/dba_huangzj/article/details/8312872
https://blog.csdn.net/dba_huangzj/article/details/8313037

參考:
https://www.cnblogs.com/CareySon/p/3249667.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM