【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、如果新建了一個存儲過程,會不會同步過去呢?
其實這個和新建表是一樣的,需要在設置發布的屬性中的“項目”,把要發布的存儲過程,打上勾就可以了。
那如果想修改存儲過程呢?
這個一般會自動同步,所以修改后,自動就同步到訂閱服務器了。