1

Oracle Consolidated Database との同期に使用している Sybase SQL Anywhere 11.0.1 データベースがあります。

SQL Anywhere データベースは、統合データベースと同期する対象を認識できるように、加えられたすべての変更を追跡していることを知っています。私の質問は、データベースに同期する変更があるかどうかを知らせる SQL コマンドがあるかどうかです。

私はモバイル アプリケーションを持っており、同期が必要なハンドヘルドに変更を加えるたびに、ユーザーに小さなフラグを表示したいと考えています。自分でその内容を追跡するために別のテーブルを作成することもできますが、データベースに ping を実行して、同期する必要がある変更があるかどうかを確認する方がはるかに簡単です。

4

3 に答える 3

2

同期するデータがあることを自動的に通知するものは何もありません。Ben の提案に加えて、リモート データベースの SYS.SYSSYNC テーブルにクエリを実行して、変更があるかどうかを確認するという別のアイデアもあります。次のステートメントは、最後の同期の簡単なステータスを示す結果セットを返します。

select ss.site_name, sp.publication_name, ss.log_sent,ss.progress 
from sys.syssync ss, sys.syspublication sp 
where ss.publication_id = sp.publication_id
and ss.publication_id is not null 
and ss.site_name is not null

の場合progress < log_sent、最後の同期のステータスは不明です。アップロードは送信されましたが、Mobile Link サーバーからの応答が受信されなかったため、最後のアップロードが統合で適用されている場合と適用されていない場合があります。この場合、同期を提案することは悪い考えではありません。

の場合progress = log_sent、最後の同期は成功しています。これを知っていればdb_property('CurrentRedoPos')、リモート データベースの現在のログ オフセットを返す の値を確認できます。この値が進行状況の値よりも大幅に大きい場合は、最後の同期以降にデータベースに適用された多くの操作があるため、同期するデータがある可能性が高くなります。db_property('CurrentRedoPos')進行状況に大きな違いがあったとしても、同期が必要な実際のデータがなくなる可能性がある理由はたくさんあります。

  1. ML サーバーからのダウンロードは、アップロードが ML サーバーによって確認されたときにリモートでの進行状況の値が dbmlsync によって更新された後、dbmlsync によって適用されます。dbmlsync によってダウンロードに適用された操作は ML サーバーに同期されないため、オフセット範囲全体が適用された最後のダウンロードになる可能性があります。これは、テーブル値sp_hook_dbmlsync_endの終了コード値がゼロの場合に、フックで現在のログ オフセットを追跡することで回避できます。#hook_dictこれにより、ダウンロードが適用された後のデータベースのログ オフセットがわかり、保存された値を現在のログ オフセットと比較できるようになりました。
  2. トランザクション ログ内のすべての操作は、同期されていないテーブルに対する操作である可能性があります。
  3. トランザクション ログ内のすべての操作がロールバックされた可能性があります。

私の解決策は理想的ではありません。同期されたテーブルへの変更を自分で追跡することが最善の解決策ですが、同期されたテーブルで実行されるすべての操作で余分なアクションをトリガーしないという利点があるため、ニーズに合った代替手段を提供できると思いました。

于 2009-12-08T17:54:01.570 に答える
1

モバイル データベースは、最後の同期がいつ行われたかを追跡しません。Mobile Link サーバーは、そのすべての情報を統合データベースの Mobile Link テーブルに保持します。

同期は必要な情報のみを転送するため、単純に同期を開始できます。同期するものが何もない場合、アプリケーションで使用されるデータはほとんどありません。

補足として、SQL Anywhere には独自の SO クローンがあり、Sybase エンジニアによって監視されています。誰かが確かに知っているなら、それは彼らでしょう。

于 2009-12-08T16:56:27.153 に答える
0

SQL Anywhere 17 以降、SAP PM は TTRANSACTION_UPLOAD テーブルを含むローカルの Sybase データベースにマップされるため、同期が必要かどうかを判断するには、単純にこのテーブルにクエリを実行して、HANA に同期する必要があるレコードがあるかどうかを確認します。統合データベース。

于 2017-09-14T21:36:47.690 に答える