このストアド・プロシージャを使用して、Mobile Link サーバに対する接続が失敗した場合に異なる通信タイプまたはアドレスを使用してリトライします。
名前 |
値 |
説明 |
---|---|---|
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; |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |