• 0
  • 1
分享
  • 数据库迁移——表结构及迁移数据测试
  • 恬恬圈 2020-01-03 14:39:40 字数 2229 阅读 4070 收藏 1

信息时代,随着用户数量不断增加,业务量不断增长,企业原有数据库不足以有效支撑业务的发展,在此情况下,企业更多的是寻求一款更加稳定的数据库进行替代。本文以Sybase数据库和Oracle数据库为例。

Oracle数据库是目前世界上流行的关系数据库,采用多进程多线索体系结构,而Sybase数据库采用单进程多线索体系结构。两者均采用多线索的模式,该模式能用较少的线索管理大量的用户进程,降低了对系统资源的占用,提高了系统资源的利用率。多进程较单进程的优势在于,能实现数据库事务的并行处理,提高并发事务处理的响应速度,避免了单服务器结构中很容易造成服务器进程瓶颈,进而避免了因此而引起的单服务器进程死锁。因此,当前企业一般以Oracle数据库替代Sybase数据库。

数据库迁移后,需要测试人员进行有效的验证,以保障系统的可用性,这是一个必不可少的环节。本文以实际项目测试经历为依据,对数据库表结构及迁移数据的测试方法、经验进行了总结,供测试人员使用。

1、数据库表结构测试

数据库迁移普遍会涉及表字段的变换,包括字段的新增、删除或修改等情况,此时,测试需关注以下3个方面:

(1)新增字段测试:关注表结构,检查新库中新增字段的字段类型是否与预先定义一致;检查迁移前后新增的字段在数据库记录中是否有值及其正确性。数据库迁移后,新增字段根据业务需求可能会存在以下两种插入方式:一是系统上线前就通过数据变更导入数据,这种情况下我们需要验证该新增字段在数据库表中是否都已按照业务需求填充完整。二是系统上线后,客户发生实际业务后获取并填充该新增字段,针对这种情况,则建议验证涉及该字段增删改查的系统功能在迁移后能否正常使用。

(2)删除字段测试:关注表结构,检查删除的字段在新库中是否已被删除,确认被删除字段数据是否需要导入新库,还是直接删除,如需导入新库,需确定数据导入规则,然后验证导入后数据的准确性、完整性等。此外,需要选择关联功能进行验证。

(3)修改字段测试:关注表结构,检查新库中新增字段的字段类型是否与预先定义一致。数据库迁移时,部分字段类型、字段内容可能会发生改变。针对字段内容发生变化的情况,也需要验证相关系统功能能否正常使用,以及表中数据的准确性及完整性。针对字段类型,Sybase及Oracle数据库存在一些差别,以Sybase的datetime字段为例,它保留了毫秒级的数据,而Oracle的date类型只保留到秒级别数据,因此测试时需要关注因字段类型变化带来的数据一致性问题。同时,在测试时要极为关注,并与开发确认字段类型的差别是否会对系统功产生影响。下表列出了Sybase及Oracle部分常见字段类型,供测试人员参考:

表1 Sybase及Oracle常见数值类型

15243603_201912311101271LvXo.png 

2、迁移数据测试

对于进行数据库迁移的数据,要关注以下几点:迁移过程中出现的脏数据,数据的提取方式,迁移前后的数据一致性。

(1)脏数据

脏数据是指源系统中的数据不在给定的范围内、对于实际业务毫无意义、数据格式非法、以及在源系统中存在不规范的编码和含糊的业务逻辑。数据从Sybase数据库中迁移出来时会有一部分脏数据,包含重复数据、无效数据、不可见数据等,首先需要在Sybase数据库中处理脏数据,再导出数据,最后将数据导入Oracle数据库。所以迁移后:

Oracle数据库的数据量=实际迁移数据量=迁移前Sybase数据量-脏数据量。

(2)数据提取方式

数据的提取是为了更好的进行数据一致性对比,考虑到Sybase数据库与Oracle数据库导出数据的规则不同,直接对比各自导出数据文件需要进行大量的格式和文本转换,我们采用直接从两种数据库中查询,然后以统一格式生成文本文档的方式提取数据,并在数据之间以特定的分隔符进行分割。在实际操作中需要针对不同处理字段类型,定义不同的转换函数,例如定义一段Oracle数据库中clob字段转string的函数:

然后通过用Java语句提取到文本文档当中,而Sybase数据库中的字段则可直接转为string然后写入文本文档。

这样就可以获取到格式为TXT的数据提取文本。

(3)基于Beyond Compare工具进行数据对比

