SQL SERVER Transactional Replication中添加新表如何不初始化整個快照


在SQL SERVER的復制(Replication)中,有可能出現由於業務需求變更,需要新增一張表或一些表到已有的復制(發布訂閱)當中,這種需求應該是很正常,也很常見的。但是在已有的復制(發布訂閱)當中增加新表/文章,往往需要將整個快照重新初始化,這樣做雖然簡單,但是往往在實際應用中會出現一些問題,例如,發布訂閱的表比較多,數據量比較大,那么重新初始化快照往往需要很長一段時間,影響系統正常運行。另外就是這樣做會增大服務器的負荷,影響網絡帶寬.

 

    那么是否可以在新增表/文章后,不用初始化整個快照,而只是初始化新增的表呢? 當然可以,下面以一個小案例來講述一下如何操作:

 

在數據庫TTT上建立了名為RPL_TTT的發布,要發布的對象為WipNoToReed和WipNoToStarch這兩張表,在另外一個服務器的數據庫Test上訂閱了該發布。現在由於需求變跟,需要增加一張表WipNoToLoosen

clipboard

 

我們可以按照下面三個步驟來操作,如下所示:

 

1:使用sp_helppublication查看該發布的相關信息,如下所示,你會看到默認情況下,'immediate_sync' 和 'allow_anonymous'這兩個屬性都是啟用的。我們首先需要禁用這兩個屬性。

       

        allow_anonymous      表示是否允許對發布使用匿名訂閱。

       immediate_sync       表示是否在每次快照代理運行時創建或重新創建同步文件。

use TTT;
go
 
sp_helppublication;
 
 
use TTT;
go
 
exec sp_helppublication  'RPL_TTT';

clipboard[1]

 

clipboard[2]

 

 
--Run on your publisher database
use TTT;
go
 
EXEC sp_changepublication
@publication = 'RPL_TTT',
@property = 'allow_anonymous' ,
@value = 'false'
GO
EXEC sp_changepublication
@publication = 'RPL_TTT',
@property = 'immediate_sync' ,
@value = 'false'
GO 

 

2:在本地發布當中找到"RPL_TTT",然后在"項目"當中增加表WipNoToLoosen,當然你也可以使用 sp_addarticle命令添加。如下所示:

clipboard[3]

 

image

 

3:在發布"RPL_TTT"上,右鍵單擊“查看快照代理狀態”,在彈出的窗口上選擇“啟動”,你會發現快照只會初始化一個表而不是整個三個表。

clipboard[4]

命令執行完成后,你會發現該表的subscription_status變為了2,如下所示

image

至於完成后,'immediate_sync' 和 'allow_anonymous'這兩個屬性如果你要啟動的話,也是非常簡單容易的。不啟用也問題不大。


免責聲明!

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



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