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

SQL Anywhere 11.0.1 (中文) » SQL Remote » SQL Remote 部署和管理 » SQL Remote 管理 » 了解保证消息传送系统

 

确保按正确顺序应用操作

要确保按正确顺序应用复制的语句,保证消息传送系统使用发布者和预订者数据库的事务日志偏移。每个 COMMIT 指令在事务日志中均由一个明确定义的偏移来标记。事务的顺序可以通过比较其事务日志偏移值来确定。

每条消息都包含以下事务日志偏移:

  • 上一条消息中最后一个 COMMIT 指令的事务日志偏移。如果事务跨几条消息,则使用事务内的序列号正确排列消息的顺序。 确保按正确顺序应用操作.

  • 消息中最后一个 COMMIT 的事务日志偏移。

消息排序

发送消息时,将按照上一条消息最后一个 COMMIT 指令的偏移对其排序。如果事务跨几条消息,则使用事务内的序列号正确排列消息的顺序。

发送消息

SYSREMOTEUSER 系统表中的 log_sent 列保存发送到预订者的上一条消息的本地事务日志偏移。

下面介绍了当发送消息时如何更新 SYSREMOTEUSER 系统表。

  1. 发布者消息代理 (dbremote) 在向预订者发送消息时,还将 log_sent 值设置为发送消息中最后一个 COMMIT 的事务日志偏移值。

    例如,发布者将以下消息发送给 user1。

    
    (0-0000923200-0000923357-0)
    

    在发布者的 SYSREMOTEUSER 系统表中,发布者为 user1 将 log_sent 值设置为 0000923357。

  2. 在预订者数据库中收到并应用消息时,将向发布者发送确认。该确认包含由预订者数据库应用的上一个事务日志偏移。

    例如,消息将确认 user1 已应用了所有更新的且事务日志偏移为 0000923357 的事务。

  3. 发布者消息代理 (dbremote) 在接收到确认时,会为 SYSREMOTEUSER 系统表中的用户将 confirm_sent 列设置为确认偏移的值。

    例如,发布者为其 SYSREMOTEUSER 系统表中的 user1 将 confirm_sent 列设置为 0000923357。

log_sent 和 confirm_sent 值都包含发布者事务日志的事务日志偏移。confirm_sent 值的偏移不能晚于 log_sent 值。

接收消息

下面介绍了当接收消息时如何更新 SYSREMOTEUSER 系统表。

  1. 预订者数据库中的消息代理 (dbremote) 在接收并应用复制更新时,会以该消息中最后一个 COMMIT 的偏移来更新 SYSREMOTEUSER 系统表中的 log_received 列。

    例如,当预订者接收并应用以下消息时,SYSREMOTEUSER 系统表中的 log_received 值将设置为 0000923357。

    
    (0-0000923200-0000923357-0)
    

    任何预订者数据库的 log_received 列都包含发布者数据库事务日志中的事务日志偏移。

  2. 当接收并应用操作时,预订者消息代理 (dbremote) 将设置其 SYSREMOTEUSER 系统表中的 confirm_received 值,然后向发布者数据库发送确认。

另请参见