在初始同步后发生同步时,对一个订阅服务器上的数据所做的更改可能会与对其他订阅服务器或发布服务器上的数据所做的更改发生冲突。当您创建发布时,可以分配一个冲突解决程序来处理这些冲突。
检测冲突
当发生同步时,运行在发布服务器上的合并代理会检测任何数据冲突,然后根据与该发布关联的冲突解决程序来确定接受并传播到其他站点的数据。
在与 SQL Server 2005、SQL Server 2008 和 SQL Server 2008 R2 发布服务器同步时,Microsoft SQL Server Compact 3.5 同时支持行级和列级跟踪。
备注
在 SQL Server Compact 3.5 中不支持与 SQL Server 2000 进行同步。
使用冲突解决程序
在检测到冲突后,合并代理会启动为该项目选择的冲突解决程序。这可能是默认的冲突解决程序、其他来源的冲突解决程序或者自定义的冲突解决程序。根据冲突解决程序的规则选择接受的更改。SQL Server Compact 3.5 订阅服务器冲突始终会被检测到,并在发布服务器中进行解决,然后记录下来。
重要
现在,在同步过程中多用户访问允许数据更改。这些更改可能会引起客户端冲突。可以在订阅服务器上检测到客户端冲突,但不能解决冲突。下一次同步时在发布服务器上会重新检测到该冲突并给予解决。有关详细信息,请参阅多用户访问和同步。
冲突解决程序可以使用数据更改的源或订阅服务器的优先级值来解决冲突。例如,默认冲突解决程序会遵循这样的规则:发布服务器上的更改始终覆盖订阅服务器上的更改。您可以选择使用不同的冲突解决程序,始终使用订阅服务器上的更改覆盖发布服务器上的更改。
备注
SQL Server Compact 3.5 客户端始终具有优先级值 0。因此,基于优先级值的冲突解决程序将不会优先考虑在设备上的更改。
有关冲突检测和解决的详细信息,请参阅 SQL Server 联机丛书中的“合并复制冲突检测和解决”。
备注
SQL Server Compact 3.5 订阅不支持基于存储过程的合并冲突解决程序。
使用自定义冲突解决程序
自定义冲突解决程序允许将业务逻辑添加到复制中。自定义冲突解决程序是在托管代码或本机代码中构建的 DLL。若要使用自定义冲突解决程序,必须使用存储过程 sp_registercustomeresolver 在发布服务器和运行 IIS 的服务器上注册该冲突解决程序。sp_registercustomeresolver 存储过程包括 is_dotnet_assembly 参数;对于在托管代码中生成的冲突解决程序,将该参数设置为 True,对于本机 DLL,将该参数设置为 False。
重要
必须在运行 SQL Server 的计算机以及运行 IIS 的计算机上注册自定义冲突解决程序。