Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » Mobile Link クイックスタート » Mobile Link テクノロジ » Mobile Link 同期 » 同期処理

 

参照整合性と同期

BlackBerry または J2SE 用の Ultra Light を除くすべての Mobile Link クライアントは、ダウンロードをリモートデータベースに組み込むときに参照整合性を確保します。

参照整合性に違反するローがあった場合、デフォルトでは、Mobile Link クライアントはダウンロードトランザクションを失敗させずに、参照整合性に違反するすべてのローを自動的に削除します。

この機能には次のような利点があります。

  • 同期スクリプトの間違いから保護します。スクリプトに柔軟性があると、リモートデータベースの整合性をそこなうローを誤ってダウンロードしてしまうことがあります。Mobile Link クライアントは、介入を要求せずに参照整合性を自動的に管理します。

  • この参照整合性のメカニズムを使用して、リモートデータベースから情報を効率的に削除できます。親レコードに削除データを送信するだけで、Mobile Link クライアントはすべての子レコードを自動的に削除します。これにより、Mobile Link がリモートデータベースに送信するトラフィックの量を大幅に減らすことができます。

Mobile Link クライアントは、参照整合性を維持するためにローを明示的に削除する必要がある場合、次のような通知を行います。

  • SQL Anywhere クライアントの場合は、dbmlsync によってログにエントリが書き込まれます。dbmlsync イベントフックも使用できます。 次の項を参照してください。

  • Ultra Light クライアントの場合は、SQLE_ROW_DELETED_TO_MAINTAIN_REFERENTIAL_INTEGRITY 警告が発生します。この警告には、テーブル名のパラメーターが含まれます。参照整合性を維持するため、削除されるすべてのローで警告が発生します。同期をそのまま進める場合は、警告を無視してかまいません。警告を明示的に処理する場合は、エラーコールバック関数を使用して警告をトラップします。さらに、削除されたローの数を取得することもできます。

    警告が発生したときに同期を失敗させるには、同期 observer を実装し、observer に (グローバル変数などを使用して) エラーコールバック関数から信号を送信する必要があります。この場合、同期は observer への次回の呼び出しで失敗します。

 トランザクション終了時にチェックされる参照整合性
 例
 デフォルトの動作の変更