数据复制服务 DRS-同步到GaussDB(DWS)的使用建议:多表归一场景注意事项

时间:2023-12-01 09:12:50

多表归一场景注意事项

DRS支持多表对一的数据聚合场景,最佳实践是推荐只选择同步加列DDL,其他大部分DDL同步都可能会因目标表修改而导致其他任务失败或数据不一致的情况发生,常见情况有:同步truncate导致目标数据全部被清空;同步创建索引导致目标表被锁定;同步rename导致其他任务找不到目标表而失败;同步改列导致其他任务因数据类型不兼容而失败。

  • 多表归一高风险操作:
    • DROP、TRUNCATE、RENAME等高危DDL未过滤,导致目标表DROP、TRUNCATE、RENAME。
    • 随意执行DDL,导致同步任务中断未提前识别业务数据冲突,出现同步后数据不一致。
    • 多对一的表不支持Online DDL工具。Online DDL通常会使用临时表和执行rename操作,多对一任务如果未过滤rename会导致目标数据丢失。
  • 多表归一DDL操作技巧:
    • 增加列ADD COLUMN:

      配置DRS任务时过滤ADD COLUMN:先在目标库目标表增加列,再在每个多对一任务的源库源表分别增加列。同步任务会自动兼容源表列少于目标表的场景,因此任务不受影响。顺序相反则会导致任务中断。

      配置DRS任务时未过滤ADD COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。

    • 修改列MODIFY COLUMN:

      配置DRS任务时过滤MODIFY COLUMN:需要确保所有源表已经完成同步无时延并且无业务写入,先在目标库目标表修改列,再在每个多对一任务的源库源表分别修改列。

      配置DRS任务时未过滤MODIFY COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。

    • 删除列DROP COLUMN:

      配置DRS任务时过滤DROP COLUMN:先在每个源库源表删除列,多对一任务的所有源表删除列后,再在目标库表删除列。同步任务会自动兼容源表列少于目标表的场景,因此任务不受影响。顺序相反则会导致任务中断。

      配置DRS任务时未过滤DROP COLUMN:DRS会自动识别只执行一次DDL,不会导致任务失败。

    • DROP、TRUNCATE类操作:

      高危操作建议配置DRS任务时过滤掉,手工执行。如果未选择过滤,多对一任务一张源表的DROP、TRUNCATE操作会同步到目标表执行DROP、TRUNCATE操作,比如多对一任务DROP掉其中一个表,在目标库就把多对一的表DROP掉了,DROP索引、DROP约束是类似的。

support.huaweicloud.com/drs_faq/drs_16_1168.html