时间戳方法是可以进行高效的同步的最实用的通用技术。此项技术涉及跟踪每个用户上次进行同步的时间,并使用此信息控制下载到每个远程数据库的行。
MobiLink 保留了一个用以说明每个 MobiLink 用户上一次下载数据的时间戳值。该值被称为上次下载的时间戳。上次下载的时间戳将作为一个参数被提供给许多事件,该时间戳还可以在同步脚本中使用。
如果您正在使用 Adaptive Server Anywhere 统一数据库,而且保存上次修改信息的列的类型为 DEFAULT TIMESTAMP,则不应同步该列。如果您的远程数据库需要这样的列,应使用不同的列名。否则,时间戳的缺省值可能被上载值覆盖,并不会包含上次在统一数据库中修改该行的时间。
实现表的基于时间戳的同步:
在统一数据库中,添加一列以保存行的最近修改时间。通常可以按照如下方式声明该列:
| DBMS | 最近修改的列 |
|---|---|
| Adaptive Server Anywhere |
timestamp DEFAULT timestamp
|
| Adaptive Server Enterprise |
datetime
|
| Microsoft SQL Server |
datetime
|
| Oracle |
date
|
| IBM DB2 |
timestamp
|
在 download_cursor 和 download_delete_cursor 事件的脚本中,将第一个参数与时间戳列中的值进行比较。
如下表声明及脚本将实现 Contact 示例中 Customer 表的基于时间戳的同步:
表定义:
CREATE TABLE "DBA"."Customer"(
"cust_id" integer NOT NULL
DEFAULT GLOBAL AUTOINCREMENT,
"name" char(40) NOT NULL,
"rep_id" integer NOT NULL,
"last_modified" timestamp NULL DEFAULT timestamp,
"active" bit NOT NULL,
PRIMARY KEY ("cust_id") )download_delete_cursor 脚本:
SELECT cust_id
FROM Customer JOIN SalesRep
ON Customer.rep_id = SalesRep.rep_id
WHERE Customer.last_modified >= ?
AND ( SalesRep.ml_username != ?
OR Customer.active = 0 )download_cursor 脚本:
SELECT cust_id, Customer.name, Customer.rep_id FROM Customer KEY JOIN SalesRep WHERE Customer.last_modified >= ? AND SalesRep.ml_username = ? AND Customer.active = 1
有关详细信息,请参见同步逻辑源代码和同步 Contact 示例中的联系人。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。