このストアド・プロシージャは、通信エラーを処理する場合に使用します。
名前 |
値 |
説明 |
---|---|---|
publication_n (in) |
パブリケーション名 |
同期されているパブリケーション (n は整数)。アップロードされるパブリケーションごとに 1 つの publication_n エントリがあります。n の番号は 0 から始まります。 |
MobiLink user (in) |
Mobile Link ユーザ名 |
同期対象となる Mobile Link ユーザ。 |
script version (in) |
スクリプト・バージョン名 |
同期に使用される Mobile Link スクリプト・バージョン。 |
error message (in) | エラー・メッセージ・テキスト | これは、dbmlsync ログに表示されるテキストと同じです。 |
error id (in) | 数値 | メッセージをユニークに識別する ID。このローを使用すると、エラー・メッセージ・テキストが変更されたときに、エラー・メッセージを識別できます。 |
error hook user state (in|out) | 整数 |
この値はフックによって設定して、今後の呼び出しに対するステータス情報を、sp_hook_dbmlsync_all_error、sp_hook_dbmlsync_communication_error、sp_hook_dbmlsync_misc_error、sp_hook_dbmlsync_sql_error、または sp_hook_dbmlsync_end フックに渡すことができます。これらのフックの 1 つが最初に呼び出されるとき、ローの値は 0 です。フックがローの値を変更した場合は、次回のフックの呼び出しには新しい値が使用されます。 このフックを使用して、sp_hook_dbmlsync_end フックにステータス情報を渡す場合は、_end フックにより同期のリトライなどのアクションを実行することができます。 |
stream error code (in) | 整数 | ストリームによってレポートされるエラー。 |
system error code (in) | 整数 | システム固有のエラー・コード。 |
同期を開始する前の起動中にエラーが発生した場合、#hook_dict 内の Mobile Link ユーザとスクリプト・バージョンのエントリは空の文字列に設定され、#hook_dict テーブルで設定される publication_n ローはありません。
dbmlsync と Mobile Link サーバ間で通信エラーが発生した場合、このフックを使用すると、ストリーム固有のエラー情報にアクセスすることができます。
stream error code パラメータは、通信エラーのタイプを示す整数です。
エラー・コード値のリストについては、Mobile Link 通信エラー・メッセージを参照してください。
このプロシージャは別個の接続で実行されるため、同期接続でロールバックが実行されても、このプロシージャで実行する操作が失われることはありません。dbmlsync が別個の接続を確立できないと、プロシージャは呼び出されません。
Windows Mobile デバイスのデフォルトでは、同期テーブルは排他モードでロックされます。このため、同期テーブルへのアクセスが必要な場合、このフックは正常に実行されません。また、このフックは、同期テーブルへのアクセスが必要で、ユーザが dbmlsync 拡張オプション LockTables を EXCLUSIVE に設定している場合にも実行できません。LockTables (lt) 拡張オプションを参照してください。
このプロシージャのアクションは、実行直後にコミットされます。
次のテーブルを使用して、リモート・データベース内の通信エラーのログを取るとします。
CREATE TABLE communication_error_log ( error_msg VARCHAR(10240), error_code VARCHAR(128) ); |
次の例では、sp_hook_dbmlsync_communication_error を設定して、通信エラーのログを取ります。
CREATE PROCEDURE sp_hook_dbmlsync_communication_error() BEGIN DECLARE msg VARCHAR(255); DECLARE code INTEGER; // get the error message text SELECT value INTO msg FROM #hook_dict WHERE name ='error message'; // get the error code SELECT value INTO code FROM #hook_dict WHERE name = 'stream error code'; // log the error information INSERT INTO communication_error_log(error_code,error_msg) VALUES (code,msg); END |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |