DB2 数据源权限配置

概述

Db2 CDC基于在 Db2 中启用 SQL 复制的ASN Capture/Apply 代理。

捕获代理:为处于捕获模式的表生成更改数据表。以捕获模式监视表并将更改事件存储在相应的更改数据表中以更新这些表。CDC 作业使用 SQL 接口来查询更改数据表中的更改事件。因此数据库管理员必须将要捕获更改的表置于捕获模式。

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

前提条件


当前支持Db2 驱动版本为db2jcc4,支持Db2 11.x 版本 理论上能向下兼容低版本

操作步骤


注意:建议由数据库管理员对数据源配置进行操作。
设置表为捕获模式

为了将表置于捕获模式,Debezium 提供了一组用户定义函数 (UDF) 以方便使用。此处的过程显示了如何安装和运行这些管理 UDF

先决条件
  • 以用户身份登录到 Db2 db2instl。
  • 在 Db2 主机上,Debezium 管理 UDF 放置 $HOME/asncdctools/src 目录中。UDF 可从Debezium 示例存储库中获得。
操作流程
  1. 使用Db2 提供的命令在 Db2 服务器主机上编译 Debezium 管理 UDF
     cd $HOME/asncdctools/src
     ./bldrtn asncdc
  2. 启动数据库,如果数据库未启动时,替换DB_NAME为您希望 CDC任务 连接到的数据库的名称

     db2 start db DB_NAME
  3. 确保 JDBC 可以读取 Db2 元数据目录
    cd $HOME/sqllib/bnd
    db2 bind db2schema.bnd blocking all grant public sqlerror continue
  4. 确保最近备份了数据库。ASN 代理必须具有最近的读取起点。如果您需要执行备份,请运行以下命令,这会修剪数据,以便只有最新版本可用。如果您不需要保留旧版本的数据,请指定dev/null备份位置。

    • 备份数据库。替换DB_NAME和:BACK_UP_LOCATION db2 backup db DB_NAME to BACK_UP_LOCATION
    • 重启数据库 db2 restart db DB_NAME
  5. 连接到数据库安装 Debezium 管理 UDF。假设您以用户身份登录,db2instl因此应在该db2inst1用户上安装 UDF。

     db2 connect to DB_NAME
  6. 复制 Debezium 管理 UDF 并为其设置权限
     cp $HOME/asncdctools/src/asncdc $HOME/sqllib/function
    chmod 777 $HOME/sqllib/function
  7. 启用启动和停止 ASN 捕获代理的 Debezium UDF
     db2 -tvmf $HOME/asncdctools/src/asncdc_UDF.sql
  8. 创建 ASN 控制表
     db2 -tvmf $HOME/asncdctools/src/asncdctables.sql
  9. 启用将表添加到捕获模式并从捕获模式中删除表的 Debezium UDF
     db2 -tvmf $HOME/asncdctools/src/asncdcaddremove.sql
  10. 启动 ASN 代理
    VALUES ASNCDC.ASNCDCSERVICES('start','asncdc');
  11. 将表格置于捕获模式。为要捕获的每个表调用以下语句。替换MYSCHEMA 为包含要进入捕获模式的表的模式的名称。同样,替换MYTABLE为要进入捕获模式的表的名称
    CALL ASNCDC.ADDTABLE('MYSCHEMA', 'MYTABLE');
  12. 重新初始化 ASN 服务
    VALUES ASNCDC.ASNCDCSERVICES('reinit','asncdc');

至此配置权限完成,在CDC 任务中接入表即可,开发方式可参考文档CDC 任务开发

Db2 捕获代理配置对服务器负载和延迟的影响


当数据库管理员为源表启用变更数据捕获时,捕获代理开始运行。代理从事务日志中读取新的更改事件记录,并将事件记录复制到捕获表中。在源表中提交更改与更改出现在相应更改表中的时间之间,始终存在一个小的延迟间隔。此延迟时间间隔表示源表中发生更改与 Debezium 可用于流式传输到 Apache Kafka 之间的差距。

理想情况下,对于必须快速响应数据更改的应用程序,您希望在源表和捕获表之间保持密切同步。您可能会想象,运行捕获代理以尽可能快地连续处理变更事件可能会提高吞吐量并减少延迟——在事件发生后尽快用新的事件记录填充变更表,几乎是实时的。但是,情况不一定如此。追求更直接的同步需要付出性能代价。每次更改代理向数据库查询新的事件记录时,都会增加数据库主机上的 CPU 负载。服务器上的额外负载会对整体数据库性能产生负面影响,并可能降低事务效率,

监视数据库指标很重要,这样您就可以知道数据库是否达到服务器不再支持捕获代理的活动级别的程度。如果您在运行捕获代理时遇到性能问题,请调整捕获代理设置以减少 CPU 负载。

在IBMSNAP_CAPPARMS表中,以下参数对降低 CPU 负载的影响最大:

COMMIT_INTERVAL

  • 指定捕获代理等待将数据提交到更改数据表的秒数。
  • 较高的值会减少数据库主机上的负载并增加延迟。
  • 默认值为30。

SLEEP_INTERVAL

  • 指定捕获代理在到达活动事务日志末尾后等待开始新提交周期的秒数。
  • 较高的值会减少服务器上的负载,并增加延迟。
  • 默认值为5。

有关捕获代理参数的更多信息,请参阅 Db2 文档。