Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 客户端管理 » 用于 MobiLink 的 SQL Anywhere 客户端 » SQL Anywhere 客户端 » 启动同步

 

同步中的并发

为确保同步的完整性,dbmlsync 必须确保在构建上载到应用下载之间的这段时间内下载中的任何行都未被修改。

在除 Windows Mobile 以外的所有平台上,缺省情况下 dbmlsync 会在正在同步的任何发布中涉及的所有表上获得共享锁。在 Windows Mobile 上,缺省情况下 dbmlsync 获得独占锁。Dbmlsync 会在构建上载之前获得锁,并持有该锁直到应用下载之时。

有关锁的详细信息,请参见行锁

使用以下选项可自定义此锁定行为:

-d 选项

使用锁定机制时,如果存在到数据库的其它连接,则只要这些连接在同步表上有锁,同步就会失败。如果要确保同步即使在存在其它锁时仍立即进行,请使用 dbmlsync -d 选项。指定此选项时,数据库将删除任何会干扰同步的带锁连接,以便同步能够进行。被删除的连接上的未提交更改将被回退。

有关详细信息,请参见-d 选项

LockTables 选项

保护数据完整性的一个替代方法是将扩展选项 LockTables 设置为 OFF,这可以防止项目的表被锁定。这会使 dbmlsync 跟踪构建上载后修改过的所有行。当接收下载时,如果下载中有任何行被修改,则不应用该下载。Dbmlsync 随后将重新尝试该同步。如果没有检测到新的下载冲突,重新尝试就会成功。

有关详细信息,请参见LockTables (lt) 扩展选项

如果检测到冲突,将会取消下载阶段并回退下载操作,以避免将新更改覆盖。然后 dbmlsync 实用程序将重新尝试包含上载步骤的同步。这次进行同步尝试时,因为同步过程开始时该行就已存在,所以上载会包含该行,该行也就不会丢失。

缺省情况下,dbmlsync 将一直重新尝试同步,直到成功为止。您可以使用扩展选项 ConflictRetries 来限制重新尝试的次数。将 ConflictRetries 设置为 -1 将使 dbmlsync 一直重新尝试,直到同步成功。将该选项设置为非负整数时,将使 dbmlsync 最多只重新尝试所指定的次数。

有关详细信息,请参见ConflictRetries (cr) 扩展选项