有時候,您可能首先從備份初始化了一個事務訂閱,然后你又需要添加一個項目(Article)。如果訂閱方是由快照初始化的,你可以重新運行快照代理產生新的快照,其中只有新添加的那個項目被BCP出然后在訂閱方BCP入。但是,如果是使用備份/還原建立的訂閱,其快
有時候,您可能首先從備份初始化了一個事務訂閱,然后你又需要添加一個項目(article)。如果訂閱方是由快照初始化的,你可以重新運行快照代理產生新的快照,其中只有新添加的那個項目被bcp出然后在訂閱方bcp入。但是,如果是使用備份/還原建立的訂閱,其快照代理是不起作用的。
因而,在這種情況下,當一個新建表需要被新添加進發布時有兩種方式:
1.只為那一個項目創建新發布。使用發布向導或腳本,并選擇默認選項向訂閱推送一個新的快照。同一個發布上的多個發布共享一個日志讀取代理,而各個分發代理將會并行地將數據復制到訂閱方。
或者,
2.使用下面的步驟,向已有的發布中添加新項目,并在重啟復制之前手動同步數據。
下面是方式2的具體實施步驟:
1)?????? 停止日志讀取代理(log reader agent)。
2)?????? 在發布方停止對新建項目進行數據更改(注意,當數據正從此發布表中拷貝出時,直到此表已經通過sp_addarticle被添加到了發布中,這段期間我們必須確保停止對此數據表的所有更改。)
3)?????? 生成一個表結構腳本,在訂閱方創建表,并將此表中的數據從發布方拷貝到訂閱方。
A.????? 對于新建的或小型數據表,可以使用INSERT INTO… SELECT * FROM語句直接傳輸數據
B.????? 對于已有很多數據的表,創建一個SSIS包,從而在遠程服務器上創建并加載表。
4)?????? 使用sp_addarticle存儲過程將項目添加到發布中。(關于sp_addarticle的說明,請參見:)
當然,你也可以通過復制相關的向導來添加新的項目到發布中。比如:
– 右鍵點擊復制打開發布的屬性窗口
– 在發布屬性窗口中點擊目標表加入發布中
– 點擊確認保存
5)?????? 開啟日志讀取代理
6)?????? 現在你可以開始在此表上做數據更改,因為日志讀取器將會從此開始跟蹤表的數據變化并復制到訂閱端。
請注意,
– 當備份已經包括了該表,如果它仍存在于訂閱方,而且那個表沒有架構變化的情況下,就不需在訂閱方重新創建它,只需要保證人工同步數據即可。
– 在開啟日志讀取器代理之前,比較發布方和訂閱方上新添加表的行數,確定發布方和訂閱方所含的數據量是一樣的。