リモート・データベースの各トランザクションを、1 つの同期内で独立したトランザクションとしてアップロードするように指定します。
dbmlsync -tu ...
-tu オプションを使用するときは、「トランザクション・アップロード」を作成します。こうすると、dbmlsync はリモート・データベースの各トランザクションを別個のトランザクションとしてアップロードします。Mobile Link サーバは各トランザクションを受信したときに別々に適用およびコミットします。
-tu オプションを使用すると、リモート・データベースのトランザクションの順序は、常に統合データベースで保持されます。ただし、トランザクションでの操作の順序は保持されないことがあります。これには、以下の 2 つの理由があります。
Mobile Link は、常に外部キー関係に基づいて更新を適用します。たとえば、子と親のテーブルでデータが変更されると、Mobile Link はデータの挿入を親のテーブル、子のテーブルの順に行いますが、データの削除は子のテーブル、親のテーブルの順に行います。リモートの操作がこの順序に従っていない場合は、統合データベースでは操作の順序が異なります。
トランザクション内の操作は結合されます。つまり、1 つのトランザクションで同じローを 3 回変更しても、最後の形式のローのみがアップロードされます。
トランザクション・アップロードが中断された場合、送信されなかったデータは、次の同期で送信されます。ほとんどの場合、正常に完了しなかったトランザクションだけが、この時点で送信されます。また、サブスクリプションの最初の同期中にアップロードが失敗した場合などは、dbmlsync はすべてのトランザクションを再送します。
-tu オプションを使用しないと、Mobile Link はリモート・データベースでのすべての変更を結合し、アップロードの 1 つのトランザクションにします。つまり、同期と同期の間に同じローを 3 回変更しても、リモート・トランザクションの数に関係なく、最後の形式のローのみがアップロードされます。このデフォルトの動作は、効率がよく、多くの状況に最適です。
ただし、特定の状況では、統合データベースでリモート・トランザクションを保持したい場合があります。たとえば、リモート・データベースでトランザクションが発生したときに、そのトランザクションに基づいてアクションを行うトリガを統合データベースで定義したいことがあります。
さらに、アップロードを小さいトランザクションに分割することには利点があります。多くの統合データベースは、小さなトランザクションを対象として最適化されているため、巨大なトランザクションは効率的でなく、多数の競合が発生することがあります。また、-tu オプションを使用すると、アップロード中に通信エラーが発生してもアップロード全体を失わずに済むことがあります。-tu オプションを使用している場合にアップロード・エラーが発生しても、正常にアップロードされたすべてのトランザクションが適用されます。
-tu オプションを指定すると、Mobile Link は SQL Remote とほぼ同じように動作します。主な相違点は、SQL Remote がすべての変更を発生順にリモート・データベースにレプリケートし、結合を行わないことです。このように動作させるには、リモート・データベースで各データベース操作の後にコミットしてください。
Increment 拡張オプションやスクリプト化されたアップロードに -tu を使用することはできません。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |