SQL Server從備份初始化的事務(wù)復(fù)制中添加發(fā)布項目

有時候,您可能首先從備份初始化了一個事務(wù)訂閱,然后你又需要添加一個項目(Article)。如果訂閱方是由快照初始化的,你可以重新運行快照代理產(chǎn)生新的快照,其中只有新添加的那個項目被BCP出然后在訂閱方BCP入。但是,如果是使用備份/還原建立的訂閱,其快

有時候,您可能首先從備份初始化了一個事務(wù)訂閱,然后你又需要添加一個項目(article)。如果訂閱方是由快照初始化的,你可以重新運行快照代理產(chǎn)生新的快照,其中只有新添加的那個項目被bcp出然后在訂閱方bcp入。但是,如果是使用備份/還原建立的訂閱,其快照代理是不起作用的。

因而,在這種情況下,當(dāng)一個新建表需要被新添加進發(fā)布時有兩種方式:

1.只為那一個項目創(chuàng)建新發(fā)布。使用發(fā)布向?qū)Щ蚰_本,并選擇默認(rèn)選項向訂閱推送一個新的快照。同一個發(fā)布上的多個發(fā)布共享一個日志讀取代理,而各個分發(fā)代理將會并行地將數(shù)據(jù)復(fù)制到訂閱方。

或者,

2.使用下面的步驟,向已有的發(fā)布中添加新項目,并在重啟復(fù)制之前手動同步數(shù)據(jù)。

下面是方式2的具體實施步驟:

1)?????? 停止日志讀取代理(log reader agent)。

2)?????? 在發(fā)布方停止對新建項目進行數(shù)據(jù)更改(注意,當(dāng)數(shù)據(jù)正從此發(fā)布表中拷貝出時,直到此表已經(jīng)通過sp_addarticle被添加到了發(fā)布中,這段期間我們必須確保停止對此數(shù)據(jù)表的所有更改。)

3)?????? 生成一個表結(jié)構(gòu)腳本,在訂閱方創(chuàng)建表,并將此表中的數(shù)據(jù)從發(fā)布方拷貝到訂閱方。

A.????? 對于新建的或小型數(shù)據(jù)表,可以使用INSERT INTO… SELECT * FROM語句直接傳輸數(shù)據(jù)

B.????? 對于已有很多數(shù)據(jù)的表,創(chuàng)建一個SSIS包,從而在遠(yuǎn)程服務(wù)器上創(chuàng)建并加載表。

4)?????? 使用sp_addarticle存儲過程將項目添加到發(fā)布中。(關(guān)于sp_addarticle的說明,請參見:)

當(dāng)然,你也可以通過復(fù)制相關(guān)的向?qū)硖砑有碌捻椖康桨l(fā)布中。比如:

– 右鍵點擊復(fù)制打開發(fā)布的屬性窗口

SQL Server從備份初始化的事務(wù)復(fù)制中添加發(fā)布項目

– 在發(fā)布屬性窗口中點擊目標(biāo)表加入發(fā)布中

SQL Server從備份初始化的事務(wù)復(fù)制中添加發(fā)布項目

– 點擊確認(rèn)保存

5)?????? 開啟日志讀取代理

6)?????? 現(xiàn)在你可以開始在此表上做數(shù)據(jù)更改,因為日志讀取器將會從此開始跟蹤表的數(shù)據(jù)變化并復(fù)制到訂閱端。

請注意,

– 當(dāng)備份已經(jīng)包括了該表,如果它仍存在于訂閱方,而且那個表沒有架構(gòu)變化的情況下,就不需在訂閱方重新創(chuàng)建它,只需要保證人工同步數(shù)據(jù)即可。

– 在開啟日志讀取器代理之前,比較發(fā)布方和訂閱方上新添加表的行數(shù),確定發(fā)布方和訂閱方所含的數(shù)據(jù)量是一樣的。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊13 分享