您可以使用此存储过程控制同步发生的时间。
名称 | 值 | 说明 |
---|---|---|
delay duration (in|out) |
秒数 |
如果该过程将 delay duration 的值设置为零,则 dbmlsync 同步将立即继续。非零的 delay duration 值指定再次调用延迟挂接前的秒数。 |
maximum accumulated delay (in|out) |
秒数 |
最大积累延迟指定每次同步前的最大秒数。Dbmlsync 跟踪从上一次同步以来所有延迟挂接调用产生的总延迟。如果从 dbmlsync 开始运行以来没有同步发生,则总延迟从 dbmlsync 开始的时刻起计算。总延迟超过最大积累延迟的值时,将开始执行同步而不调用延迟挂接。 |
publication_n (in) |
发布 |
不建议使用。改用 subscription_n。正被同步的发布,其中 n 是一个整数。每个正在同步的发布都有一个 publication_n 条目。n 的编号从零开始。 |
MobiLink user ( in ) |
MobiLink 用户名 |
您正在为其进行同步的 MobiLink 用户。 |
script version (in) |
脚本版本名称 |
将用于同步的 MobiLink 脚本版本。 |
subscription_n (in) | 预订名称 | 正在进行同步的预订的名称,其中 n 是一个整数。每个正在同步的预订都有一个 subscription_n 条目。n 的编号从零开始。 |
如果存在以该名称命名的过程,则会在同步过程开始时在 sp_hook_dbmlsync_begin 之前调用该过程。
当使用 Dbmlsync API 或 SQL SYNCHRONIZE 语句启动同步时,将不调用此挂接。
该过程的操作将在执行后立即被提交。
假定您使用下面的表记录远程数据库中的优先次序。
CREATE TABLE OrdersTable( "id" INTEGER PRIMARY KEY DEFAULT AUTOINCREMENT, "priority" VARCHAR(128) ); |
以下示例对同步进行最大积累延迟时间为 1 小时的延迟。每 10 秒钟再次调用挂接并查找 OrdersTable 中高优先级的行。如果存在高优先级的行,则将延迟持续时间设置为 0 以开始同步过程。
CREATE PROCEDURE sp_hook_dbmlsync_delay() BEGIN -- Set the maximum delay between synchronizations -- or before the first synchronization starts to 1 hour UPDATE #hook_dict SET value = '3600' // 3600 seconds WHERE name = 'maximum accumulated delay'; -- check if a high priority order exists in OrdersTable IF EXISTS (SELECT * FROM OrdersTable where priority='high') THEN -- start the synchronization to process the high priority row UPDATE #hook_dict SET value = '0' WHERE name='delay duration'; ELSE -- set the delay duration to call this procedure again -- following a 10 second delay UPDATE #hook_dict SET value = '10' WHERE name='delay duration'; END IF; END; |
在 sp_hook_dbmlsync_end 挂接中,可以将高优先级的行标记为已处理:
CREATE PROCEDURE sp_hook_dbmlsync_upload_end() BEGIN IF EXISTS( SELECT value FROM #hook_dict WHERE name = 'Upload status' AND value = 'committed' ) THEN UPDATE OrderTable SET priority = 'high-processed' WHERE priority = 'high'; END IF; END; |
此示例假定您已经使用 LockTables 扩展选项来确保在同步过程中将表锁定。如果未将表锁定,则可能会在建立上载之后与执行 sp_hook_dbmlsync_end 挂接之前的这段时间内插入高优先级的行。如果发生此类情况,则行的优先级将被更改为 "高优先级处理",即使从未曾上载该行。
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |