数据迁移

背景

数据迁移工作是系统上线前一个非常重要的工作,也是系统上线后稳定性的一个重要基础。

软件系统一般在使用数年后都会升级换代。其中数据是系统最重要的部分,如何把重要的业务数据从原有的系统迁移到新系统,保证新老系统切换时对外服务的连续性,同时保证老系统运行期间积累的大量珍贵历史数据得以保留,降低对终端用户的影响,是新系统上线的重要步骤。

众齐软件从事供热信息化十几年,截止目前做的大部分数据迁移都是收费系统数据。对供热企业而言,收费数据和资金息息相关,涉及到钱就不是小事,数据迁移好了,应收、实收都弄对了,对企业至关重要。

数据迁移可以说是一项非常精细化的工作,需要我们能够分析出老系统的数据结构及各个字段的含义,通过与客户进行业务上的沟通以及老系统的数据结构的比对分析,来梳理清楚老系统的数据结构。众齐软件的实施顾问会结合新的供热收费系统,弄明白怎么把这些旧有数据映射到新的数据库,使其符合新系统的业务逻辑。

迁移案例

众齐软件已经完成了上百家供热企业的数据迁移工作,帮助他们实现了供热数据和业务的延续性。由于市场早期占有率的原因,众齐软件对国内主流的收费软件厂商的数据库更是拥有丰富的数据迁移经验。

迁移要求

数据迁移是一项重要、工作量大、严谨度高的工作。对于参与数据迁移工作的人有如下要求:

业务

老系统在漫长的生命周期中经过了多次变更,不同阶段的历史数据与不同时期的代码逻辑和业务数据模型不配套,有时还会包含异常数据,这些在老系统内“无害”的数据,却有可能引起新系统的“过敏”反应。数据迁移不是单纯的数据“搬运”,而是按照全新的“图纸”进行数据“重构”。不仅要对老系统中的业务数据进行清洗,剔除异常数据,而且要完成新老系统数据的映射关系和新业务要素的生成规则,并最终用技术手段予以实现。在业务上我们需要尽可能的了解客户以前的业务需求,明白客户旧的系统和我们的业务系统有什么差异。这些差异是我们重点需要注意的地方。对客户业务了解的越是详尽,迁移的时候出问题的概率就越低。

技术

本地环境要有mysql,oracle,sqlserver三个数据库还要有对应的数据库工具,并且会使用这些工具。能够熟练地进行较为复杂sql的编写。

素质

数据迁移过程中需要做很多的业务沟通和数据核对沟通,需要有较好的沟通理解能力。我们在数据迁移的时候面对的不仅仅是怎么迁移能保证数据迁移正确,符合系统业务逻辑,保证系统正常运行的问题,更多时候还有客户数据本身就是错误的情况。数据迁移要求我们得认真细致,但是并不是说我们认真细致了就不会出错了,总会有你考虑不到的地方,人也总会有大意的时候,一旦出错,就需要你想办法来补救,甚至只能是从头再来。这种时候,就更加要求我们要有耐心,有韧性,每个做数据迁移的人,都要有应对各种复杂情况,以及多次反复迁移的心理准备。

迁移方法

基本流程

  数据迁移的基本流程包括需求分析、技术实现和迁移验证3个重要环节。鉴于新老系统设计的差异和复杂性,需要进行迁移验证,比较迁移后新老系统的运行差异,发现不足,通过多次迭代不断优化迁移方案,实现系统切换后业务功能的平稳过渡。

需求分析

为了控制数据迁移的风险,减少系统切换当天迁移的数据量,需要将新系统的数据进行分类,有针对性地进行方案设计。

  1. 基础业务数据。从数据特性来看,这部分数据在新系统业务规则确定以后不需改动,如组织结构、数据字典、业务规则等数据。从迁移角度,可以提前迁移完成并进行反复验证;
  2. 动态业务数据。这些数据是老系统业务运营过程中动态生成的,具有不可预见性和变动快的特点,如客户数据、收费数据、票据数据、变更数据等。历史数据也属于动态业务数据的范畴,由于必须切换时间窗口才能确定,所以无法提前测试,是整个迁移中风险较高的数据。

  在对各类数据进行分类以后,要确定迁移范围,即迁移哪些数据、放弃哪些数据。

