このストアド・プロシージャを使用して、アップロード用にトランザクション・ログがスキャンされた直後にカスタム・アクションを追加します。
名前 |
値 |
説明 |
---|---|---|
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; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |