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 事件 » 同步事件

 

MobiLink 事件概述

当有同步请求发出且 MobiLink 服务器确定必须建立新连接时,将触发 begin_connection 事件并启动同步。

MobiLink 事件模型的流程图,它显示 begin_connection 事件、执行同步所调用的预定义过程和 end_connection 事件。

随着同步的进行,连接被放入连接池中,MobiLink 再次等待同步请求。在一个连接被最终从连接池中删除之前,将触发 end_connection 事件。但是如果接收到另一个对同一脚本版本的同步请求,MobiLink 将在同一连接上处理下一个同步请求。有几个事件会对当前同步产生影响。

事务

在每个同步中,可能发生以下事务。每个事务都是可选的。

  • 验证

  • 开始同步

  • 上载

    可以使用 dbmlsync -tu 选项指定多个上载事务。

  • 准备下载

  • 下载

  • 结束同步

  • 非阻塞下载确认

此外,还可以有两个连接事务。一个开始连接事务,建立连接后即发生;以及一个结束连接事务,关闭连接时发生。

同步的主要阶段是上载和下载事务。上载和下载事务中包含的事件将在下面介绍。

上载事务

上载事务应用从远程数据库上载的更改。

begin_upload 事件标志着上载事务的开始。上载事务是一个由两个部分组成的过程。首先,上载所有远程表中的插入和更新操作,然后上载所有远程表中的删除操作。

MobiLink 上载事务过程的流程图。

end_upload 事件标志着上载事务的结束。

请参见编写用于上载行的脚本

下载事务

下载事务从统一数据库中读取行。它开始于 begin_download 事件。

下载事务是一个由两个部分组成的过程。对于每个表,首先下载删除操作,然后下载更新/插入行 (upsert)。end_download 事件结束下载事务。

MobiLink 下载事务过程的流程图。

请参见编写用于下载行的脚本

非阻塞下载确认事务

非阻塞下载确认事务仅在 MobiLink 处于非阻塞下载确认模式且收到下载确认时执行。此事务具有两个目的。脚本 publication_nonblocking_download_ack 和 nonblocking_download_ack 都在此事务中运行;它们有助于下载状态跟踪。其次,MobiLink 系统表中的下载时间戳在此事务期间更新。

请注意,此事务不是在与目标同步的其它事件相同的数据库连接上执行的。这意味着在此事务中没有连接级变量可以引用。

伪代码事件概述

以下伪代码概述了调用各种事件以及调用同名脚本的序列。此 MobiLink 事件模型的表示形式假定存在一个没有出现错误的完整同步(而不是仅上载同步或仅下载同步)。

注意
  • 在大多数情况下,如果没有为给定事件定义脚本,则缺省操作是不执行任何操作。

  • begin_connection 和 end_connection 事件是连接解别的事件。它们独立于任何一个同步并且没有参数。

  • 对于正在执行同步的每一个表,有些事件将在每个同步过程中被调用一次。与此类事件相关联的脚本被称为表级别脚本

    尽管每个表都可以拥有自己的表脚本,但您也可以编写供多个表共享的表级别的脚本。

  • 有些事件,如 begin_synchronization,在连接级别和表级别都会发生。您可以为这些事件提供连接级别和表级别的脚本。

  • COMMIT 语句说明了如何将同步过程分解为不同的事务。

  • 数据库错误可能会在同步过程中的任何时刻发生。可使用 handle_error 或 handle_odbc_error 脚本处理数据库错误。

小心

在 SQL 同步脚本中或从 SQL 同步脚本调用的过程或触发器中,不应有任何隐式或显式的提交或回退。SQL 脚本内的 COMMIT 或 ROLLBACK 语句会改变同步步骤的事务性质。如果您使用这两个语句,则在出现故障时 MobiLink 将无法保证数据的完整性。


完整的 MobiLink 事件模型
上载过程中的事件
下载过程中的事件