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

來源:互聯網
上載者:User

標籤:服務   status   相關資訊   script   資料庫   狀態   資訊   快照   表示   

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

 

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

在資料庫learningProc上建立了名為learningProcTest01的發布,要發布的對象為student和course這兩張表,在另外一個伺服器的資料庫Test上訂閱了該發布。現在由於需求變跟,需要增加一張表TestTable

 

 

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

 

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

       

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

       immediate_sync       表示是否在每次快照代理運行時建立或重新建立同步檔案。

 

 

EXEC sp_changepublication@publication = ‘RPL_TTT‘,@property = ‘allow_anonymous‘ ,@value = ‘false‘GOEXEC sp_changepublication@publication = ‘RPL_TTT‘,@property = ‘immediate_sync‘ ,@value = ‘false‘GO 

 

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

 

 

 

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

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

 

 至於完成後,‘immediate_sync‘ 和 ‘allow_anonymous‘這兩個屬性如果你要啟動的話,也是非常簡單容易的。只需要將false改為True,執行代碼就行了,不啟用也問題不大。

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.