跳到主要内容

Db2 复制方式

Db2 官方复制方式

InfoSphere RS (Replication Server)

  • RDB -> RDB

  • SQL 复制

    • Capture 程序运行在源端的系统上。Capture 程序读取 Db2 的恢复日志来获取已更改的源端数据并将己落实的更改数据保存到登台表。
    • Apply 程序从登台表中抓取 Capture 捕获的数据并将这些数据传递至目标端。 sql_replicate
  • Q 复制

    • 捕获对源表所做的变更并转换已落实的事务性数据为消息。 q_replicate
  • 对比

    复制属性SQL 复制Q 复制
    是否支持两个 Db2 之间复制支持支持
    是否支持非 Db2 数据源到 Db2支持不支持
    是否支持 Db2 到非 Db2 之间复制支持支持
    运行性能一般很好
    运行性能基于日志/触发器基于日志
    是否需要 MQ

InfoSphere CDC (Change Data Capture)

  • InfoSphere CDC 是一个复制解决方案,用于捕获正在发生的数据库更改并根据 InfoSphere CDC Management Console GUI 应用程序中配置的表映射将这些更改传递到目标数据库、消息队列或 ETL 解决方案
  • 原理
    • CDC 通过日志读取模块 Log Reader 读取源端所有活动表的变化日志
    • 将有关的日志放在事务队列 Transaction Queue 中
    • 日志读取模块读取 redo log、archive log、transaction log 放入日志存储 Staging Store 中
    • 进行映射、过滤、转变,通过 TCP/IP 发送到对端 cdc

Debezium 官方复制方式

Debezium 使用的就是 Db2 官方的 SQL 复制,利用 SQL 复制的 CD 表进行复制。

概述

  • 使用基于 SQL 的轮询模型,将表置于“捕获模式”时,对该表的每个行级更新生成流式传输的更改事件。(处于捕获方式的表具有关联的更改数据表,由 Db2 创建。)
  • 对于处于捕获模式的表的每次更改,Db2 都会将有关该更改的数据添加到表的关联更改数据表中
  • 更改数据表包含一行的每个状态的条目。它还有用于删除的特殊条目。
  • Debezium Db2 连接器从更改数据表中读取更改事件并将事件发送到 Kafka 主题。
  • Debezium Db2 连接器第一次连接到 Db2 数据库时,连接器会读取表的一致快照,连接器被配置为捕获更改。
  • 默认情况下,这是所有非系统表。有一些连接器配置属性可让您指定将哪些表置于捕获模式,或从捕获模式中排除哪些表。
  • 快照完成后,连接器开始向处于捕获模式的表发送已提交更新的更改事件。默认情况下,特定表的更改事件会转到与表同名的 Kafka 主题。应用程序和服务使用来自这些主题的更改事件。

连接器需要使用抽象语法表示法 (ASN) 库,这些库作为 Db2 for Linux 的标准部分提供。要使用 ASN 库,您必须拥有 IBM InfoSphere Data Replication (IIDR) 的许可证。您不必安装 IIDR 即可使用 ASN 库。

复制原理

  • 必须将要捕获更改的表置于捕获模式。
  • Debezium Db2 连接器基于在 Db2 中启用 SQL 复制的 ASN Capture/Apply 代理。捕获代理
    • 为处于捕获模式的表生成更改数据表。
    • 以捕获模式监视表并将更改事件存储在相应的更改数据表中以更新这些表。
  • Debezium 连接器使用 SQL 接口来查询更改数据表中的更改事件。
  • 为了方便测试 Debezium 有用户定义函数 (UDF),编译后用于执行以下管理任务(也可以使用 Db2 命令)
    • 启动、停止和重新初始化 ASN 代理
    • 将表格置于捕获模式
    • 创建复制 (ASN) 模式和更改数据表
    • 从捕获模式中删除表
  • 在需要同步的表处于捕获模式后,连接器会读取其相应的更改数据表以获取表更新的更改事件。
    • 对处于捕获模式的每个表执行一致的快照。
    • 创建快照的点开始流式传输更改事件。
    • 故障通过 日志序列号 LSN(更改事件在数据库日志中的位置),通过 LSN 重启创建新快照

连接器的工作原理

  • Db2 的复制功能并非旨在存储数据库更改的完整历史记录。因此,当 Debezium Db2 连接器首次连接到数据库时,它会对处于捕获模式的表进行一致的快照,并将此状态流式传输到 Kafka。
  • 默认情况下,当 Db2 连接器执行快照时,它会执行以下操作:
    • 确定哪些表处于捕获模式,因此必须包含在快照中。默认情况下,所有非系统表都处于捕获模式。
    • 在捕获模式下获取每个表的锁。这可确保在快照期间这些表中不会发生架构更改。
    • 读取服务器事务日志中最高(最新)的 LSN 位置。
    • 捕获处于捕获模式的所有表的架构。连接器将此信息保存在其内部数据库历史主题中。
    • 可选,释放在步骤 2 中获得的锁。通常,这些锁只保留很短的时间。
    • 在步骤 3 中读取的 LSN 位置,连接器扫描捕获模式表及其架构。在扫描期间,连接器:
      • 确认表是在快照开始之前创建的。如果不是,则快照会跳过该表。快照完成后,连接器开始发出更改事件,连接器为在快照期间创建的任何表生成更改事件。
      • 为处于捕获模式的每个表中的每一行生成一个读取事件。所有读取事件都包含相同的 LSN 位置,也就是在步骤 3 中获得的 LSN 位置。
      • 将每个读取事件发送到与表同名的 Kafka 主题。
    • 在连接器偏移中记录快照的成功完成。