OMS反向增量过程中报错,table not existed, table:__CTAS_3223039000_1728709960081899

【 使用环境 】生产环境
【 OB or 其他组件 】OMS
【 使用版本 】
【问题描述】OMS在反向增量过程中,发生如题的错误,同步停止,且无法跳过:

且增量同步组件Incr-Sync停止。经检查,源端oceanbase端并没有报错相关的表。
incr-sync的相关日志:
text (6).log (37.9 KB)
text (5).log (16.3 KB)
text (4).log (99.8 KB)
text (5).log (16.3 KB)

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据您提供的信息,OMS在反向增量过程中遇到“table not existed”的错误,具体报错信息为“table not existed, table:__CTAS_3223039000_1728709960081899”,并且这个表在源端OceanBase中并不存在。根据文档库中的信息,这种错误通常与表结构不一致有关 [2]。以下是可能的原因及解决方案:

  1. 表结构不一致:如果源端和目标端的表结构不完全一致,可能会出现数据不一致的情况。特别是当目标端的数据长度小于源端的数据长度时,可能出现数据截断的情况,导致源端和目标端的数据不一致 [2]。虽然这里提到的是数据长度问题,但是表不存在也可能引发类似错误。

  2. 临时表或中间表问题:报错中的表名“__CTAS_3223039000_1728709960081899”看起来像是一个临时表或者是OMS内部使用的中间表。如果这个表在源端不存在,可能是因为某些原因导致OMS未能正确创建或识别这个表。

解决方案:

  • 检查表结构:确保源端和目标端的表结构一致。如果存在不一致的地方,需要调整表结构以保持一致 [2]
  • 重启增量同步组件:如果更改了目标端的唯一索引,需要重启增量同步组件,否则可能存在数据不一致的问题 [2]
  • 联系OMS社区版技术支持:如果上述方法不能解决问题,建议联系OMS社区版的技术支持人员,他们可能能够提供更多具体的指导 [1]

此外,考虑到您提到的表名看起来像是一个临时表或中间表,建议检查OMS的日志文件,特别是ddl_msg.log,搜索对应的表名,看是否有相关的DDL操作记录 [1]。如果确实是因为某些DDL操作未能成功导致的问题,那么可能需要手动创建相应的表或者调整OMS的配置来解决这个问题。

更多信息请查看:

  1. OMS 社区版错误码
  2. 迁移 PostgreSQL 数据库的数据至 OceanBase 社区版
  3. 迁移 TiDB 数据库的数据至 OceanBase 社区版
  4. 创建和更新心跳表
  5. 容灾双活场景的数据迁移
  6. OceanBase 社区版之间的数据迁移
  7. 迁移 MySQL 数据库的数据至 OceanBase 社区版

该表为ob内部表,在黑名单配置过滤这种表吧
{“func”:“fn”,“name”:"_CTAS*"}

过滤掉这类表会对ob和mysql的数据一致性产生影响吗?

会的,create table as select xxx 这种sql产生的表无法同步到目标端,不过滤则会报错

过滤掉OMS生成的临时表或中间表(如__CTAS_3223039000_1728709960081899)是否会对OceanBase和MySQL的数据一致性产生影响,主要取决于这些表在数据迁移过程中的作用。

分析:

  1. 临时表的作用:通常情况下,OMS在进行数据迁移时,会生成一些临时表或中间表来辅助数据的转换和加载。这些表主要用于存储中间状态的数据,确保数据的一致性和完整性。如果这些表被过滤掉,可能会导致数据迁移过程中的一些重要步骤无法正常完成,从而影响数据的一致性。

  2. 数据一致性的影响:如果过滤掉这些临时表或中间表,可能会导致以下几个方面的问题:

    • 数据丢失:某些数据可能未能正确迁移到目标端。
    • 数据不完整:数据迁移过程中的一些转换逻辑未能正确执行,导致数据不完整。
    • 数据错误:由于缺少某些中间状态的数据,可能导致数据在迁移过程中出现错误。

解决方案:

  1. 不要过滤临时表:为了确保数据迁移的一致性和完整性,建议不要过滤掉OMS生成的临时表或中间表。这些表通常是OMS内部处理的一部分,过滤掉它们可能会导致数据迁移失败。

  2. 排查问题:如果确实遇到了“table not existed”的错误,建议按照以下步骤排查问题:

    • 检查OMS日志:查看OMS的日志文件(如ddl_msg.log),了解具体的DDL操作情况,看是否有相关的表创建或删除记录。
    • 检查表结构:确保源端和目标端的表结构一致,特别是临时表或中间表的结构。
    • 重启OMS组件:如果更改了目标端的唯一索引,需要重启增量同步组件,否则可能存在数据不一致的问题。
  3. 联系技术支持:如果上述方法不能解决问题,建议联系OMS的技术支持人员,他们可能能够提供更多具体的指导。

总结:

过滤掉OMS生成的临时表或中间表很可能会对OceanBase和MySQL的数据一致性产生影响。为了确保数据迁移的一致性和完整性,建议不要过滤掉这些表,并按照上述步骤排查和解决问题。如果确实需要过滤某些表,请确保这些表不是OMS内部处理的关键表,并且在过滤之前充分评估其影响。

详情请参考:

  1. DataFlowSource
  2. FULL JOIN
  3. LEFT JOIN
  4. RIGHT JOIN
  5. 用户自定义变量
  6. 列存 FAQ

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

/home/ds/run/组件id/logs/msg下面的文件能否打报发上来看一下,或者
grep __CTAS_3223039000_1728709960081899 connector_source_msg.log

我在该节点上的找了最近这几天的日志,都没有找到相关的日志:

ob端找一下执行sql是否有create table as select … 这样的sql,目前这汇总情况的数据无法同步到目标端,在oms里面只能将其加入黑名单过滤

在OB侧找到了create table as select这样的sql。