ダウンロード・トランザクション時に各テーブルの処理に使用できるスクリプトは、2 つあります。挿入と更新を実行する download_cursor スクリプトと、削除を実行する download_delete_cursor スクリプトです。
これらのスクリプトは、SELECT 文か、結果セットを返すプロシージャの呼び出しのどちらかです。Mobile Link サーバは、スクリプトの結果セットをリモート・データベースにダウンロードします。Mobile Link クライアントは自動的に、download_cursor スクリプトの結果セットに基づいてローを挿入または更新し、download_delete_cursor イベントに基づいてローを削除します。
ストアド・プロシージャの使用の詳細については、ストアド・プロシージャ・コールからの結果セットのダウンロードを参照してください。
Mobile Link サーバは、データを 1 つのトランザクションでダウンロードします。ダウンロード処理の説明については、ダウンロード中のイベントを参照してください。
アップロードと同様、ダウンロードも接続イベントで開始、終了します。他のイベントは、テーブル・レベルのイベントです。
SendDownloadAck 設定を ON に変更した場合、サーバの動作は、使用しているダウンロード確認モードによって異なります。ブロッキング・ダウンロード確認の場合、ダウンロードの確認をクライアントから受け取らなかった場合、統合データベースではダウンロード・トランザクション全体がロールバックされます。非ブロッキング・ダウンロード確認の場合、ダウンロード・トランザクションはコミットされますが、ダウンロード・タイムスタンプ更新スクリプトとダウンロード確認スクリプトは確認を受信するまで実行されません。
デフォルトでは、SendDownloadAck は OFF に設定されています。
SendDownloadACK (sa) 拡張オプション、Send Download Acknowledgement 同期パラメータ、-nba オプション、nonblocking_download_ack 接続イベント、publication_nonblocking_download_ack 接続イベントを参照してください。
各リモート・テーブルの begin_download スクリプトと end_download スクリプトには、更新される個々のローには依存しない論理が保持されます。
タイムスタンプベースのダウンロードの場合は、last_download_timestamp パラメータを指定して、最後の同期以降の変更のみがダウンロードされるようにします。たとえば、download_cursor または download_delete_cursor SQL スクリプトには次の行を挿入できます。
WHERE Customer.last_modified >= {ml s.last_table_download} |
スクリプトでの最終ダウンロード時刻の使用を参照してください。
ダウンロードでは、挿入と更新が区別されません。download_cursor イベントに対応するスクリプトは、ダウンロードされるローを定義する SELECT 文です。クライアントは、ローが存在するかどうかを調べ、適切な挿入操作または更新操作を実行します。
参照整合性違反を避けるために必要であれば、ダウンロード処理の最後にクライアントは自動的にローを削除します。
以前の展開によって作成されたシャドー・テーブルを同期しないでください (たとえば、_mod または _del で終わるテーブルを同期しないでください)。これらのテーブルが必要になるのは、変更または削除されたローを統合データベースで追跡する場合のみです。
参照整合性と同期を参照してください。
download_cursor スクリプトの作成
download_delete_cursor スクリプトの作成
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |