首页/开发/代码质量与评审速查/评审检查项:数据迁移与回滚
代码评审64 条

评审检查项:数据迁移与回滚

数据迁移评审:脚本是否可重入、大表变更的锁与时长、新旧代码与数据格式的兼容窗口、回滚方案是否演练过。

数据迁移怎么审

数据迁移评审围绕四件事:脚本是否可重入(失败后重跑安全)、大表变更的锁与耗时是否评估过、新旧代码与新旧数据格式是否有兼容窗口、回滚方案是否真的演练过。不可逆操作(删列、改类型)必须给出暂停点与备份策略,评审时逐项确认。

基本信息

可重入失败后重跑不会产生重复数据或错误状态
锁与时长大表结构的变更与批量更新对线上影响有评估与分批方案
兼容窗口先扩后缩:新旧结构与新旧代码在一段时间内并存
回滚脚本、备份点与预计恢复时长都提前准备好

逐项看什么

  • 脚本是否幂等:重复执行的判断条件写清楚了吗。
  • 分批执行:大表更新是否按主键区间或时间窗口分批,避免长事务。
  • 锁影响:结构变更是否会阻塞写入,是否选择低峰期执行。
  • 兼容窗口:旧代码在新增字段或新表结构下能否继续运行。
  • 双写与校验:迁移期间是否双写并抽样比对一致性。
  • 回滚点:备份位置、恢复方式与预计耗时是否明确。

先扩后缩的步骤

阶段动作可回滚性
扩展新增字段或新表,旧逻辑不受影响可直接回滚代码
双写新旧结构同时写入,读仍走旧结构可停双写
切换读读路径切到新结构,保留旧数据可切回旧读路径
清理确认稳定后删除旧字段与兼容代码需要备份支撑

迁移前的核对项

迁移前的核对项
# 1. 脚本能否重复执行?失败后重跑会怎样
# 2. 预计执行时长与锁等待时间是多少,是否在低峰期
# 3. 新结构下旧代码是否仍可运行
# 4. 一致性如何校验:抽样比对还是全量统计
# 5. 回滚脚本与备份点在哪里,恢复预计多久
不可逆迁移(删列、改类型)必须给出暂停点与备份策略,评审时逐项确认。
在类生产数据量上试跑一次:记录耗时与锁等待,比在会议里估算可靠得多。

易错点

  • 上线才跑全表更新:锁表拖垮线上,中断后数据状态未知。
  • 删旧列一步到位:回滚时数据已不可恢复,只能靠备份重建。
  • 迁移脚本不幂等:重跑产生重复数据,反而需要人工清理。
  • 没有兼容窗口:新旧代码交替期间读写报错,发布被迫中止。

数据来源与参考

  • 《Refactoring Databases》(Ambler & Sadalage,expand-contract 模式)
  • Martin Fowler · Parallel Change
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