切勿更新同步表中的主键。更新主键会导致主键的目标落空,因为主键是标识不同数据库(远程和统一数据库)中相同行的唯一方式并且是检测冲突的唯一方式。
冲突与错误是两个不同的概念。在冲突发生时,您应定义一个过程以计算正确值,或至少使用日志文件记录冲突。冲突处理是设计合理的应用程序中不可缺少的一部分。
在同步过程的下载阶段,远程数据库中不会出现冲突。如果下载的行中包含一个新的主键,则该行的值将插入到新的一行。如果该主键与一个现有行的主键相匹配,则会更新该行中的值。
User1 开始时的库存为十件,卖出三件后将 Remote1 库存值更新为七件。User2 卖出 4 件并将 Remote2 库存更新为 6。Remote1 同步时,同步数据库将被更新为 7。Remote2 同步时,由于库存值不再是 10,因此会检测到冲突。若要以编程方式解决这一冲突,需要三个行值:
统一数据库中的当前值。
Remote2 上载的新行值。
Remote2 在上一次同步期间获取的旧行值。
在这种情况下,业务逻辑可使用以下方法来计算新的库存值并解决冲突:
current consolidated - (old remote - new remote) -> 7 - (10-6) = 3 |
有关如何处理冲突的其它示例,请参见:
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |