SQL Server Replication 總結


合並復制中,數據庫架構的更改要重新生成發布端的快照


 

在SQL Server 合並復制中,如果在發布端做了數據庫架構的更改(例如新建表,更改表結構等),原則上來說都需要重新生成發布端的快照,訂閱端才能同步這些更改(訂閱端要“重新初始化”)。

 

但是我發現目前SQL Server 2016中,如果只是更改發布端表的列類型、甚至新加一列,即便是不重新生成發布端快照,訂閱端只要同步一次,那么這些更改也會同步到訂閱端表上。但是如果是在發布端表上新增了一個索引,那么就必須重新生成發布端快照,並且重新初始化訂閱端,新加的索引才能從發布端同步到訂閱端。

所以原則上來說只要是更改了數據庫中對象的架構,那么還是推薦大家,重新生成發布端的快照,並且重新初始化訂閱端,這樣能夠百分之百保證發布端和訂閱端保持一致。

 

 

訂閱端不能做數據庫對象架構的更改


 

如果用下面語句更改訂閱端數據庫的表Person,對其增加一個列Cash會失敗,錯誤如下:

ALTER TABLE [dbo].[Person]
ADD Cash decimal(20,2)

 

Msg 21531, Level 16, State 1, Procedure sp_MSmerge_altertable, Line 377 [Batch Start Line 0]
The data definition language (DDL) command cannot be executed at the Subscriber. DDL commands can only be executed at the Publisher. In a republishing hierarchy, DDL commands can only be executed at the root Publisher, not at any of the republishing Subscribers.
Msg 21530, Level 16, State 1, Procedure sp_MSmerge_ddldispatcher, Line 191 [Batch Start Line 0]
The schema change failed during execution of an internal replication procedure. For corrective action, see the other error messages that accompany this error message.
Msg 3609, Level 16, State 2, Line 1
The transaction ended in the trigger. The batch has been aborted.

可以看到錯誤提示,只能在發布端執行DDL命令,無法在訂閱端執行DDL命令。

 

 

Replication目前的支持度


 

文件表

目前在SQL Server 2016中,FileTable表不支持Replication,如下圖所示:

但是如果是包含FILESTREAM列的普通表,是可以支持Replication的

CREATE TABLE Attachment (
    [ID] [UNIQUEIDENTIFIER] ROWGUIDCOL NOT NULL PRIMARY KEY,
    [FileName] NVARCHAR(100) NULL,
    [CreateUser] NVARCHAR(100) NULL,
    [CreateDatetime] DATETIME NULL,
    [Content] VARBINARY(MAX) FILESTREAM NULL  
)
FILESTREAM_ON FileStreamGroupFirst

 

內存優化表

目前在SQL Server 2016中,內存優化表還不支持Replication

下圖中表Reseller實際上是一個內存優化表,可以看到在合並復制的Articles中其可以被選中:

但是點擊OK按鈕后,會提示錯誤如下:

提示內存優化表不支持Replication,這算是一個遺憾,不知道以后的SQL Server版本是否會讓內存優化表支持Replication

 


免責聲明!

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



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