AWS DMS同步Oracle到OpenSearch时DML更新字段丢失问题求助
解决AWS DMS Oracle到OpenSearch更新同步时字段置空的问题
核心原因分析
这种更新时非修改字段被置空的情况,通常是因为DMS捕获Oracle增量更新时未获取到所有字段的旧值,导致同步到OpenSearch时用NULL填充未修改字段。Oracle源端的归档日志或补充日志配置不完整是常见诱因。
具体排查与修复步骤
1. 检查并修复Oracle源端补充日志配置
DMS需要Oracle开启主键级或表级补充日志,才能捕获更新操作的完整字段信息。执行以下SQL检查当前配置:
SELECT table_name, supplemental_log_data_pk, supplemental_log_data_all FROM dba_tables WHERE table_name = 'Z_TEST_DMS';
- 若
supplemental_log_data_pk为NO,开启主键补充日志:
ALTER TABLE Z_TEST_DMS ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
- 若上述操作无效,可尝试开启全字段补充日志(注意:会增加日志量,需评估性能影响):
ALTER TABLE Z_TEST_DMS ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
2. 验证DMS任务的表映射规则
登录AWS DMS控制台,进入任务的「Table mappings」配置:
- 确认
Z_TEST_DMS表的映射未使用include-columns仅指定ID_TEST和name_test - 确认未配置
exclude-columns排除其他字段
3. 检查OpenSearch目标端配置
在DMS任务的目标端设置中:
- 确保
Update behavior设置为UPSERT(默认值),而非REPLACE(REPLACE会用更新字段覆盖整条记录,未传递字段会被置空) - 若自定义了
extra connection attributes,确认doc_as_upsert=true(确保未修改字段保留原值)
4. 验证增量更新捕获内容
执行Oracle更新操作后,查看DMS任务的CloudWatch日志,搜索Z_TEST_DMS相关更新记录,确认日志中是否包含所有字段的旧值与新值。若日志仅含修改字段和主键,说明源端补充日志配置未生效。
额外注意事项
- 开启补充日志后,可重启DMS任务的持续复制进程(无需重新全量加载)
- 大型表优先使用主键补充日志,仅在必要时开启全字段补充日志以控制日志体积
内容的提问来源于stack exchange,提问作者Rafael Fialho
相关产品推荐
相关产品推荐

