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_upload_end

Mobile Link サーバによってアップロードが受信されたことを dbmlsync で確認した後に、このストアド・プロシージャを使用してカスタム・アクションを追加します。

#hook_dict テーブルのロー

名前

説明

failure cause (in)

下の「備考」の値の範囲を参照

アップロード障害の原因。詳細については、下の「説明」を参照してください。

upload status (in)

retry | committed | failed | unknown

dbmlsync がアップロードの受信確認を行おうとしたときに、Mobile Link サーバから返されるステータスを指定します。

retry - アップロードの開始位置であるログ・オフセットの値が、Mobile Link サーバと dbmlsync で異なっていました。Mobile Link サーバは、アップロードをコミットしませんでした。dbmlsync ユーティリティは、新しいログ・オフセットから始まる別のアップロードを送信しようとします。

committed - Mobile Link サーバがアップロードを受信し、コミットしました。

failed - Mobile Link サーバは、アップロードをコミットしませんでした。

unknown - dbmlsync が -tu オプションを使用して起動され、トランザクション・レベルのアップロードが発生しました。アップロードされる各トランザクションでは、sp_hook_dbmlsync_upload_begin フックと sp_hook_dbmlsync_upload_end フックが呼び出され、upload status の値は、最後のものを除き、常に unknown です。

publication_n (in)

パブリケーション名

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

MobiLink user (in)

Mobile Link ユーザ名

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

script version (in)

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

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

authentication value (in)

この値は、サーバ上の authenticate_user スクリプト、authenticate_user_hashed スクリプト、または authenticate_parameters スクリプトによって生成されます。upload status が unknown であるとき、またはリモート・データベースと統合データベースに格納されているログ・オフセット間の競合が原因でアップロードが再送信された後に upload_end フックが呼び出されたとき、値は空の文字列になります。

備考

この名前のプロシージャが存在する場合、dbmlsync がアップロードを送信し、Mobile Link サーバから受信確認を受け取った直後に呼び出されます。

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

#hook_dict テーブルの failure cause ローに有効なパラメータ値の範囲は、次のとおりです。

  • UPLD_ERR_ABORTED_UPLOAD   リモートでエラーが発生したため、アップロードに失敗しました。この失敗の一般的な原因には、通信エラーとメモリ不足が挙げられます。

  • UPLD_ERR_COMMUNICATIONS_FAILURE   通信エラーが発生しました。

  • UPLD_ERR_LOG_OFFSET_MISMATCH   リモート・データベースと統合データベースに格納されているログ・オフセット間に競合があるため、アップロードに失敗しました。

  • UPLD_ERR_GENERAL_FAILURE   アップロードに失敗しました。原因は不明です。

  • UPLD_ERR_INVALID_USERID_OR_PASSWORD   ユーザ ID またはパスワードが正しくありません。

  • UPLD_ERR_USERID_OR_PASSWORD_EXPIRED   ユーザ ID またはパスワードの有効期限が切れています。

  • UPLD_ERR_USERID_ALREADY_IN_USE   このユーザ ID はすでに使用されています。

  • UPLD_ERR_DOWNLOAD_NOT_AVAILABLE   統合データベース側でアップロードがコミットされましたが、Mobile Link はダウンロードを生成できなかったため、エラーが発生しました。

  • UPLD_ERR_PROTOCOL_MISMATCH   dbmlsync が Mobile Link サーバから予期しないデータを受信しました。

  • UPLD_ERR_SQLCODE_n   この n は整数です。統合データベースに SQL エラーが発生しました。指定された整数は、発生したエラーを表す SQLCODE です。

参照

次のテーブルを使用して、リモート・データベース上の同期イベントのログを取るとします。

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 サーバがアップロードを受信したかを dbmlsync が検証した後で Mobile Link ユーザと現在のタイムスタンプのログを取る例を示します。

CREATE PROCEDURE sp_hook_dbmlsync_upload_end ()
BEGIN
 
 DECLARE status_return_value VARCHAR(255);

 -- store status_return_value
  SELECT #hook_dict.value
  INTO status_return_value
  FROM #hook_dict
  WHERE #hook_dict.name = 'upload status';

   INSERT INTO SyncLog (event_name, ml_user,
     status_retval, event_time)
   SELECT 'upload_end', #hook_dict.value,
     status_return_value, CURRENT TIMESTAMP
  FROM #hook_dict
  WHERE name = 'MobiLink user';
END;