该脚本用于调用用户定义的算法以生成 next_last_download_timestamp。
在下表中,说明部分提供 SQL 数据类型。如果您使用 Java 或 .NET 编写脚本,则应该使用相应的数据类型。 请参见SQL-Java 数据类型和SQL-.NET 数据类型。
在 SQL 脚本中,可以按名称或使用问号指定事件参数。不建议使用问号,建议您使用命名参数。不能在一个脚本中混合使用名称和问号。如果使用问号,则参数必须按照如下所示的顺序并且仅当没有指定任何后继参数时才是可选的(例如,如果您想使用参数 2,则必须使用参数 1)。如果使用命名参数,则可以按照任何顺序指定任意参数子集。
SQL 脚本的参数名称 | 说明 | 顺序(不建议用于 SQL) |
---|---|---|
s.remote_id |
VARCHAR(128)。MobiLink 远程 ID。只有在使用命名参数时才能引用远程 ID。 |
不适用 |
s.next_last_download |
TIMESTAMP。这是一个 INOUT 参数。MobiLink 服务器会通过 last_download_timestamp 初始化此参数,该时间戳用于在当前同步中生成下载流。 |
1 |
s.username |
VARCHAR(128)。MobiLink 用户名。 |
2 |
s.script_version | VARCHAR(128)。可选的 IN 参数,可指定 MobiLink 服务器将用于当前同步的脚本版本字符串传递到此参数。不能使用问号指定此参数。 | 不适用 |
该脚本会在调用 prepare_for_download 脚本前,在 prepare_for_download 事务中被调用。
请谨慎使用此事件,尤其是针对支持快照隔离级别的统一数据库,例如 SQL Anywhere、Oracle、Microsoft SQL Server 和 IBM DB2 LUW 9.7。MobiLink 服务器通过 Oracle 下载时始终使用快照隔离级别。缺省情况下,当数据库上已启用快照隔离级别时,它还会在通过 SQL Anywhere 和 Microsoft SQL Server 下载时使用快照隔离级别。
对于稳健的基于时间戳的同步,next_last_download 的输出必须早于:
当前时间戳
最早打开事务的开始时间戳,它会更新(例如,插入、更新或删除)用于构造下载的任意表或视图。
该脚本也可使用 --{ml_ignore} 子句指定为忽略的脚本。当该脚本被定义为忽略的脚本时,MobiLink 服务器不会调用此脚本且不会使用 MobiLink 内部逻辑来生成下一个上次下载时间戳。相反,MobiLink 服务器会将由当前同步中客户端发送的上次下载时间戳发送回客户端。您可以将此技术用于某些同步,那些同步始终对所有同步表从统一数据库下载所有行的。但是,对于基于时间的同步,您应该使用合适的业务逻辑将此脚本定义为真实脚本以生成下一个上次下载时间戳。或者,如果不为此事件定义任何脚本,MobiLink 服务器会使用其内部逻辑生成下一个上次下载时间戳。
generate_next_last_download_timestamp 脚本可用于在 MobiLink 服务器中生成基于 UTC 时间的下载。以下是为 Oracle 设置基于 UTC 时间下载的步骤:
假定您拥有一个称作 my_table 的同步表,定义如下:
CREATE TABLE my_table ( pk INT PRIMARY KEY NOT NULL, c1 VARCHAR(100) , last_modified TIMESTAMP DEFAULT SYS_EXTRACT_UTC( SYSTIMESTAMP ) ) |
创建一个称作 GenerateNextDownloadTimestamp 的存储过程以便在 Oracle 数据库上获取 UTC 格式的最早打开事务的开始时间:
CREATE PROCEDURE GenerateNextDownloadTimestamp ( p_ts IN OUT TIMESTAMP ) AS BEGIN SELECT SYS_EXTRACT_UTC( NVL( MIN( TO_TIMESTAMP( START_TIME, 'mm/dd/rr hh24:mi:ss' ) ), SYSTIMESTAMP ) ) INTO p_ts FROM GV$TRANSACTION; END; |
调用 ml_add_connect_script 安装脚本:
call ml_add_connection_script( 'my_script_version', 'generate_next_last_download_timestamp', '{ call GenerateNextDownloadTimestamp( {ml s.next_last_download} ) }' ) |
MobiLink 服务器登录 ID 必须对 GV_$TRANSACTION 具有 SELECT 权限。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |