您可以使用此存储过程在为上载而进行事务日志扫描之后添加自定义操作。
名称 |
值 |
说明 |
---|---|---|
ending log offset (in) |
数字 |
扫描结束处的日志偏移值。 |
starting log offset_n (in) |
数字 |
您同步的每个预订的初始进度值。此 n 值对应于 Publication_n 中的值。例如,Starting log offset_1 是 Publication_1 的偏移。 |
log scan retry (in) |
true | false |
如果这是为此同步进行的第一次事务日志扫描,则该值为 false,否则为 true。如果 MobiLink 服务器与 dbmlsync 中关于从何处开始扫描的信息不同,则进行两次日志扫描。 |
publication_n (in) |
发布 |
正被同步的发布,其中 n 是一个整数。每个正在上载的发布都有一个 publication_n 条目。n 的编号从零开始。 |
MobiLink user (in) |
MobiLink 用户名 |
您正在为其进行同步的 MobiLink 用户。 |
script version (in) |
脚本版本名称 |
将用于同步的 MobiLink 脚本版本。 |
如果以该名称命名的过程存在,那么它将在 dbmlsync 扫描过事务日志以汇编上载之后立即被调用。
该过程的操作将在执行后立即被提交。
假定您使用下面的表记录远程数据库上的同步事件。
CREATE TABLE SyncLog ( "event_id" INTEGER NOT NULL DEFAULT AUTOINCREMENT , "event_name" VARCHAR(128) NOT NULL , "ml_user" VARCHAR(128) NULL , "event_time" TIMESTAMP NULL, "table_name" VARCHAR(128) NULL , "upsert_count" VARCHAR(128) NULL , "delete_count" VARCHAR(128) NULL , "exit_code" INTEGER NULL , "status_retval" VARCHAR(128) NULL , "pubs" VARCHAR(128) NULL , "sync_descr " VARCHAR(128) NULL , PRIMARY KEY ("event_id"), ); |
以下示例在为上载扫描过事务日志后立即记录 MobiLink 用户和当前时间戳。#hook_dict 日志扫描重试参数指示是否扫描了多次事务日志。
CREATE PROCEDURE sp_hook_dbmlsync_logscan_end () BEGIN DECLARE scan_retry VARCHAR(128); -- load the scan retry parameter from #hook_dict SELECT #hook_dict.value INTO scan_retry FROM #hook_dict WHERE #hook_dict.name = 'log scan retry'; -- Determine if the log is being rescanned -- and log the synchronization event IF scan_retry='true' THEN INSERT INTO SyncLog (event_name, ml_user,event_time,sync_descr) SELECT 'logscan_end', #hook_dict.value, CURRENT TIMESTAMP, 'Transaction log rescanned' FROM #hook_dict WHERE name = 'MobiLink user' ; ELSE INSERT INTO SyncLog (event_name, ml_user,event_time,sync_descr) SELECT 'logscan_end', #hook_dict.value, CURRENT TIMESTAMP, 'Transaction log scanned normally' FROM #hook_dict WHERE name = 'MobiLink user' ; END IF; END; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |