软件测试员12小时惊魂记:数据库迁移出大事故,如何测试?
mhr18 2024-10-07 10:10 26 浏览 0 评论
信息时代,随着用户数量不断增加,业务量不断增长,企业原有数据库不足以有效支撑业务的发展,在此情况下,企业更多的是寻求一款更加稳定的数据库进行替代。
本文以Sybase数据库和Oracle数据库为例。Oracle数据库是目前世界上流行的关系数据库,采用多进程多线索体系结构,而Sybase数据库采用单进程多线索体系结构。两者均采用多线索的模式,该模式能用较少的线索管理大量的用户进程,降低了对系统资源的占用,提高了系统资源的利用率。
多进程较单进程的优势在于,能实现数据库事务的并行处理,提高并发事务处理的响应速度,避免了单服务器结构中很容易造成服务器进程瓶颈,进而避免了因此而引起的单服务器进程死锁。因此,当前企业一般以Oracle数据库替代Sybase数据库。
数据库迁移后,需要测试人员进行有效的验证,以保障系统的可用性,这是一个必不可少的环节。本文以实际项目测试经历为依据,对数据库表结构及迁移数据的测试方法、经验进行了总结,供测试人员使用。
1、数据库表结构测试
数据库迁移普遍会涉及表字段的变换,包括字段的新增、删除或修改等情况,此时,测试需关注以下3个方面:
(1)新增字段测试:关注表结构,检查新库中新增字段的字段类型是否与预先定义一致;检查迁移前后新增的字段在数据库记录中是否有值及其正确性。数据库迁移后,新增字段根据业务需求可能会存在以下两种插入方式:一是系统上线前就通过数据变更导入数据,这种情况下我们需要验证该新增字段在数据库表中是否都已按照业务需求填充完整。二是系统上线后,客户发生实际业务后获取并填充该新增字段,针对这种情况,则建议验证涉及该字段增删改查的系统功能在迁移后能否正常使用。
(2)删除字段测试:关注表结构,检查删除的字段在新库中是否已被删除,确认被删除字段数据是否需要导入新库,还是直接删除,如需导入新库,需确定数据导入规则,然后验证导入后数据的准确性、完整性等。此外,需要选择关联功能进行验证。
(3)修改字段测试:关注表结构,检查新库中新增字段的字段类型是否与预先定义一致。数据库迁移时,部分字段类型、字段内容可能会发生改变。针对字段内容发生变化的情况,也需要验证相关系统功能能否正常使用,以及表中数据的准确性及完整性。针对字段类型,Sybase及Oracle数据库存在一些差别,以Sybase的datetime字段为例,它保留了毫秒级的数据,而Oracle的date类型只保留到秒级别数据,因此测试时需要关注因字段类型变化带来的数据一致性问题。同时,在测试时要极为关注,并与开发确认字段类型的差别是否会对系统功产生影响。下表列出了Sybase及Oracle部分常见字段类型,供测试人员参考:
表1 Sybase及Oracle常见数值类型
2、迁移数据测试
对于进行数据库迁移的数据,要关注以下几点:迁移过程中出现的脏数据,数据的提取方式,迁移前后的数据一致性。
(1)脏数据
脏数据是指源系统中的数据不在给定的范围内、对于实际业务毫无意义、数据格式非法、以及在源系统中存在不规范的编码和含糊的业务逻辑。数据从Sybase数据库中迁移出来时会有一部分脏数据,包含重复数据、无效数据、不可见数据等,首先需要在Sybase数据库中处理脏数据,再导出数据,最后将数据导入Oracle数据库。所以迁移后:
Oracle数据库的数据量=实际迁移数据量=迁移前Sybase数据量-脏数据量。
(2)数据提取方式
数据的提取是为了更好的进行数据一致性对比,考虑到Sybase数据库与Oracle数据库导出数据的规则不同,直接对比各自导出数据文件需要进行大量的格式和文本转换,我们采用直接从两种数据库中查询,然后以统一格式生成文本文档的方式提取数据,并在数据之间以特定的分隔符进行分割。在实际操作中需要针对不同处理字段类型,定义不同的转换函数,例如定义一段Oracle数据库中clob字段转string的函数:
然后通过用Java语句提取到文本文档当中,而Sybase数据库中的字段则可直接转为string然后写入文本文档。
这样就可以获取到格式为TXT的数据提取文本。
(3)基于Beyond Compare工具进行数据对比
Beyond Compare是一种文本比对工具,此工具主要用途是对比两个文件夹或者文件,并将其差异以颜色标出。针对迁移前后数据的一致性测试,我们的基本思路是对于没有发生改变的字段的数据进行全量的文本对比,再采用抽样的方式选中一部分数据进行所有字段的人工对比。前文中数据库结构测试里的表结构在这里就是数据一致性测试的一个基础,确定了需要使用文本对比的字段。在Beyond Compare工具中,选择文本比较,将两份提取出的数据文本分别放入两侧对比框中,将立即对文本进行比较,并标注出有差异的项。一般选择显示差异项来锁定有差异的数据。当两份文本对比无差异时,我们就可以确认数据库迁移前后的数据是完全一致的了。
图1 Beyond Compare比较界面
以上,便是我们本文的主要内容。当然,数据库迁移测试,并不能只从数据库结构、迁移数据两个维度进行验证,我们还需在数据迁移后的环境开展功能验证,通过全量的功能回归,发掘数据迁移后的缺陷。此外,为了保障系统上线后的稳定性,我们需要开展性能测试,这些我们将在以后再进行分享,希望上述内容能对开展数据库迁移测试的朋友提供帮助!
请关注+私信回复:“测试”就可以免费拿到软件测试学习资料
相关推荐
- 甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入
-
IT之家7月1日消息,根据甲骨文Oracle当地时间6月30日向美国证券交易委员会(SEC)递交的FORM8-K文件,该企业在始于2025年6月1日的202...
- 甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云
-
IT之家6月23日消息,Oracle甲骨文创始人、董事长兼首席技术官LarryEllison(拉里埃里森)在本月早些时候的2025财年第四财季和全财年财报电话会议上表示,Oracle...
- Spring Boot 自定义数据源设置,这些坑你踩过吗?
-
你在使用SpringBoot进行后端开发的过程中,是不是也遇到过这样的问题:项目上线后,数据库连接总是不稳定,偶尔还会出现数据读取缓慢的情况,严重影响了用户体验。经过排查,发现很大一部分原因竟然...
- 一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)
-
今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...
- 低代码建模平台-数据挖掘平台(低代码平台的实现方式)
-
现在来看一下数据连接。·这里是管理数据连接的空间,点击这里可以新增一个数据连接。·输入连接名称,然后输入url,是通过gdbc的方式去连接的数据库,目前是支持mysql、oracle以及国产数据库达梦...
- navicat 17.2.7连接oracle数据库提示加载oracle库失败
-
系统:macOS15.5navicat版本:navicatpremiumlite17.2.7连接oracle测试报错:加载oracle库失败【解决办法】:放达里面找到程序,显示简介里面勾选“使...
- 开源“Windows”ReactOS更新:支持全屏应用
-
IT之家6月17日消息,ReactOS团队昨日(6月16日)在X平台发布系列推文,公布了该系统的最新进展,包括升级Explorer组件,支持全屏应用,从Wine项目引入了...
- SSL 推出采用全模拟内置混音技术的模拟调音台Oracle
-
英国调音台传奇品牌SolidStateLogic宣布推出Oracle——一款采用全模拟内置混音技术的调音台,在紧凑的AWS尺寸机箱内集成了大型调音台的功能。该调音台提供24输入和...
- 47道网络工程师常见面试题,看看有没有你不会的!
-
你们好,我的网工朋友。网络工程师面试的时候,都会被问到什么?这个问题其实很泛,一般来说,你肯定要先看明白岗位需求写的是什么。基本上都是围绕公司需要的业务去问的。但不可否认的是,那些最基础的概念,多少也...
- 汉得信息:发布EBS系统安装启用JWS的高效解决方案
-
e公司讯,从汉得信息获悉,近日,微软官方宣布InternetExplorer桌面应用程序将于2022年6月15日正式停用。目前大部分客户都是使用IE浏览器打开EBS的Form界面,IE停用后,只能使...
- 36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!
-
前言最近在逛github,看看能不能搜罗到一些对自己有帮助的开源软件。不经意间看到一个高star的java开源项目:jeecg-boot。进入在线演示版一看,感叹实在是太牛了!此开源项目不管是给来学习...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 手把手教你在嵌入式设备中使用SQLite3
-
摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数...
- JAVA语言基础(java语言基础知识)
-
一、计算机的基本概念什么是计算机?计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行、自动高速处理海量数据的现代化智能电子设备。由硬件和软件组成、没有安装过任何软件的计算机称...
- 再见 Navicat!一款开源的 Web 数据库管理工具!
-
大家好,我是Java陈序员。在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件,基...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入
- 甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云
- Spring Boot 自定义数据源设置,这些坑你踩过吗?
- 一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)
- 低代码建模平台-数据挖掘平台(低代码平台的实现方式)
- navicat 17.2.7连接oracle数据库提示加载oracle库失败
- 开源“Windows”ReactOS更新:支持全屏应用
- SSL 推出采用全模拟内置混音技术的模拟调音台Oracle
- 47道网络工程师常见面试题,看看有没有你不会的!
- 汉得信息:发布EBS系统安装启用JWS的高效解决方案
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)