このストアドプロシージャーを使用して、Mobile Link サーバーに対する接続が失敗した場合に異なる通信タイプまたはアドレスを使用してリトライします。
名前 | 値 | 説明 |
---|---|---|
publication_n (in) |
パブリケーション |
廃止予定。代わりに subscription_n を使用します。同期されているパブリケーション (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 オプションまたは RemoteProgressGreater=on 同期プロファイルオプションが指定された場合にのみ true になります。このローの値を変更すると、現在の同期のオプションの値のみを変更できます。 -r dbmlsync オプションを参照してください。 |
allow remote behind (in|out) | true | false | この同期に対して dbmlsync の -ra オプションまたは RemoteProgressLess=on 同期プロファイルオプションが指定された場合にのみ true になります。このローの値を変更すると、現在の同期のオプションの値のみを変更できます。 -r dbmlsync オプションを参照してください。 |
retry (in|out) | true | false | 失敗した接続の試行をリトライする場合にこの値を true に設定します。デフォルト値は FALSE です。 |
subscription_n (in) | サブスクリプション名 | 同期されているサブスクリプションの名前 (n は整数)。これは、同期される各サブスクリプションの subscription_n エントリです。n の番号は 0 から始まります。 |
この名前のプロシージャーが存在する場合、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 IF value = ''then 0 else cast(value as integer)endif INTO idx FROM #hook_dict WHERE name = 'user data'; IF idx < 5 THEN UPDATE #hook_dict SET value = idx +1 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 if value = ''then | else cast(value as integer)endif 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 +1 WHERE name = 'user data'; UPDATE #hook_dict SET value = 'TRUE' WHERE name = 'retry'; END IF; END; |
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |