Flink CDC里Oracle cdc 有没有碰到这样的错误
io.debezium.DebeziumException: Online REDO LOG files or archive log files do not contain the offset scn 22210454818. Please perform a new snapshot
让oracle dba查了这个scn的日志生成时间, 是去年11月份的, 可是我这个同步任务上个月才开始运行,怎么回事?会不会是checkpoint异常?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您在使用Flink CDC进行Oracle数据同步时,遇到了以下错误:
io.debezium.DebeziumException: Online REDO LOG files or archive log files do not contain the offset scn 22210454818. Please perform a new snapshot
根据错误信息,Debezium无法找到指定的SCN(System Change Number)对应的日志文件。您提到该SCN的日志生成时间是去年11月份,而您的同步任务上个月才开始运行。这种情况可能与以下几个因素有关:
Oracle的在线REDO日志和归档日志有固定的保留时间,超过保留时间的日志会被清理。您可以通过以下SQL命令检查当前的日志保留策略:
-- 查询当前的归档日志保留时间
SELECT * FROM v$parameter WHERE name = 'log_archive_dest_1';
-- 查询当前的SCN
SELECT CURRENT_SCN FROM V$DATABASE;
如果日志保留时间较短(例如仅保留几天),而您的任务需要从较早的SCN开始读取,则需要调整日志保留策略。建议将归档日志保留时间延长至覆盖任务的整个运行周期。
Flink作业的Checkpoint会记录Debezium的偏移量(Offset SCN)。如果Checkpoint记录的SCN已经过期,任务重启时会尝试从一个无效的SCN位置恢复。您可以通过以下步骤确认Checkpoint状态:
# 删除Flink的Checkpoint目录
rm -rf /path/to/flink/checkpoints/*
如果上述方法无法解决问题,建议执行一个新的快照(Snapshot)。快照会从当前数据库的状态开始同步,而不是依赖于历史日志。您可以通过以下方式触发新的快照:
debezium.snapshot.mode
设置为initial
,以强制执行初始快照。debezium.snapshot.mode=initial
__debezium-offsets
),以清除旧的偏移量记录。# 删除Kafka中的偏移量主题
kafka-topics.sh --delete --topic __debezium-offsets --bootstrap-server localhost:9092
为了避免类似问题再次发生,建议在任务启动时明确指定一个有效的SCN。您可以通过以下SQL命令获取当前的SCN,并将其配置到Debezium的启动参数中:
-- 获取当前SCN
SELECT CURRENT_SCN FROM V$DATABASE;
然后,在Debezium配置中指定snapshot.scn
参数:
debezium.snapshot.scn=<current_scn>
debezium.snapshot.mode=initial
或清理偏移量存储来触发。debezium.snapshot.scn
参数。initial
模式执行初始快照,以确保数据一致性。通过以上步骤,您可以有效解决当前问题并避免类似问题再次发生。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。