debezium采集数据时,有些操作没有采集到

问题遇到的现象和发生背景

哥,我使用debezium采集oracle,有时候数据会不一致,排查了好久,发现debezium没有采集到相关更新或删除操作。
有空的时候麻烦您看看我的配置有没有啥问题。

操作环境、软件版本等信息

debezium 2.4 alpha2

尝试过的解决方法

增加日志,查看日志信息,发现dbeeizum没有采集相关操作。

我想要达到的结果

找到问题,解决问题

配置及其问题展示

img

img

img

引用 皆我百晓生 小程序回复内容作答:

首先,请确保你的Debezium配置正确,并且数据库连接是正常的。

以下是一些可能导致Debezium在采集数据时遗漏某些操作的常见问题和解决方法:

  1. CDC日志模式未启用:Debezium需要数据库启用Change Data Capture (CDC)功能才能采集数据更新和删除操作。请确保Oracle数据库已启用CDC功能。可以使用以下查询来检查CDC是否已启用:

    SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI 
    FROM V$DATABASE;
    

    如果SUPPLEMENTAL_LOG_DATA_MIN的值为YES,则表示已启用CDC。

  2. 缺少必要的Oracle权限:确保Debezium连接数据库的用户具有必要的权限来读取数据库的CDC日志和表的数据。至少应该赋予该用户以下权限:

    GRANT SELECT ON SYS.LOGMNR_COL$
    TO DEBEZIUM_USER;
    
    GRANT SELECT ON SYS.LOGMNR_OBJ$
    TO DEBEZIUM_USER;
    
    GRANT SELECT ON SYS.LOGMNR_USER$
    TO DEBEZIUM_USER;
    
    GRANT SELECT ON SYS.LOGMNR_UID$
    TO DEBEZIUM_USER;
    
    GRANT FLASHBACK ANY TABLE TO DEBEZIUM_USER;
    GRANT EXECUTE ON SYS.DBMS_FLASHBACK TO DEBEZIUM_USER;
    
    GRANT SELECT ON SYS.V_$DATABASE TO DEBEZIUM_USER;
    

    请确保根据你的实际情况替换DEBEZIUM_USER为正确的数据库用户名。

  3. 未正确配置Debezium的连接器或过滤器:确保你的Debezuim连接器和过滤器配置正确。检查以下配置项是否正确设置:

    • connector.class:检查是否正确设置为"io.debezium.connector.oracle.OracleConnector"。
    • database.hostname:检查是否设置为正确的数据库主机名或IP地址。
    • database.user和database.password:检查是否设置为正确的数据库用户名和密码。
    • table.include.list或table.exclude.list:检查过滤器配置是否正确,确保它们不会过滤掉你想要采集的表。
  4. 必要的日志级别配置:检查Debezium的日志级别是否设置为足够详细的级别,以便捕获相关的日志信息。可以在Debezium的配置文件中设置以下日志级别:

    logger.level=debug
    

如果尝试以上方法后问题仍然存在,建议你将Debezium的详细日志信息提供出来,以便进一步分析问题。