合併式複寫考量
合併式覆寫的考量有下列數項:
將 uniqueidentifier 資料行加入至已發行的資料表。
timestamp 資料行。
大型物件 (LOB) 資料類型。
在已發行的資料表中插入大量資料。
發行集相容性層級。如需詳細資訊,請參閱<在複寫拓撲中使用多個 SQL Server 版本>中的「合併發行集的相容性層級」一節。
加入 uniqueidentifier 資料行
合併式複寫會使用全域唯一識別碼 (GUID) 資料行,在合併式複寫處理序期間識別各資料列。如果已發行資料表沒有含有 ROWGUIDCOL 屬性和唯一索引的 uniqueidentifier 資料行,複寫便會加入該資料行。請確定任何參考已發行資料表的 SELECT 和 INSERT 陳述式皆使用資料行清單。如果資料表不再是已發行狀態且複寫已加入資料行,則會移除該資料行;如果資料行已存在,則不會將它移除。
timestamp 資料行
合併式複寫支援 timestamp 資料行。timestamp 資料行已複寫,但是實際的 timestamp 資料行值沒有。在「訂閱者」端套用快照集時,會重新產生 timestamp 值。因為「訂閱者」端會重新產生 timestamp 值,所以執行發行項驗證時會篩選出 timestamp 資料行。
大型物件 (LOB) 資料類型
如果已發行資料表包含任何 LOB,建議您為 sp_addmergearticle (Transact-SQL) 的 @stream_blob_columns 參數指定 TRUE 值。如果未指定 TRUE,則必須在「發行者」端的記憶體內建整個 LOB,而如果 LOB 相當大,則可能造成「發行者」耗盡記憶體。
重要事項 |
---|
啟用此記憶體最佳化,可能會在同步處理期間影響合併代理程式的效能。只有在複寫包含 MB 資料的資料行時,才應該使用這個選項。 |
text、ntext 和 image 資料行的更新只會在 UPDATE 陳述式已明確更新資料行時複寫:更新會引發更新中繼資料的觸發程序,而確保交易傳遞至其他「訂閱者」。僅使用 WRITETEXT 和 UPDATETEXT 作業並不會將變更傳播到其他網站。如果應用程式使用 WRITETEXT 與 UPDATETEXT 來更新 text 或 ntext 資料行,請在同一個交易之內,於 WRITETEXT 或 UPDATETEXT 作業後明確加入一個空的 UPDATE 陳述式,以引發觸發程序並藉此保證將變更傳播到其他網站。如需這些資料類型的詳細資訊,請參閱<ntext、text 和 image (Transact-SQL)>。
[!附註]
建議您分別使用 varchar(max)、nvarchar(max)、varbinary(max) 代替 text、ntext 與 image 資料類型。
在已發行的資料表中插入大量資料
合併式複寫會使用觸發程序和系統資料表追蹤已發行資料表的變更。如果您使用 bcp 公用程式或 BULK INSERT 命令插入大量資料,根據預設並不會引發觸發程序。如果未引發觸發程序,則不會追蹤插入動作,也不會將其傳播到其他節點。為確實追蹤變更,建議您在執行大量插入時使用下列其中一種方法:
使用 bcp 公用程式或 BULK INSERT 命令的 FIRE_TRIGGERS 選項。這個選項能確保引發觸發程序,因為這些程序會在傳統插入作業中。如需詳細資訊,請參閱<bcp 公用程式>和<BULK INSERT (Transact-SQL)>。
執行大量插入之後執行預存程序 sp_addtabletocontents。這個程序會針對系統資料表中,任何目前未包含的原始資料表資料列插入參考。如需詳細資訊,請參閱<sp_addtabletocontents (Transact-SQL)>。