Oracle 发布服务器的事务复制工作流

Oracle 发布服务器的事务复制是在 Microsoft SQL Server 事务复制发布体系结构的基础上建立的,但是,在 Oracle 发布服务器上跟踪更改并将更改传递给分发服务器的过程却与标准的事务复制有着显著的差异。 尽管存在差异,Oracle 数据库中发生的事务仍能在订阅服务器上通过一致的事务组进行应用。 传递更改时,具有外键引用的表之间能够保持其数据关系(外键不会复制到订阅服务器上)。

注意注意

大型对象 (LOB) 的跟踪方式与其他数据类型不同。 有关详细信息,请参阅 Oracle 发布服务器的设计注意事项和限制主题中的“大型对象的注意事项”部分。

下列工作流着重介绍跟踪和传递 Oracle 发布服务器上的更改所涉及的关键步骤。

跟踪更改

  1. 用户或应用程序在一个或多个为复制而发布的 Oracle 表上执行插入、更新或删除操作。

  2. 对于修改的每一行,都会激发由复制在每个已发布的 Oracle 表上安装的行级触发器,将有关更改的信息存储在与该表关联的项目日志表中。

  3. 激发行级触发器时,将从 HREPL_seq 序列中检索一个数字并将其分配给描述 DML 操作的日志表行。 这样可以确保复制按照正确的顺序在订阅服务器上应用更改命令。

  4. 如果发生主键更新,还将激发安装在表上的语句级触发器,使同一语句中发生的多个主键更新相互关联。 语句标识符从 HREPL_Stmt 序列中提取。 此标识符用于正确处理订阅服务器上的主键更新。

  5. 对于在发布的 Oracle 表中插入或删除的每一行,都会在关联的项目日志表中插入一行。 对于 Oracle 表中更新的每一行,会在日志表中插入一行(后像)或两行(前像和后像),具体情况取决于复制是否需要该行以前的状态信息。

将更改传递给分发服务器

  1. 日志读取器代理标识项目日志中尚未与轮询间隔相关联的一组事务一致性更改,并将日志表项的行 ID 暂时存储在 HREPL_Poll 表中。 从序列 HREPL_Pollid 中提取的标识符用于将每个更改项标记为事务一致性组的成员,并提供该组相对于其他组的处理顺序。

  2. 处理已发布表的更改时,将从日志表中检索行,而使用 HREPL_Pollid 中的当前轮询 ID 标识要处理的行。

  3. 日志表中的批更改在分发数据库中作为一个事务提交,并存储在 MSrepl_commandsMSrepl_transactions 表中。

分发代理然后从分发数据库中读取更改并将更改传递给订阅服务器,这与标准事务复制相同。