天天看点

一步一步教你做系统数据迁移

作者:Esgoon

软件系统数据迁移往往是一项极具挑战性的工作,耗时耗力。特别是对于那种较复杂的业务系统或ERP系统,很能考验做数据迁移的人的综合能力。

并且,数据迁移成功通常也决定着新系统的成功上线和顺利运行。本文将结合我实际执行过的数据迁移案例,介绍一些方法和经验。

数据迁移的场景

软件系统都是有生命周期的,当旧的系统无法满足业务需要时,就会有新的系统去替代旧系统。另一方面,当软件研发团队因为技术架构有重大升级,或为了使软件产品更有竞争力从而对原系统进行大版本升级,这些情况下,通常都会面临数据迁移的工作,把原系统积累的业务数据、基础数据等迁移到新系统。

通常,对于这样的系统升级,新系统较之旧系统发生了很大的变化,比如功能模块的增减与调整,数据库表的构成与设计,甚至数据库本身的选型都有改变。所以说这会使得数据迁移工作变得比较困难。

但就数据迁移本身来说,是可以做到分步进行,化繁为简的。对于数据迁移整体工作,大致可以分为数据提取、数据转换和数据迁移后的测试三个步骤。这些步骤各自又包含一些具体的工作内容,下面将分别展开。

一步一步教你做系统数据迁移

数据抽取

新旧系统的调研。既然要进行数据迁移,首先要理清需要迁移哪些旧数据,以及这些旧数据分别对应到新系统哪个数据库表。对新旧系统的准确调研是后续工作顺利展开的基础,这部分工作可以多花一些时间。

对于新系统,因为时间近,而且一般也是经过分析、设计、开发等各个阶段,文档也比较齐全,即使执行数据迁移的人没有全程参与新系统,熟悉起来也更容易一些。对于旧系统,因为文档的丢失,人员交接等因素,熟悉起来相对困难一些,可以把旧系统的数据库和表作为主要目标。

对系统的调研,需要搞清楚这些点:功能模块构成、主要业务流程、各功能模块对应的数据库表、数据表数据之间的关系、新旧系统数据表之间的大致对应关系、旧系统各个表的数据量大小情况等等。

列出数据迁移大纲。对新旧系统调研之后,基于我们的调研结果。可以整理一份数据迁移大纲,大纲旨在确定数据迁移的范围和边界,确保大的问题没有遗漏。后续可以在此基础上进一步细化。具体内容可以是以下图表中的各项。

一步一步教你做系统数据迁移

数据迁移大纲以新系统功能模块为基准,因为我们数据迁移的目的是为了新系统能够顺利运行。然后可列出新旧系统功能模块的对应,以及各自表的对应关系。大多数情况下,新旧系统功能模块以及它们之间的表并非都能找到对应关系。比如,新系统中有的功能模块旧系统中没有,新系统某个模块对应4张数据库表,但在旧系统中只找到2张相关的表。没有关系,在列出大纲时,只需要基于上一步的调研列出已知的对应关系,经过初步分析后把识别出的问题点注明在“备注”一栏。

在列出大纲之后,可以召集新旧系统相关人员对此大纲进行评审。将大纲整体内容以及“备注”栏的问题进行确认并讨论。该评审的意义在于尽可能让熟悉新旧系统的人参与进来,查漏补缺,以尽可能保证后续的数据迁移准确无误。

列出数据字典对应表。迁移大纲评审之后,就可以进一步基于此大纲完善新旧系统数据字典对应表。这是一项细致的工作,主要是找出新系统数据表中每个字段的来源。可以是以下这样一个表格。

一步一步教你做系统数据迁移

同样地,新系统数据表中的每一个字段也并非能找到旧系统表中的对应字段。可能有些字段需要填充默认值,或者由旧表中多个表或字段计算得出,把这些字段统一在“备注”栏注明。

在完成数据字典对应表后,再进行一次评审。评审通过后进行后面的步骤。

数据转换

字段转换。基于上一步得出的数据字典对应表,逐一对旧数据表中的来源字段类型、长度、默认值等进行统一。如新表字段类型或长度不兼容旧表数据,就需要对新表做相应的调整;对于常量值,如状态值,新表中使用0、1、2,但旧表中使用a、b、c,就需要明确转换规则,将旧表数据等价转换为新表对应的数据。还有,对于新表中未找到旧表对应字段的情况,要明确填充默认值或NULL。

数据迁移程序编写。字段转换完成之后,就可以编写数据迁移程序了。通常,较为稳妥的方法是用数据迁移程序生成对应新表的INSERT语句。可以为每个表对应的INSERT语句创建一个SQL脚本文件。对于数据量大的表,还需要考虑分拆成多个SQL脚本文件,方便后续的查看和分批执行。

数据迁移后的测试

SQL脚本生成后,就是最后阶段的测试工作了。生成的INSERT语句脚本可以在开发环境、测试环境数据库执行,然后对新系统一系列的功能和性能测试。

重点关注数据量大的业务数据表,我曾遇到的一个问题是,新系统对一个表的数据是以树状菜单的形式展示,但因为旧系统迁移到该表的数据量很大,造成前端页面响应慢甚至卡死。这种情况下,如果确认数据是无误的,那只能对树状菜单的展现形式进行调整了。

最后,测试通过后,就可以择时上线新系统了,将上面生成的SQL语句在线上数据库执行。

一步一步教你做系统数据迁移

继续阅读