迁移场景

  在迁移范围确定后,要分析和确认老系统业务数据在新系统中的表述形式,在迁移策略文档明确描述新老系统各数据字段映射和关联关系。以下列举了6种典型的数据迁移场景。

  1. 单表转换,是数据迁移中最简单和理想的方式,一般存在于功能变化不大的业务模块中,由于新老系统数据表示方法不一致,需要添加必要的映射和逻辑转换;
  2. 单表合并,指原有系统一张表中的多条记录在新系统中合并到一条记录;
  3. 单表拆分,这种类型的迁移与单表合并场景产生的背景类似,可以参考多表合并场景;
  4. 一对多拆分,这种类型是指原有系统中一张表中的一条记录被拆分到新系统中的多张数据库表中,这是比较复杂的场景,一般由新老系统不同模块间重新划分变化引起,容易导致数据一致性问题,需要考虑两条记录的关联约束关系;
  5. 多对一合并,这种类型的迁移可以参考一对多拆分场景;
  6. 完全重构,在该场景下,新系统的业务要素在老系统中不存在,需要根据新系统的业务逻辑重新生成,定义新系统数据的生成规则,其构建的难度和工作量最大。如果新系统中对于数据库设计的约束不强,很容易产生一致性错误。

  以上场景以外,还存在一些老系统中的业务数据没有迁移到新系统中,需要通过技术和业务分析,明确原因,以保证核心业务要素100%覆盖。

技术实现
技术方案

  首先需要分析新老系统的存储形式,对于不同的数据存储形式选择不同的技术方案,一般分为以下2种:

  1. 同一系列的关系数据库。这种情况是数据迁移中最理想的状态。一般厂商对于同系列数据库产品会向下兼容,字段类型、操作语言和数据格式等方面具有一致性,可以减少迁移过程中的转换,降低异常数据出现的几率;
  2. 不同的关系数据库产品。近年来,关系数据库成为信息系统的首选,Oracle、MySQL、SqlServer等产品成为主流,这些产品虽然都采用了结构化查询语言(SQL)标准,但是在具体的字段类型、操作语言和数据格式方面还存在一定的差异。在具体转换时,如果需要使用数据库SQL脚本进行迁移,则要对不同品牌的数据库进行转换。
迁移步骤
  1. 数据清洗,该步骤的目的是为了去除老系统中存在质量问题的异常数据,保证迁移成功;
  2. 数据转换,就是从老系统中提取原始数据,按照需求分析确定的字段映射关系进行转换;
  3. 数据生成,就是迁移的数据按照新系统数据和业务模型要求,生成新系统必须的业务要素数据;
  4. 数据导入,是完成数据迁移的最后一步,目的是把转换完成的数据插入新系统的数据库。
迁移验证

  数据迁移对象是动态变化的数据,在业务流程中各种情况都可能出现,在允许范围内对需求分析和迁移脚本进行充分测试和验证是非常必要的。实际工作中,验证测试的工作量甚至超过了需求分析和迁移脚本编写之和,具体的验证方法如下:

  1. 新老系统数据库核对。这是最基本和快速的方法,通过比对老系统与迁移后新系统的数据条数和业务要素,快速确认迁移中数据清洗、提取、转换、导入等各步骤的执行是否正确。由于数据量非常大,一般采用编写核对脚本进行验证,在迁移后快速执行;
  2. 新老系统界面核对。通过比对和操作新老系统实现相同功能的界面,可以有效验证数据转换的正确性;
  3. 并行运行测试。数据迁移的最大特点是不可预见性。由于数据字段状态和关联组合数量很大,需求分析难免会出现遗漏和差错,此时基于迁移需求书的验证方法很难发现与实际数据之间的差异,因此应采用并行运行的测试方法。

  无论采用何种方法都需要开发数据的转换程序和新老系统数据的核对程序。其核心是对新老系统同一时期产生的业务数据连续比对差异,进行分析。此工作虽然工作量巨大,但却至关重要,效果明显。完备的并行测试不仅能对数据迁移的结果进行验证,而且对新系统功能测试也是重要的补充。

迁移规约

【强制】按需求分析、技术实现、迁移验证的流程进行,过程需有《数据迁移分析》、《数据迁移脚本》文档留存。

【强制】公司本地备份老系统数据库;公司本地部署老系统,供后续的业务分析使用,若不提供老系统,需对系统进行整体截图;有条件情况下获取数据结构文档。

【强制】数据迁移后必须留有并行运行测试时间。

【推荐】涉及到关联查询、迁移的字段,无论在新老库中,都可添加索引,缩短脚本执行时间。