數據庫復制:修改表結構、新增表、新增存儲過程 會被復制到訂閱服務器


【SQL Server高可用性】數據庫復制:修改表結構、新增表、新增存儲過程 會被復制到訂閱服務器?


在SQL Server上配置好數據庫復制后:

         

         1、如果給表加了字段,會不會復制到訂閱服務器呢?如果是刪除1個字段呢?

         2、如果新創建了1個表,會不會被同步過去呢?

         3、如果新建了一個存儲過程,會不會同步過去呢?


本文將會通過實驗,回答上述問題。



1、首先,需要配置數據庫復制。

這里為了簡單起見,用了機器上的2個SQL Server 2008R2的實例。

兩個實例分別是:MSSQLSERVER、SQL2008R2。

在配置時,以MSSQLSERVER為發布服務器,而SQL2008R2為訂閱服務器,配置為請求訂閱。


詳細的配置方法,可以參考這篇文章,區別在於下面的文章中是配置成了推送訂閱,有什么不明白的,可以在給我留言:

【SQL Server高可用性】數據庫復制:SQL Server 2008R2中通過數據庫復制,把A表的數據復制到B表


在兩個實例上運行如下代碼,來創建數據庫和表:

create database w
go

use w
go

create table www(id int primary key ,v varchar(10))


下面是配置完成后的截圖:

發布服務器



訂閱服務器




2、對於已經發布的表www,增加1列,會自動同步嗎?

在發布服務器上運行如下代碼:

 

alter table www
add v2 varchar(10)


從訂閱服務器的圖中,並沒有發現www表上新增的v2列,說明沒有同步過去,那么這樣怎么辦呢?



這個時候,嘗試“重新初始化訂閱”:





這里進行重新初始化,成功了。如果不成功,可以按照彈出的錯誤窗口的提示,禁用分發代理,然后再次重新初始化訂閱就可以了:



再次查看訂閱服務器,發現www表,已經有了v2列了:



接下來,在發布服務器上,再增加一個字段,發現訂閱服務器也自動增加了這個字段,而不需要重新初始化:

 

alter table www
add v3 datetime




然后,我們在發布服務器上刪除v3字段,而訂閱服務器上也自動刪除了這個v3字段。

但有時候,也會報錯,這個時候,可以再次嘗試一下,一般就能刪除這個字段。


3、新創建了1個表,會不會被同步過去呢?

這個得看是什么表,如果沒有主鍵,那么就沒辦法復制到訂閱服務器了。而如果是有主鍵的表,就可以復制。


先在發布服務器上創建2個表:

 

--沒有主鍵
select * into abc
from sys.objects


--有主鍵
create table abc123(a int primary key,b varchar(20),c datetime)


我們發現,在發布服務器上創建表后,和新增、刪除列不同,並不會自動復制到訂閱服務器上,那么怎么辦呢?


其實,很簡單,只需要找到發布,然后右鍵,選擇“屬性”:



在彈出的框中,在左邊選擇“項目”,在右邊去掉“僅顯示列表中已選中的項目”,然后給abc123表打手勾,就可以了,也就是讓SQL Server也復制這個表到訂閱服務器,否則SQL Server也不知道是否需要復雜:



不過,需要注意的是abc這個表上有一個紅色的圈,因為是沒有主鍵,這個表示不能復制的意思。


再次查看訂閱服務器,發現表已經同步,而且對每個被同步的表,都會有3個存儲過程,分別對應insert、update、delete:



如果沒有同步,需要用上面提到的方法,重新初始化一下就可以了。



4、如果新建了一個存儲過程,會不會同步過去呢?

其實這個和新建表是一樣的,需要在設置發布的屬性中的“項目”,把要發布的存儲過程,打上勾就可以了。

那如果想修改存儲過程呢?

這個一般會自動同步,所以修改后,自動就同步到訂閱服務器了。


免責聲明!

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



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