保证消息传送系统可确保:
按正确顺序应用所有复制的操作。
不丢失任何复制的操作。
不会将复制的操作应用两次。
保证消息传送系统使用以下信息:
在 SYSREMOTEUSER 系统表中保留的状态信息 对于每个预订者,此表中都有与之对应的一行,其中包含向该预订者发送的和该预订者接收的消息的状态信息。例如:
在统一数据库中,对于每个远程用户,SYSREMOTEUSER 系统表都有与之对应的一行。
在每个远程数据库中,SYSREMOTEUSER 系统表都包含一个具有统一数据库信息的单独行。
SYSREMOTEUSER 系统表由 SQL Remote 消息代理 (dbremote) 来维护。
在预订者数据库中,SQL Remote 消息代理 (dbremote) 会向发布者数据库发送确认,以确保 SYSREMOTEUSER 系统表在预订所涉及的各方均得到正确维护。
消息标头中的信息 SQL Remote 消息代理 (dbremote) 读取消息的标头信息,并使用此信息更新 SYSREMOTEUSER 系统表。消息的标头包含以下信息:
消息的 resend_count 跟踪接收数据库丢失消息的次数的计数器。
在下例中,resend_count 为 1。
Current message's header: (1-0000942712-0001119170-0) |
上一条消息中最后一个 COMMIT 的事务日志偏移 在下例中,上一条消息中最后一次提交操作的事务日志偏移为 0000942712。
Previous message's header:(0-0000923357-0000942712-0) Current message's header: (0-0000942712-0001119170-0) |
当前消息中上一个 COMMIT 的事务日志偏移 在下例中,当前消息中上一次提交操作的事务日志偏移为 0001119170:
Current message's header: (0-0000942712-0001119170-0) |
如果事务跨多条消息,则两个事务日志偏移在最后一条消息包含 COMMIT 之前可以相同。
在下例中,直到第四条消息才发生 COMMIT:
(0-0000942712-0000942712-0) (0-0000942712-0000942712-1) (0-0000942712-0000942712-2) (0-0000942712-0001119170-3) |
序列号 当事务跨多条消息时,使用此序列号正确排列消息的顺序。
序列号零可表示:
如果事务日志偏移不同,则消息不属于包含由多个部分组成的消息的一部分。
在下例中,消息不属于包含由多个部分组成的消息的一部分:
(0-0000923200-0000923357-0) (0-0000923357-0000942712-0) |
如果事务日志偏移相同,则消息是由多个部分组成的消息的第一部分。
在下例中,第一条消息是由多个部分组成的消息的一部分:
(0-0000942712-0000942712-0) (0-0000942712-0000942712-1) (0-0000942712-0000942712-2) (0-0000942712-0001119170-3) |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |