有两个脚本可用来在下载事务的过程中处理每个表。它们是 download_cursor 脚本(执行插入和更新)和 download_delete_cursor 脚本(执行删除)。
这些脚本可以是 SELECT 语句,也可以是对返回结果集的过程的调用。MobiLink 服务器会将该脚本的结果集下载到远程数据库。MobiLink 客户端自动基于 download_cursor 脚本结果集插入或更新行,基于 download_delete_cursor 事件删除行。
有关使用存储过程的详细信息,请参见从存储过程调用中下载结果集。
MobiLink 服务器在单个事务中下载数据。有关下载过程的说明,请参见下载过程中的事件。
与上载类似,下载与连接事件一同开始和结束。其它事件是表级别的事件。
如果将 SendDownloadAck 设置更改为 ON,则服务器行为取决于所使用的下载确认模式。对于阻塞下载确认,如果没有从客户端获得下载确认,则整个下载事务将在统一数据库中回退。对于非阻塞下载确认,下载事务将提交但不执行下载时间戳更新和确认脚本,直到接受确认。
缺省情况下,SendDownloadAck 设为 OFF。
请参见SendDownloadACK (sa) 扩展选项、发送下载确认同步参数、-nba 选项、nonblocking_download_ack 连接事件和publication_nonblocking_download_ack 连接事件。
每个远程表的 begin_download 和 end_download 脚本所采用的逻辑独立于所更新的各行。
对于基于时间戳的下载,需指定 last_download_timestamp 参数以确保仅下载自上次同步以来所做的更改。例如,download_cursor 或 download_delete_cursor SQL 脚本可能包括如下行:
WHERE Customer.last_modified >= {ml s.last_table_download} |
请参见在脚本中使用上次下载时间。
下载不区分插入操作与更新操作。与 download_cursor 事件关联的脚本是一个 SELECT 语句,该语句定义要下载的行。客户端将检测行是否存在,然后执行适当的插入或更新操作。
下载过程结束时,客户端根据需要自动删除行,以避免破坏参照完整性。
不要同步先前部署创建的影子表(例如,不应同步以 _mod 或 _del 结尾的表)。这些表仅供统一数据库用于跟踪修改或删除的行。
请参见参照完整性与同步。
编写 download_cursor 脚本
编写 download_delete_cursor 脚本
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |