准备工作——————————
1 充分理解需求,理解原始需求,一定要弄清楚为什么要做数据操作。不做数据操作就不能完成需求?然后再其他技术的选择上和数据迁移的选择上进行一个权衡。能不做的尽量不做。千万不要出现因为数据操作而数据操作,埋头写脚本的情况。这样的脚本往往是危险的。
2 对线上遗留数据,持充分的怀疑态度。绝对不要相信,数据是100%由现在的线上运行的程序跑出来的。这些遗留的数据很有可能经过很多其他人的维护,比如数据订正,比如程序bug,比如数据初始化,从而导致存在“脏数据”。特别是运行了1年以上的系统,特别是上线匆忙的系统,特别是上线后bug非常多的系统。一定不要相信这些系统生成数据都是符合要求的数据。
3 充分理解线上数据库的环境,以及做数据操作可能涉及到的表结构和业务。这次数据操作涉及到几张核心表,有多少张表与它们有关联,是否可以忽略不重要的数据,是否存在触发器。数据迁移后,能否保证这次操作后的数据,能够正常的run在系统里面,不会导致核心业务因为“脏数据”流不下去。
细节的工作--------------------
1 大批量数据,重要核心数据在处理前,必须备份。
2 做数据操作前先去摸底,看看需要处理的是多少的数据量。
3 写好check脚本。如果数据操作的时候,需要多步执行,这需要建立检查点,进行check。
4 写脚本时尽量让脚本支持断点重跑。
5 如果存在很多的更新、插入操作,涉及的表又多时,把每一次提交的量放少点。
6 最后能够标示出这次数据操作的数据,具有特殊的标示,有利于检查和回滚操作。
7 如果条件允许,尽量在仿真数据上测试,量要上来,评估出时间。
8 code review 是必须的。
9 在做数据操作时,其他有可能影响数据的业务系统需要评估风险。是否可以同时数据操作,同时业务系统工作,还是需要业务系统停机支持?