Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » MobiLink - 客户端管理 » 用于 MobiLink 的 SQL Anywhere 客户端 » SQL Anywhere 客户端的事件挂接

 

sp_hook_dbmlsync_logscan_end

您可以使用此存储过程在为上载而进行事务日志扫描之后添加自定义操作。

#hook_dict 表中各行

名称

说明

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;