天天看點

SQLServer 可更新訂閱資料線上架構更改(增加字段)方案

這周測試了一些方法,最終算是确定一個方案可行的,雖然麻煩和耗時。

首先看簡單的架構圖:

SQLServer 可更新訂閱資料線上架構更改(增加字段)方案

上圖中,上面為釋出伺服器,下面為訂閱伺服器。以一個表為例,正常釋出為 Table 到 T1 的可更新訂閱釋出,資料雙向同步,使用者都是在訂閱資料庫操作,都是操作視圖。增加字段時,為了使使用者能夠在訂閱正常操作,再建立一個釋出訂閱,隻釋出一張表,資料太多時初始化會較久。注意:新的釋出不能是同一個資料庫!如果是同一個資料庫,為了避免和原來的表名一樣,更改了新訂閱的表名,會導緻

釋出到原來的訂閱資料不同步!是以新的訂閱在另一個資料庫上,保持表名稱一緻!因為系統調用的存儲過程表結構一緻。~如上圖,是以一個釋出中,在訂閱伺服器中要求兩個資料庫訂閱,其中一個釋出訂閱隻有一張表,該表将是新增字段的表。此時3張表都同步釋出雙向同步。

因為使用者都是操作視圖的,是以視圖的定義改為到新的資料庫表中,使用者操作仍正常,資料同步也正常。對新增加的釋出,禁止架構同步,釋出資料庫增加字段時,不會同步到新訂閱表中,但是會同步到原訂閱表中。待字段同步完成後,視圖定義改回原來的表,此時釋出和訂閱都有新字段了。而作為中介建立的的釋出訂閱可以删除了!~

主要步驟如下:

1.  確定釋出和訂閱資料一緻

2.  建立1個可更新訂閱釋出,隻釋出1張表 (釋出資料庫執行)

3.  新釋出的“沖突解決政策”: 保留釋出伺服器更改(釋出屬性更改)

4.  新釋出的“複制架構更改”: false(釋出屬性更改)

5.  建立訂閱(訂閱伺服器新的資料庫)

6.  更改作業所有者;初始化訂閱;等待完成…………

7.  釋出更改視圖定義(會同步到原訂閱中),使用另一個資料庫的訂閱表(釋出資料庫執行,注意訂閱表權限問題)

8.  确定原訂閱的隊列已經同步完成

9.  釋出資料庫中對表增加字段(自動同步到原訂閱中,新訂閱不同步)

10. 訂閱隊列如無積累,更改釋出視圖的定義,使用原來資料庫的表(釋出資料庫執行)

11. 最後删除新建立的釋出

測試完成!~個人測試正常,還未應用到生産庫中。其中最麻煩的是要初始化表資料,這是主要耗時的。