迁移Oracle数据库至新服务器后,如何恢复AWS DMS CDC任务?
问题解答
关于能否借助新库开放事务后的SCN恢复AWS DMS CDC任务
不能直接用新库开放用户事务后的SCN恢复CDC任务,核心原因如下:
- Datapump导出的是导出时刻的一致性SCN,新库导入完成后,自身的SCN序列完全独立于原库,和DMS原任务追踪的原库SCN无关联。
- 新库开放事务后产生的SCN仅属于新库本地,而DMS CDC任务原本依赖的是原库的归档/redo日志,两者的SCN体系无法匹配,无法通过新库的后续SCN衔接原任务的CDC追踪。
目标库记录缺失的原因分析
结合你的操作流程,记录缺失大概率源于以下几点:
- DMS与Datapump的同步时差:虽然你锁定了原库用户并停止事务,但从锁定用户到执行Datapump导出的间隙,可能存在DMS任务尚未同步完成的最后一批原库事务。
- CDC起始SCN配置错误:恢复DMS任务时,若指定了新库的SCN或原库导出前的错误SCN,会导致中间段的事务被遗漏。
- 原库归档日志未同步:若DMS依赖原库归档日志追补CDC,而迁移后新库无法访问原库导出时刻后的归档日志,会造成部分事务无法被捕获。
修复方案
- 重新对齐CDC起始点
- 找到原库锁定用户后的最终一致性SCN(锁定用户后立即执行
SELECT CURRENT_SCN FROM V$DATABASE;获取)。 - 确认新库导入完成后的SCN(同样执行
SELECT CURRENT_SCN FROM V$DATABASE;),将DMS CDC任务的起始SCN设置为原库的最终一致性SCN,同时确保新库可访问原库该SCN之后的所有归档日志(若原库仍可访问)。 - 若原库已无法访问,直接以新库导入完成后的SCN作为CDC起始点,再手动对比原库导出前的数据集,补全缺失记录。
- 找到原库锁定用户后的最终一致性SCN(锁定用户后立即执行
- 校验并补全数据
- 用DMS自带的数据校验功能,或自定义SQL对比新源库与目标库的关键表数据。对于带主键的表,可快速定位差异:
SELECT pk_column FROM new_source_table MINUS SELECT pk_column FROM target_table; - 根据校验结果手动补入缺失记录。
- 用DMS自带的数据校验功能,或自定义SQL对比新源库与目标库的关键表数据。对于带主键的表,可快速定位差异:
- 规范后续迁移流程
- 下次迁移前,先暂停DMS CDC任务,等待任务完全追上原库最新事务(确认任务状态为Idle或Ready)。
- 执行
ALTER SYSTEM FLUSH REDO;确保未写入的redo日志落盘,再获取当前SCN后执行Datapump导出。 - 新库导入完成后,直接将DMS CDC任务的起始SCN设置为导出时刻的SCN,再启动任务。
内容的提问来源于stack exchange,提问作者Sanjay Dharmadhikari
相关产品推荐
相关产品推荐