Beyond Compare是一种文本比对工具,此工具主要用途是对比两个文件夹或者文件,并将其差异以颜色标出。针对迁移前后数据的一致性测试,我们的基本思路是对于没有发生改变的字段的数据进行全量的文本对比,再采用抽样的方式选中一部分数据进行所有字段的人工对比。前文中数据库结构测试里的表结构在这里就是数据一致性测试的一个基础,确定了需要使用文本对比的字段。在Beyond Compare工具中,选择文本比较,将两份提取出的数据文本分别放入两侧对比框中,将立即对文本进行比较,并标注出有差异的项。一般选择显示差异项来锁定有差异的数据。当两份文本对比无差异时,我们就可以确认数据库迁移前后的数据是完全一致的了。

15243603_201912311101272i9SF.png

图1 Beyond Compare比较界面

以上,便是我们本文的主要内容。当然,数据库迁移测试,并不能只从数据库结构、迁移数据两个维度进行验证,我们还需在数据迁移后的环境开展功能验证,通过全量的功能回归,发掘数据迁移后的缺陷。此外,为了保障系统上线后的稳定性,我们需要开展性能测试,这些我们将在以后再进行分享,希望上述内容能对开展数据库迁移测试的朋友提供帮助!


 本文内容不用于商业目的,如涉及知识产权问题,请权利人联系我们将立即处理。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • IT之家 9 月 13 日消息,苹果今日发布了 iOS 16 正式版更新,具体版本号为 (20A362),这是专为 iPhone 设计的最新操作系统。与 Apple 的所有软件更新一样,iOS 16 可以免费下载。 iOS 16 可在 iPhone 8 及更高版本上使用,苹果今年不再支持 iPhone 6s、iPhone 7 / Plus 和初代 iPhone SE。iOS 16 通常伴随着 iPadOS 16,但苹果今年仍在开发 iPadOS 16 功能,例如台前调度,因此 iPadOS 16 已被推迟,预计 iPadOS 16.1 更新将在 10 月份与 iOS 16.1 一起发布。苹果 ...
            0 0 1274
            分享
          • 1. 唯一索引比普通索引快吗,为什么唯一索引不一定比普通索引快, 还可能慢。查询时, 在未使用 limit 1 的情况下,在匹配到一条数据后,唯一索引即返回,普通索引会继续匹配下一条数据, 发现不匹配后返回。如此看来唯一索引少了一次匹配,但实际上这个消耗微乎其微。更新时,这个情况就比较复杂了。普通索引将记录放到 change buffer 中语句就执行完毕了。而对唯一索引而言,它必须要校验唯一性,因此,必须将数据页读入内存确定没有冲突,然后才能继续操作。对于写多读少的情况,普通索引利用 change buffer 有效减少了对磁盘的访问次数,因此普通索引性能要高于唯一索引。2. My...
            13 14 949
            分享
          • 读者提问:『接口测试准备测试数据,有哪些推荐的操作方法 ?』阿常回答:接口测试准备测试数据,通常有如下 4 种操作方法:1、基于 GUI 操作生成测试数据很少直接使用基于 GUI 操作生成的测试数据。2、通过 API 调用生成测试数据目前主流的测试数据生成方法。为了规避在创建测试数据时过于在乎实现细节的问题,我们可以把调用 API 生成测试数据的过程封装成测试数据准备函数。3、通过数据库操作生成测试数据目前主流的测试数据生成方法。将创建数据需要用到的 SQL 语句封装成测试数据准备函数,当我们需要创建数据时,直接调用这些封装好的函数。4、综合运用 API 和数据库的方式生成测试数据先...
            0 0 1942
            分享
          •   Incase 是一家以前专注于为苹果市场提供产品的公司,现在它将重新推出微软配件产品组合。微软公司将只为新设备冠名,因此我们可能会看到在质量和可靠性方面有些不同的做法。  Incase 和微软在今年早些时候公开了新的合作关系。现在,这家设计公司宣布将于 2024 年第四季度正式推出新产品,提供用户多年来熟知(并可能喜爱)的"知名"个人电脑配件的全新组合。  官方新闻稿称,Incase 母公司 Onward Brands 已获得微软全部配件组合的许可权和相关知识产权。该公司将自行生产所需的配件,以Incase 品牌销售最终产品,并在外壳上印上"Designed ...
            0 0 310
            分享
          •   互联网的发展催生了大数据行业的诞生和发展。大数据平台和大数据应用成为了各家排兵布阵的重要之地。那么,从测试的视角来看,大数据平台和应用的测试,我们应该关注哪些点呢?  换个姿势看问题。今天我们从问题域的角度来聊一聊。  什么是问题域?  指的是问题的范文,问题之间存在的关系和可能逻辑空间。  比如,在测试过程中我们面临的“xx接口是否正常?”这样的问题,我们可以将它归纳到某个与之有关的问题域中(比如功能测试)。  在我们测试的时候,经常会先入为主的提出:功能测试、性能测试、压力测试等等分类。然后在对应的测试类型中设置问题,观察软件或系统的反应,从而解决我们的问题,并依据我们的期望判定问题答...
            0 0 859
            分享
      • 51testing软件测试圈微信