同期要求が発生し、Mobile Link サーバが、新しい接続を作成することを決定すると、begin_connection イベントが呼び出され、同期が始まります。
同期に続いて、接続が接続プールに配置され、再度 Mobile Link は同期要求を待ちます。end_connection イベントが呼び出された後、接続は最終的に接続プールから削除されます。ただし、同じバージョンに対する同期要求を再び受信した場合、Mobile Link はその次に受けた同期要求を同じ接続で処理します。現在の同期に影響するイベントがいくつかあります。
各同期内で、次のトランザクションが発生する可能性があります。各トランザクションは省略可能です。
認証
同期の開始
アップロード
dbmlsync -tu オプションを使用して複数のアップロード・トランザクションを指定できます。
ダウンロードの準備
ダウンロード
同期の終了
非ブロッキング・ダウンロード確認
さらに、2 つの接続トランザクションが含まれることがあります。接続の開始トランザクションは、接続が確立された直後に発生し、接続の終了トランザクションは、接続が終了したときに発生します。
同期の主要段階は、アップロード・トランザクションとダウンロード・トランザクションです。アップロードとダウンロードのトランザクションに含まれるイベントについては、以下で概説します。
アップロード・トランザクションは、リモート・データベースからアップロードされた変更を適用します。
begin_upload イベントは、アップロード・トランザクションの開始にマークを付けます。アップロード・トランザクション処理は 2 段階になっています。まず、すべてのリモート・テーブルに対する挿入と更新がアップロードされ、次にすべてのリモート・テーブルに対する削除がアップロードされます。
end_upload イベントは、アップロード・トランザクションの終了にマークを付けます。
ローをアップロードするスクリプトの作成を参照してください。
ダウンロード・トランザクションは、統合データベースからローをフェッチします。ダウンロード・トランザクションは、begin_download イベントで始まります。
ダウンロード・トランザクション処理は 2 段階になっています。まず最初に各テーブルに対する削除データがダウンロードされ、次に更新/挿入ロー (アップサート) がダウンロードされます。end_download イベントによって、ダウンロード・トランザクションが終了します。
ローをダウンロードするスクリプトの作成を参照してください。
非ブロッキング・ダウンロード確認トランザクションは、Mobile Link が非ブロッキング・ダウンロード確認モードであり、かつダウンロード確認が受信された場合にのみ実行されます。このトランザクションには、2 つの目的があります。このトランザクションでは、publication_nonblocking_download_ack スクリプトと nonblocking_download_ack スクリプトが実行されます。これらのスクリプトは、ダウンロード・ステータスの追跡を容易にします。次に、このトランザクション中に Mobile Link システム・テーブルのダウンロード・タイムスタンプが更新されます。
このトランザクションは、ターゲット同期に対する他のイベントと同じデータベース接続では実行されません。つまり、このトランザクションでは接続レベルの変数が参照されません。
次の疑似コードは、イベント (イベントと同名のスクリプト) が呼び出される順序の概要を示します。この Mobile Link イベント・モデルの説明は、エラーのない完全な同期 (アップロード専用またはダウンロード専用ではない) を想定しています。
ほとんどの場合、指定したイベントのスクリプトを定義していないと、デフォルト・アクションは何も実行しません。
begin_connection イベントと end_connection イベントは、「接続レベルのイベント」です。これらのイベントは特定の同期に依存せず、パラメータがありません。
各テーブルが同期されるたびに 1 回ずつ呼び出されるイベントもあります。これらのイベントに対応するスクリプトは、「テーブル・レベルのスクリプト」と呼ばれます。
各テーブルは専用のテーブル・スクリプトを持つことができますが、いくつかのテーブルで共有されるテーブル・レベルのスクリプトを作成することもできます。
begin_synchronization など、一部のイベントは接続レベルとテーブル・レベルの両方で発生します。これらのイベントに対しては、接続スクリプトとテーブル・スクリプトの両方を作成できます。
同期処理がどのように複数のトランザクションに分散されるかについては、COMMIT 文が参考になります。
データベース・エラーは、同期処理中のどの時点でも発生する可能性があります。データベース・エラーは、handle_error スクリプトまたは handle_odbc_error スクリプトを使用して処理されます。
SQL 同期スクリプト、または SQL 同期スクリプトから呼び出されるプロシージャやトリガで、暗黙的または明示的なコミットまたはロールバックを実行しないでください。SQL スクリプト内に COMMIT 文または ROLLBACK 文があると、同期手順のトランザクションの性質が変化してしまいます。これらの文を使用すると、Mobile Link では、障害が発生した場合にデータの整合性を保証できません。
Mobile Link の完全なイベント・モデル
アップロード中のイベント
ダウンロード中のイベント
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |