1. 程式人生 > >複製中釋出伺服器和訂閱伺服器內容不一致的解決辦法 (轉載)

複製中釋出伺服器和訂閱伺服器內容不一致的解決辦法 (轉載)

在事務複製的過程中,有時候會由於各種各樣的原因導致釋出伺服器和訂閱伺服器的資料不一致,造成這種情況往往是由於以下幾種原因之一:

  • 某個Agent執行出現錯誤或者Agent程序崩潰
  • 比較大型的釋出是使用了備份還原,而不是快照複製初始化,而備份後釋出端修改了資料
  • 非Distribution Agent執行緒修改了訂閱伺服器的資料


上面三種情況是最常見的導致釋出端和訂閱端資料不一致的原因,其中第三種原因往往出現的最多,在這種情況下,通常來說,可以通過重新初始化訂閱來解決該問題,但對於比較大的訂閱來說,或者釋出和訂閱之間相隔太遠而造成網路寬頻的問題,則重新初始化訂閱就不是那麼吸引人的提案了。因此通過資料對比分析工具來比對有差異的資料,並僅僅更新那些和源不同步的資料則是更好的選擇。

 

這類工具包括類似Redgate和xSql的資料對比工具,也可以使用Visual Studio自帶的資料對比工具進行,下面我通過一個簡單的Demo來展示如何解決該類問題。

 

 

DEMO
目前我已經建立好一個釋出伺服器和訂閱伺服器,釋出伺服器CAREYSON-SQL釋出了示例資料庫AdventureWorks的SalesOrderDetail整張表,訂閱伺服器sqlazur\sql2012訂閱了該表,如圖1所示。

圖1.基本的複製資訊

 

此時,我在訂閱伺服器人為的刪除資料,造成釋出伺服器和訂閱伺服器的資料不一致,如圖2所示。

圖2.在訂閱端手動刪除資料,造成不一致

 

我們再來服務端驗證訂閱,如圖3所示。

圖3.驗證訂閱

 

在複製監視器中,可以看到,在訂閱伺服器刪除的一條資料導致了驗證訂閱出現不同步的提示,如圖4所示。

圖4.訂閱已經不再同步

 

為了修正該問題,我們可以通過Visual Studio的資料庫專案來建立資料對比分析任務來找到缺失的資料,從而根據釋出端更新訂閱端,如圖5所示。

圖5.找出被刪除的資料

 

然後我們點選"更新目標",則被刪除的資料會由釋出端同步到訂閱端。如圖6所示。

圖6.目標資料庫已經更新

 

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

圖7.更新訂閱端後,訂閱通過驗證

 

原文連結