我正在尝试在两台服务器(一个发布者和一个订阅者)之间实现合并复制。
假设这些表:
--Main table in Publisher
Ticket (id, userId, reqId, blockedDate, usedDate, returnDate, transferDate, ...)
--On Subscriber (The fields are in Publication)
Ticket (id, userId, blockedDate, usedDate)
我们必须将当前日期分配给transferDate
当行进入订阅者时,并分配给returnDate
它从订阅者返回时。由于我们必须考虑文件同步(使用 USB 记忆棒向/从订阅者传输/返回数据!)这些字段必须在同步文件同步或复制时分配。
我知道您可以为冲突解决添加自定义业务逻辑(发生冲突时)。我正在寻找类似触发器的复制事件,这使我能够从发布(甚至需要时甚至是另一个表)中操作某些字段。
问题
是否可以手动处理复制事件(推送和拉取)?**(自定义或覆盖 PULL/PUSH。不是冲突解决程序)**
你能给我一个实现自定义合并复制和在
distributed transaction
SP 的帮助下同步之间的比较吗?
我需要安排同步(在数据库服务器上没有负载的午夜),但是我们非常需要能够手动同步(从我们的 Web 应用程序中)。
在第二个问题中,我需要它们的性能、可靠性,当然还有它们的可维护性。这些因素尤其是前两个因素是一个大问题。假设 Publisher 可能有几百万条记录,而 Subscriber 可能有几万条记录。所以每次同步,大约会传输几万条记录。
合并复制检查行;如果有变化并且没有冲突,则该行合并。如果存在冲突,冲突解决程序(可以是您的自定义存储过程解决程序)会处理冲突。我想在第一种情况下(数据更改无冲突)编写自己的逻辑而不是SQL内置的合并机制。显然我想定制它。
文章中只有id, userId, blockedDate, usedDate
专栏。我想returnDate
在 aTicket
返回 Publisher 时填充(在pull上)并transferDate
在 aTicket
返回 Subscriber 时填充(在push上)。
要自定义合并过程,您需要实现自定义业务逻辑处理程序(需要 .NET 代码——无法使用 TSQL 实现)。请参阅文档中的在合并同步期间执行业务逻辑。它在 SQL Server 2012 及更高版本中可用。
重载方法 Update、Insert 和 Commit 以转换已更改的行,以及冲突解决程序方法以修改冲突逻辑。不能使用 T-SQL,必须使用 .NET 代码来完成。主要限制是每个可覆盖的方法对每一行调用一次(如 SSIS 行转换),据我所知,没有一种方法对所有已更改的行调用。
有一些解决方法可以处理您的情况,但这是一般解决方案。
这是 BOL C# 模板: