如何解决Debezium连接Oracle时Expression evaluation is not supported错误
Debezium Oracle连接器表达式默认值报错解决方案
错误根因
该报错是Debezium Oracle连接器的元数据解析逻辑限制导致的,目前连接器仅支持解析固定常量类的列默认值,不支持运行时动态计算的表达式类默认值:
- Identity列底层由Oracle自动创建隐藏序列,通过
序列.nextval动态生成值,属于表达式类默认值 SYSDATE是运行时计算的时间函数,同样不属于固定常量默认值
可行绕过方案
- 配置连接器忽略无法解析的默认值
在连接器配置项中新增两个参数:
配置后连接器碰到无法解析的表达式默认值时只会输出警告日志,不会中断同步任务,也不会影响后续增量同步的数据准确性——因为Debezium是从Oracle的redo/undo日志中读取已经写入完成的实际字段值,默认值解析仅用于启动阶段的表元数据建模,忽略后仅不会自动补全快照阶段新增行的默认值,无其他业务侧副作用。default.value.expression.handling.mode=ignore oracle.unsupported.type.handling=warn - 排除特殊列同步
若业务不需要同步这两个特殊列,可通过column.exclude.list配置规则排除对应列,示例:
连接器会直接跳过这些列的元数据解析和数据同步,不会触发报错。column.exclude.list=MYUSER.MY_TABLE.ID,MYUSER.MY_TABLE.CREATE_TIME - 升级连接器版本
Debezium 2.4及以上稳定版本针对Oracle Identity列、SYSDATE类动态默认值的兼容性做了专项优化,可尝试升级版本复现验证,部分场景下可直接解决该问题。
内容的提问来源于stack exchange,提问作者Patrick Szalapski
相关产品推荐
相关产品推荐

