Sqlanywhere SyBase SQL anywhere检查是否需要同步?

Sqlanywhere SyBase SQL anywhere检查是否需要同步?,sqlanywhere,mobilink,Sqlanywhere,Mobilink,我有一个Sybase SQL Anywhere 11.0.1数据库,用于与Oracle整合数据库同步 我知道SQLAnywhere数据库会跟踪对其所做的所有更改,以便知道要与整合数据库同步的内容。我的问题是是否有SQL命令可以告诉您数据库是否有要同步的更改 我有一个移动应用程序,我想在用户对需要同步的手持设备进行更改时向用户显示一个小标志。我可以自己创建另一个表来跟踪这些内容,但我更愿意ping数据库并询问它是否有需要同步的更改。移动数据库不跟踪上次同步的时间,MobiLink服务器将所有这些信

我有一个Sybase SQL Anywhere 11.0.1数据库,用于与Oracle整合数据库同步

我知道SQLAnywhere数据库会跟踪对其所做的所有更改,以便知道要与整合数据库同步的内容。我的问题是是否有SQL命令可以告诉您数据库是否有要同步的更改


我有一个移动应用程序,我想在用户对需要同步的手持设备进行更改时向用户显示一个小标志。我可以自己创建另一个表来跟踪这些内容,但我更愿意ping数据库并询问它是否有需要同步的更改。

移动数据库不跟踪上次同步的时间,MobiLink服务器将所有这些信息保存在合并数据库的MobiLink表中

由于同步只传输必要的信息,所以您可以简单地启动同步。如果没有要同步的内容,那么应用程序将使用很少的数据


顺便说一句,SQLAnywhere具有由Sybase工程师监控的功能。如果有人确实知道,那一定是他们。

没有什么自动的方法告诉您有数据要同步。除了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
,则上次同步的状态未知。上一次上传可能已在合并服务器上应用,也可能未应用,因为上传已发送,但未收到来自MobiLink服务器的响应。在这种情况下,建议同步不是一个坏主意

如果
progress=log\u sent
,则上次同步成功。知道了这一点,您可以检查
db_属性('CurrentRedoPos')
的值,该值将返回远程数据库的当前日志偏移量。如果此值明显高于“进度”值,则自上次同步以来,已对数据库应用了许多操作,因此很有可能存在要同步的数据。有很多原因导致即使是进程中的巨大差异和
db_属性('CurrentRedoPos')
也不会导致需要同步的实际数据

  • 当ML服务器确认上传后,dbmlsync更新远程的进度值后,dbmlsync应用从ML服务器下载的内容。dbmlsync在下载中应用的操作不会同步回ML服务器,因此整个偏移量范围可能只是应用的最后一次下载。当
    #hook_dict
    表值中的退出代码值为零时,可以通过跟踪
    sp_hook_dbmlsync_end
    钩子中的当前日志偏移量来解决此问题。这将告诉您应用下载后数据库的日志偏移量,您现在可以将保存的值与当前日志偏移量进行比较
  • 事务日志中的所有操作都可能是未同步表上的操作
  • 事务日志中的所有操作都可能已回滚

  • 我的解决方案并不理想。自己跟踪对同步表的更改是最好的解决方案,但我认为我可以提供一种适合您需要的替代方案,其优点是您不会在同步表上执行的每个操作上触发额外操作。

    从SQL Anywhere 17开始,SAP PM映射到包含TTRANSACTION_上载表的本地Sybase数据库,因此,要确定是否需要同步,我们只需查询此表,查看它是否有任何需要同步到HANA整合数据库的记录。

    警告标志是让用户知道他们应该将手机连接到扩展底座并启动同步,因此启动同步不是一个选项,因为设备没有连接。这是非常有用的,因为我们还被要求发布一条消息,指示上次成功同步应用程序的时间。谢谢