在事務復制的過程中,有時候會由于各種各樣的原因導致發布服務器和訂閱服務器的數據不一致,造成這種情況往往是由于以下幾種原因之一:
- 某個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.更新訂閱端后,訂閱通過驗證
文章列表
留言列表