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_upload_end

可以使用此存储过程在 dbmlsync 已验证 MobiLink 服务器收到上载后添加自定义操作。

#hook_dict 表中各行

名称

说明

failure cause (in)

请参见下面的注释部分中的值范围。

导致上载失败的原因。有关详细信息,请参见说明。

upload status (in)

retry | committed | failed | unknown

指定在 dbmlsync 试图验证是否接收到上载时 MobiLink 服务器所返回的状态。

retry - MobiLink 服务器与 dbmlsync 中的上载开始位置的日志偏移值不同。MobiLink 服务器未提交上载。dbmlsync 实用程序会尝试发送从新的日志偏移处开始的另一个上载。

committed - MobiLink 服务器已接收到上载并已提交。

failed - MobiLink 服务器未提交上载。

unknown - 启动 dbmlsync 时使用了 -tu 选项,从而引发了事务级上载。对于每个上载的事务,都调用了 sp_hook_dbmlsync_upload_begin 和 sp_hook_dbmlsync_upload_end 挂接,且 upload status 的值为 unknown - 除最后一次外,每次都如此。

publication_n (in)

发布

正被同步的发布,其中 n 是一个整数。每个正在上载的发布都有一个 publication_n 条目。n 的编号从零开始。

MobiLink user (in)

MobiLink 用户名

您正在为其进行同步的 MobiLink 用户。

script version (in)

脚本版本名称

将用于同步的 MobiLink 脚本版本。

authentication value (in)

此值由服务器上的 authenticate_user、authenticate_user_hashed 或 authenticate_parameters 脚本生成。当 upload status 为 unknown,或者由于远程数据库和统一数据库中存储的日志偏移之间存在冲突而重发上载之后调用 upload_end 挂接时,此值为空字符串。

注释

如果以该名称命名的过程存在,那么它将在 dbmlsync 已发送上载并收到来自 MobiLink 服务器的确认后立即被调用。

该过程的操作将在执行后立即被提交。

#hook_dict 表中 failure cause 行参数的可选值为:

  • UPLD_ERR_ABORTED_UPLOAD   上载由于在远程数据库上发生的错误而失败。失败的原因通常包括通信错误和内存不足情况。

  • UPLD_ERR_COMMUNICATIONS_FAILURE   发生通信错误。

  • UPLD_ERR_LOG_OFFSET_MISMATCH   由于远程数据库与统一数据库中存储的日志偏移发生冲突导致上载失败。

  • UPLD_ERR_GENERAL_FAILURE   未知原因导致上载失败。

  • UPLD_ERR_INVALID_USERID_OR_PASSWORD   用户 ID 或口令错误。

  • UPLD_ERR_USERID_OR_PASSWORD_EXPIRED   用户 ID 或口令失效。

  • UPLD_ERR_USERID_ALREADY_IN_USE   用户 ID 已经在使用中。

  • UPLD_ERR_DOWNLOAD_NOT_AVAILABLE   上载已经提交到统一数据库,但出现错误导致 MobiLink 无法生成下载。

  • UPLD_ERR_PROTOCOL_MISMATCH   dbmlsync 从 MobiLink 服务器收到意外数据。

  • UPLD_ERR_SQLCODE_n   其中,n 是整数。统一数据库中发生 SQL 错误。指定的整数是遇到的错误的 SQLCODE。

另请参见
示例

假定您使用下面的表记录远程数据库上的同步事件。

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"),
);

以下示例在 dbmlsync 验证 MobiLink 服务器已收到上载之后记录 MobiLink 用户和当前时间戳。

CREATE PROCEDURE sp_hook_dbmlsync_upload_end ()
BEGIN
 
 DECLARE status_return_value VARCHAR(255);

 -- store status_return_value
  SELECT #hook_dict.value
  INTO status_return_value
  FROM #hook_dict
  WHERE #hook_dict.name = 'upload status';

   INSERT INTO SyncLog (event_name, ml_user,
     status_retval, event_time)
   SELECT 'upload_end', #hook_dict.value,
     status_return_value, CURRENT TIMESTAMP
  FROM #hook_dict
  WHERE name = 'MobiLink user';
END;