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

SQL Anywhere 11.0.1 (日本語) » Mobile Link - クライアント管理 » Mobile Link 用 SQL Anywhere クライアント » SQL Anywhere クライアントのイベント・フック

 

sp_hook_dbmlsync_ml_connect_failed

このストアド・プロシージャを使用して、Mobile Link サーバに対する接続が失敗した場合に異なる通信タイプまたはアドレスを使用してリトライします。

#hook_dict テーブルのロー

名前

説明

publication_n (in)

パブリケーション名

同期されているパブリケーション (n は整数)。アップロードされるパブリケーションごとに 1 つの publication_n エントリがあります。n の番号は 0 から始まります。

MobiLink user (in)

Mobile Link ユーザ名

同期対象となる Mobile Link ユーザ。

script version (in)

スクリプト・バージョン名

同期に使用される Mobile Link スクリプト・バージョン。

connection address (in|out) 接続アドレス フックが呼び出されるとき、これは失敗した直前の通信の試行で使用されたアドレスです。この値を新しい接続アドレスに設定して通信を試行できます。retry を true に設定すると、次の通信の試行でこの値が使用されます。プロトコル・オプションのリストについては、Mobile Link クライアント・ネットワーク・プロトコル・オプションの一覧を参照してください。
connection type (in|out) ネットワーク・プロトコル フックが呼び出されるとき、これは失敗した直前の通信の試行で使用されたネットワーク・プロトコル (TCPIP など) です。この値を新しいネットワーク・プロトコルに設定して通信を試行できます。retry を true に設定すると、次の通信の試行でこの値が使用されます。ネットワーク・プロトコルのリストについては、CommunicationType (ctp) 拡張オプションを参照してください。
user data (in|out) ユーザ定義のデータ 次の通信の試行が失敗した場合に使用されるステータス情報。たとえば、発生したリトライの回数を保存すると便利です。デフォルトは、空の文字列です。
allow remote ahead (in|out) true | false dbmlsync を -ra オプションで起動した場合だけ true です。このローは、現在の同期のために -ra オプションの読み込みまたは変更を行う場合だけ使用できます。-r オプションを参照してください。
allow remote behind (in|out) true | false dbmlsync を -rb オプションを指定して起動した場合だけ true です。このローは、現在の同期のために -rb オプションの読み込みまたは変更を行う場合だけ使用できます。-r オプションを参照してください。
retry (in|out) true | false 失敗した接続の試行をリトライする場合にこの値を true に設定します。デフォルト値は false です。
備考

この名前のプロシージャが存在する場合、Mobile Link サーバへの接続で dbmlsync が失敗したときにそのプロシージャが呼び出されます。

このフックが適用されるのは、データベースへの接続の試行ではなく、Mobile Link サーバへの接続の試行に対してだけです。

進行オフセット不一致が発生した場合、dbmlsync は Mobile Link サーバから切断してから再接続します。この種の再接続では、このフックが呼び出されず、再接続が失敗すると同期も失敗します。

このプロシージャのアクションは、実行直後にコミットされます。

この例は、sp_hook_dbmlsync_ml_connect_failed フックを使用して最大 5 回まで接続をリトライします。

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;