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_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。Mobile Link サーバと dbmlsync でスキャン開始位置の情報が異なっている場合、ログは 2 回スキャンされます。

publication_n (in)

パブリケーション名

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

MobiLink user (in)

Mobile Link ユーザ名

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

script version (in)

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

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

備考

この名前のプロシージャが存在する場合、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"),
);

次に、アップロードのためにトランザクション・ログがスキャンされた直後に Mobile Link ユーザと現在のタイムスタンプのログを取る例を示します。#hook_dict の log scan retry パラメータは、トランザクション・ログが複数回スキャンされるかどうかを示します。

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;