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_ml_connect_failed

使用此存储过程可以使用不同的通信类型或地址重试对 MobiLink 服务器失败的连接。

#hook_dict 表中各行

名称

说明

publication_n (in)

发布

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

MobiLink user (in)

MobiLink 用户名

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

script version (in)

脚本版本名称

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

connection address (in|out) 连接地址 调用挂接时,这是在最近失败的通信尝试中使用的地址。可以将该值设置为要尝试的新的连接地址。如果将重试设置为 true,则该值将用于下一次通信尝试。有关协议选项的列表,请参见MobiLink 客户端网络协议选项汇总
connection type (in|out) 网络协议 调用挂接时,这是在最近失败的通信尝试中使用的网络协议(如 TCPIP)。可以将此值设置为要尝试的新的网络协议。如果将重试设置为 true,则该值将用于下一次通信尝试。有关网络协议的列表,请参见CommunicationType (ctp) 扩展选项
user data (in|out) 用户定义的数据 下次连接尝试失败时将使用的状态信息。例如,您可能会发现存储已重试次数很有用。缺省值为空字符串。
allow remote ahead (in|out) true | false 仅当使用 -ra 选项启动了 dbmlsync 时为 true。该行只能用于读取或更改当前同步的 -ra 选项。请参见-r 选项
allow remote behind (in|out) true | false 仅当使用 -rb 选项启动了 dbmlsync 时为 true。该行只能用于读取或更改当前同步的 -rb 选项。请参见-r 选项
retry (in|out) true | false 如果要重试失败的连接尝试,请将该值设置为 true。缺省值为 FALSE。
注释

如果以该名称命名的过程存在,那么它将在 dbmlsync 未能连接到 MobiLink 服务器时被调用。

此挂接只适用于对 MobiLink 服务器(而非数据库)的连接尝试。

当出现进度偏移不匹配时,dbmlsync 会断开与 MobiLink 服务器的连接,稍后重新连接。在这种重新连接中,不调用此挂接,重新连接失败导致同步失败。

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

示例

此示例最多可五次使用 sp_hook_dbmlsync_ml_connect_failed 挂接重试连接。

CREATE PROCEDURE sp_hook_dbmlsync_ml_connect_failed ()
BEGIN
    DECLARE idx integer;
      
    SELECT value
      INTO buf
      FROM #hook_dict
      WHERE name = 'user data';
       
  IF idx <= 5 THEN
        UPDATE #hook_dict 
        SET value = idx 
        WHERE name = 'user data'; 
       
        UPDATE #hook_dict 
        SET value = 'TRUE'
        WHERE name = 'retry'; 
  END IF;
END;

下一示例使用一个包含连接信息的表。当尝试连接失败时,挂接会尝试列表中的下一个服务器。

CREATE TABLE conn_list (
    label   INTEGER PRIMARY KEY,
    addr  VARCHAR( 128 ),
    type  VARCHAR( 64 )
);
INSERT INTO conn_list
 VALUES ( 1, 'host=server1;port=91', 'tcpip' );
INSERT INTO conn_list
 VALUES ( 2, 'host=server2;port=92', 'http' );
INSERT INTO conn_list
 VALUES ( 3, 'host=server3;port=93', 'tcpip' );
COMMIT;

CREATE PROCEDURE sp_hook_dbmlsync_ml_connect_failed ()
BEGIN
 DECLARE idx INTEGER;
 DECLARE cnt INTEGER;

 SELECT value
  INTO idx
  FROM #hook_dict
  WHERE name = 'user data';
   
 SELECT COUNT( label ) INTO cnt FROM conn_list;
        
 IF idx <= cnt THEN
   UPDATE #hook_dict 
       SET value = ( SELECT addr FROM conn_list WHERE label = idx )
       WHERE name = 'connection address'; 
            UPDATE #hook_dict 
    SET value = (SELECT type FROM conn_list WHERE label=idx)
    WHERE name = 'connection type'; 
      
   UPDATE #hook_dict 
    SET value = idx
        WHERE name = 'user data'; 
       
       UPDATE #hook_dict 
        SET value = 'TRUE'
        WHERE name = 'retry';
 END IF;
END;