在複製數據庫中,我在每個表中添加額外的列。每次我重新初始化訂閱時,所有的表格都被刪除,而且我添加了鬆散的列,所以我必須重新添加它。是否有可能避免刪除表,以便複製過程使用數據庫中的現有數據?如何在重新激活訂閱時避免表刪除(複製)
感謝
在複製數據庫中,我在每個表中添加額外的列。每次我重新初始化訂閱時,所有的表格都被刪除,而且我添加了鬆散的列,所以我必須重新添加它。是否有可能避免刪除表,以便複製過程使用數據庫中的現有數據?如何在重新激活訂閱時避免表刪除(複製)
感謝
你不說你使用什麼類型的複製 - 是快照,事務,合併或對等網絡?
不管類型,你的問題的簡短答案是否定的;在複製快照中,訂閱服務器上表的模式必須與發佈服務器匹配(或者準確地說,從快照中包含的發佈商的文章中篩選出的列清單)
如果模式不匹配,嘗試應用快照將失敗。
周圍有這樣的幾種方法:
如果你需要保持在其鏈接到行發佈服務器上的用戶信息,最簡單的方法是在另一個表的信息存儲在與用戶一個將其鏈接到複製表的主鍵的列。請注意,您將無法使用外鍵強制執行此關係,因爲這樣做會阻止在應用新快照時,訂閱者的表文章被刪除或清除。
另一種更復雜的方法是修改發佈以執行重命名訂閱服務器上的表的快照前腳本和創建新列的post-snapshot腳本,從附加內容複製數據將重命名錶上的列更改爲新創建的表,然後刪除重命名的表。查看文檔sp_addpublication
的詳細信息(@pre_snapshot_script
和@post_snapshot_script
參數)
考慮你想增加一列,你要做到這一點發布數據庫,並將它傳播到用戶(S)與出版物@replicate_ddl設置爲true。重新初始化不是必需的。
你要做到這一點使用ALTER TABLE <表>上發佈ADD <專欄>語法。