同期の整合性を確保するために、dbmlsync ではアップロードが構築されてからダウンロードが適用されるまでの間に、ダウンロードのローが修正されないようにする必要があります。
Windows Mobile 以外のプラットフォームでは、デフォルトの動作として dbmlsync は同期中のパブリケーションで指定されているすべてのテーブルに対する共有ロックを取得します。Windows Mobile では、デフォルトの動作として dbmlsync は排他ロックを取得します。dbmlsync は、アップロードの構築を開始する前にロックを取得し、ダウンロードが適用されるまでそのロックを保持します。
ロックの詳細については、ロー・ロックを参照してください。
このロック動作は、次のオプションを使用してカスタマイズできます。
このロック・メカニズムを使用しているときに、データベースに別の接続が存在し、その接続に同期テーブルに対するロックがある場合は、同期が失敗します。別のロックが存在しても、同期がすぐに行われるようにする場合は、dbmlsync で -d オプションを使用します。このオプションを指定すると、同期に影響するロックのある接続はデータベースによって削除されるため、同期を進行できます。削除された接続のコミットされていない変更は、ロールバックされます。
詳細については、-d オプションを参照してください。
データの整合性を保持する別の方法は、LockTables 拡張オプションを OFF に設定することです。OFF にすると、アーティクルのテーブルがロックされるのを防ぎます。これにより、dbmlsync はアップロードの構築後に修正されたローをすべて追跡します。ダウンロードを受信しても、そのローが修正されている場合はダウンロードは適用されません。この場合、dbmlsync は同期のリトライを行います。リトライは、新しいダウンロードの競合が検出されないかぎり正常に実行されます。
詳細については、LockTables (lt) 拡張オプションを参照してください。
競合が検出された場合は、ダウンロード・フェーズがキャンセルされ、新しい変更が上書きされないようにダウンロード操作がロールバックされます。次に、dbmlsync ユーティリティはアップロード手順を含む同期を再試行します。今度はローが同期処理の最初に処理されており、アップロードにこのローが含まれているため、このローを失うことはありません。
デフォルトでは、dbmlsync は正常に実行されるまで同期のリトライを行います。リトライの回数を制限するには、拡張オプション ConflictRetries を使用します。ConflictRetries を -1 に設定すると、正常に実行されるまで dbmlsync によってリトライが実行されます。これを正の整数に設定すると、dbmlsync は指定した回数以内でリトライを実行します。
詳細については、ConflictRetries (cr) 拡張オプションを参照してください。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |