分区由同步中涉及的每个表的 download_cursor 和 download_delete_cursor 脚本控制。这些脚本采用两个参数:上次下载时间戳和同步调用中提供的 MobiLink 用户名。
在表定义中应包括一个包含统一数据库中的同步用户名的列。您不必将此列下载到远程数据库。
在 download_cursor 和 download_delete_cursor 脚本的 WHERE 子句中包括一个条件,要求此列与脚本参数相匹配。
脚本参数在脚本中可使用问号或命名参数来表示。例如,下面的 download_cursor 脚本根据雇员 ID 对 Contact 表进行分区。
SELECT id, contact_name FROM Contact WHERE last_modified >= {ml s.last_table_download} AND emp_id = {ml s.username} |
CustDB 示例应用程序中的主键池表用于为每个远程数据库提供各自的主键值集。此技术可用于避免出现重复的主键,在使用主键池中有对此技术的详细论述。
使用此方法的一个必要条件是,必须以无交集方式在远程数据库之间对主键池表进行分区。
一个键池表是 ULCustomerIDPool,此表包含每个用户在添加客户时可以使用的主键值。此表包含三列:
pool_cust_id 在 ULCustomer 表中使用的主键值。此列是唯一下载到远程数据库中的列。
pool_emp_id 拥有此主键的员工。
last_modified 此表是使用时间戳技术并基于 last_modified 列来进行维护的。
有关时间戳同步的信息,请参见基于时间戳的下载。
此表的 download_cursor 脚本如下所示。
SELECT pool_cust_id FROM ULCustomerIDPool WHERE last_modified >= {ml s.last_table_download} AND pool_emp_id = {ml s.username} |
如果不使用变量或指定参数,则可以使用包含 ? 占位符的连接或子选择。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |