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_communication_error

您可以使用此存储过程处理通信错误。

#hook_dict 表中各行

名称

说明

publication_n (in)

发布

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

MobiLink user (in)

MobiLink 用户名

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

script version (in)

脚本版本名称

用于同步的 MobiLink 脚本版本。

error message (in) 错误消息文本 这与在 dbmlsync 日志中显示的文本相同。
error id (in) 数字 唯一标识消息的 ID。使用此行来标识错误消息,因为错误消息文本可能发生变化。
error hook user state (in|out) 整数

此值可由挂接设置,以便将状态信息传递到对 sp_hook_dbmlsync_all_error、sp_hook_dbmlsync_communication_error、sp_hook_dbmlsync_misc_error、sp_hook_dbmlsync_sql_error 或 sp_hook_dbmlsync_end 挂接的未来调用。第一次调用这些挂接的其中之一时,该行的值为 0。如果挂接更改了行值,则将在下一个挂接调用中使用新值。

使用此挂接将状态信息传递给 sp_hook_dbmlsync_end 挂接时,可以导致此 _end 挂接执行某些操作(如重试同步)。

stream error code (in) 整数 流报告的错误。
system error code (in) 整数 系统特定的错误代码。
注释

如果在启动过程中还没有初始化同步的时候发生了错误,用于 Mobilink 用户和脚本版本的 #hook_dict 条目将被设置为一个空字符串,并且在 #hook_dict 表中不设置 publication_n 行。

当在 dbmlsync 和 MobiLink 服务器间发生通信错误时,使用此挂接可以访问特定流的错误信息。

stream error code 参数是一个整数,用于指示通信错误的类型。

有关可能存在的错误代码值的列表,请参见MobiLink 通信错误消息

此过程将在单独的连接上执行以确保它执行的操作不会在同步连接执行回退时丢失。如果 dbmlsync 无法建立单独的连接,则不调用该过程。

缺省情况下,在 Windows Mobile 设备上,同步表以独占模式被锁定,这意味着如果此挂接需要访问任何同步表,它就不能成功执行。如果它需要访问同步表而您将 dbmlsync 扩展选项 LockTables 设置为 EXCLUSIVE,则它也无法执行。请参见LockTables (lt) 扩展选项

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

另请参见
示例

假定您使用下表记录远程数据库中的通信错误。

CREATE TABLE communication_error_log
(
  error_msg VARCHAR(10240),
  error_code VARCHAR(128)  
);

以下示例设置 sp_hook_dbmlsync_communication_error 以记录通信错误。

CREATE PROCEDURE sp_hook_dbmlsync_communication_error()
BEGIN
 DECLARE msg VARCHAR(255);
 DECLARE code INTEGER;

 // get the error message text
 SELECT value INTO msg
  FROM #hook_dict
  WHERE name ='error message';

 // get the error code
 SELECT value INTO code
  FROM #hook_dict
  WHERE name = 'stream error code';

 // log the error information
 INSERT INTO communication_error_log(error_code,error_msg)
  VALUES (code,msg);
END