天天看點

SQLServer 可更新訂閱資料沖突的一個原因

可更新訂閱為什麼有沖突?

可更新訂閱中,當更新增加一個字段時,通常在釋出伺服器的釋出資料庫中增加,對表增加字段後,釋出自動同步到訂閱資料庫中(複制架構更改=true)。但是,如果此時在訂閱資料庫進行DML操作,資料将不會同步到釋出表中;這些差異資料在訂閱表中如果一直未進行DML 操作,也就不會再次同步到釋出中,存在差異。

複制配置環境:

可更新訂閱事務複制

釋出和訂閱沖突都以訂閱為準

使用排隊更新

在訂閱操作

沖突測試結果(以下為: 當資料存在不一緻的情況下,對訂閱再次操作會引起沖突,沖突政策會自動解決):

當釋出資料不存在,訂閱資料存在時,此時更新訂閱資料:(排隊更新沖突)

當釋出和訂閱主鍵相同,msrepl_tran_version不同時,此時更新訂閱資料:(排隊更新沖突)

以上兩種情況結果:

在釋出沖突,沖突表記錄值都為最新值,訂閱資料更新或插入到釋出表中。

SQLServer 可更新訂閱資料沖突的一個原因

當釋出資料不存在,訂閱資料存在時,此時删除訂閱資料:(排隊更新沖突)

當釋出和訂閱主鍵相同,msrepl_tran_version不同時,此時删除訂閱資料:(排隊更新沖突)

删除操作同步到釋出時沖突。

沖突入選方:

此行不再存在于“[dbo].[TestTab]”中。 [[dbo].[TestTab]].[qcfttabrowid] 中唯一 ID 的值是“8d335a44-36a0-432c-bba4-4979df3c804e”。

沖突落選方:

嘗試删除此位置上的此資料時出現上述錯誤,原因可能是此删除操作違反了一個或多個限制。如果您忽略此沖突,則應通過其他方式加以解決。您可以記錄此沖突的詳細資訊,然後将日志條目發送給系統管理者。

SQLServer 可更新訂閱資料沖突的一個原因

架構更如何防止沖突?