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

SQL Anywhere 11.0.1 (中文) » SQL Remote » SQL Remote 复制设计 » SQL Remote 复制设计和设置 » 更新冲突

 

使用 VERIFY 子句的自定义冲突解决方法

SQL Remote 会在消息中生成使用 VERIFY 子句的 UPDATE 语句。UPDATE 语句将一行或多行从现有值更改为新值。包括 VERIFY 子句的 UPDATE 语句还包含行的现有值。

在应用 UPDATE 语句时,统一数据库会将行的现有值与远程数据库对行的现有值所期望变成的值进行比较。当 VERIFY 子句的值和数据库中的行不匹配时,数据库服务器会检测到更新冲突。

例如,下列事件发生时将出现更新冲突:

  1. 用户 1 在远程站点 1 更新行。

  2. 用户 2 在远程站点 2 更新相同的行。

  3. 来自用户 1 的更新被发送和应用到统一数据库。

  4. 来自用户 2 的更新被发送到统一数据库。

    因为 UPDATE 语句包含 VERIFY 子句,所以统一数据库可检测到冲突。在统一数据库上,SQL Remote 会将它的行值与用户 2 发送的旧行值进行比较。当这些值不相同时,会存在更新冲突。

    在检测到更新冲突时,统一数据库会执行以下任务:

    1. 触发为该操作定义的任何冲突解决触发器。

      可定义冲突解决触发器以处理更新冲突。当远程用户应用消息时,冲突解决触发器只在统一数据库中触发。请参见使用触发器的自定义冲突解决方法

    2. 执行 UPDATE 语句。

    3. 将冲突解决触发器的所有操作以及 UPDATE 语句发送到所有远程数据库,其中包括触发该冲突的消息的发送方。

      通常,SQL Remote 不复制触发器的操作,并假定触发器存在于远程数据库上。冲突解决触发器只在统一数据库上触发,因此,这些触发器的操作会被复制到远程数据库。

  5. 远程数据库从统一数据库接收 UPDATE 语句。

    在远程数据库上,当来自统一数据库的消息包含更新冲突时,不会触发 RESOLVE UPDATE 触发器。

  6. 在远程数据库上处理 UPDATE 语句。

    在此过程的末尾,数据在整个系统中达到一致。


包含 VERIFY 子句的 UPDATE 语句
使用 VERIFY_ALL_COLUMNS 选项