写点什么

数据库迁移后的检查清单

  • 2013-05-16
  • 本文字数:2461 字

    阅读完需:约 8 分钟

在实际的应用环境中,随着业务的发展变化,数据库管理员可能会面临不同数据库的迁移,这是一个高风险的过程。资深软件架构师 Amol D. Barsagade 以从 Sybase 到 DB2 的迁移为例,详细总结了数据库迁移的最佳实践,其中分享了迁移后的检查清单。

迁移后的验证和确认检查列表包括:

  • 数据库结构
    • 识别来源 / 目标数据库中所有可用的对象。
    • 针对来源数据库验证和确认目标数据库中的所有对象。
    • 验证和确认是否遵循了规范化的流程。
    • 验证和确认数据库设计。
    • 验证和确认是否遵循了充分的容量规划。
    • 验证和确认一次数据冗余检查。
    • 验证和确认系统和它的环境。
    • 验证和确认数据库增长。
    • 验证和确认安全设计。
    • 验证和确认系统日志的结构。
    • 验证和确认事务日志的结构。
    • 验证和确认并发性控制。
    • 验证和确认目标数据库中的表总数。
    • 验证和确认表名称。
    • 针对来源目标数据库表验证和确认每个表中的列数。
    • 验证和确认每个数据类型映射和大小。
    • 验证和确认用户定义的数据类型(如果存在)。
    • 验证和确认默认值。
    • 验证和确认空值。
    • 验证和确认身份列。
    • 验证和确认主键和外键约束。
    • 验证和确认 FK、触发器和 SP 等对象的依赖关系。
    • 验证和确认目标索引。
  • 存储过程
    • 针对来源数据库 SP 验证和确认 SP 总数。
    • 验证和确认过程名称。
    • 验证和确认是否存在任何用户定义的数据类型。
    • 验证和确认输入 / 输出参数和数据类型。
    • 验证和确认返回值和返回数据类型。
    • 验证和确认事务模式(连锁 / 未连锁 -@@tranchained)。
    • 验证和确认事务 - 开始 / 结束 / 保存 / 提交 / 回调。
    • 验证和确认隔离级别 0/1/2/3。
    • 验证和确认 @@transtate/@@trancount/@@isolation。
    • 验证和确认锁定模式 share/exclusive。
    • 验证和确认服务器 / 所有者命名约定。
    • 验证和确认重新编译选项。
    • 验证和确认业务逻辑。
    • 验证和确认对象依赖关系。
    • 验证和确认 SET NOCOUNT 打开 / 关闭、QUOTED IDENTIFIER 打开 / 关闭等。
    • 验证和确认开放查询 / 链接服务器的正确实现(如果存在)。
    • 验证和确认动态查询语句。
    • 验证和确认 DCL 语句、GRANT 权限等(如果存在)。
    • 验证和确认联结 (join) 和 DML 语句形式的各种输入的正确输出行为。
  • 用户定义的函数
    • 针对来源数据库 UDF 验证和确认 UDF 的总数。
    • 验证和确认 UDF 名称。
    • 验证和确认 I/O 参数传递。
    • 验证和确认输入参数传递顺序。
    • 验证和确认返回数据类型。
    • 验证和确认用户定义的数据类型。
    • 验证和确认对象的依赖关系。
    • 验证和确认业务逻辑。
  • 视图
    • 针对来源数据库视图验证和确认视图总数。
    • 验证和确认视图名称。
    • 验证和确认视图定义的对象和来源数据库是否正确。
  • 索引
    • 针对来源数据库验证和确认索引总数。
    • 验证和确认索引名称。
    • 验证和确认目标数据库的集群化 (PK)/ 非集群化索引。
  • 触发器
    • 验证和确认触发器总数。
    • 验证和确认触发器名称。
    • 验证和确认触发器依赖关系。
    • 验证和确认业务逻辑 / 触发事件。
    • 验证和确认插入 / 更新 / 删除触发器。
    • 验证和确认标准格式 / 最佳实践。
  • 约束
    • 验证和确认约束总数。
    • 验证和确认约束名称。
    • 验证和确认、FK、PK、检查、null 和默认约束。
  • 规则
    • 验证和确认规则总数。
    • 验证和确认规则名称。
    • 验证和确认目标数据库中的规则条件和逻辑。
  • 默认设置
    • 验证和确认默认设置。
  • 游标
    • 验证和确认游标总数。
    • 验证和确认游标名称。
    • 验证和确认 holdlock/noholdlock/shared。
    • 验证和确认只读 / 用于更新的游标。
    • 验证和确认分配和解除分配游标。
    • 验证和确认 @@sqlstatus/@@rowcount。
    • 验证和确认子句的流向。
  • 临时表
    • 验证和确认全局 / 临时表。
  • 内置函数
    • 验证和确认内置函数。
  • 系统变量
    • 验证和确认系统定义的 / 全局变量。
  • 其他
    • 验证和确认 Sybase 的 USE 关键字。
    • 验证和确认 GO 关键字。
    • 验证和确认 while 循环中的 break/continue。
    • 验证和确认用于异常处理的 raiserror/@@error。
    • 验证和确认转换函数。
    • 验证和确认 @@error/@@transtate/@@sqlstatus/@@tranchained/@@textsize/@@rowcount。
  • 数据测试
    • 验证和确认来源和目标数据库中的记录总数。
    • 验证和确认加载的记录是否与来源记录相同。
    • 验证和确认空值和废弃的值。
    • 验证和确认数据。
  • 数据库性能测试
    • 迁移数据库和应用程序后,检查应用程序的总体性能。使用可用的 DB2 实用程序,得出与目标 DB2 服务器等效或更好的应用程序性能。
  • 表的完整性检查
    • 使用 Sybase Central 对来源表进行完整性检查。
    • 使用 IBM Data Studio 对目标表进行完整性检查。
    • 确保来源和目标数据库中的表名称是相同的。
    • 确保表具有相同的列数。
    • 确保每个列的数据类型与来源表中相同,或者兼容来源数据类型。
    • 对于 char 和 varchar 等数据类型,确保大小正确。
    • 对于 decimal 和 numeric 等数据类型,确保比例是正确的。
    • 确保拥有列 null/not null/default values。
    • 确保设置了检查约束,如果它存在。
    • 确保设置了表的主要约束,如果它存在。
    • 确保设置了表的外键约束,如果它存在。
    • 确保所有索引都已正确的顺序创建。
    • 确保表和它的索引已在各自的表空间中创建。
    • 确保表为各个用户设置了正确的访问权限。
    • 确保身份列已正确复制到目标数据库中。
    • 确保它的名称相同。
    • 确保它拥有相同或兼容的数据类型。
    • 确保它以正确的初始值开头。
    • 确保它拥有相同的增量值。
    • 确保它的下一个值与预期的值相同。
  • 序列的完整性检查:
    • 确保序列是使用相同名称创建的。
    • 确保序列拥有相同或兼容的数据类型。
    • 确保开始值和结束值已适当提及(如果存在)。
    • 确保增量值是正确的。
    • 确保与序列关联的触发器已正确创建(如果存在)。
  • 视图的完整性检查:
    • 确保视图名称是正确的。
    • 确保视图拥有相同的列数。
    • 确保视图列数据类型相同或兼容。
    • 确保视图列名称是相同的。
    • 确保视图定义是正确的。
    • 确保存在依赖于视图的表。
    • 确保视图为各个用户提供了相同的访问权限。
  • 主键的完整性检查:
    • 确保数据库中存在表和相应的字段。
    • 确保字段是使用目标数据库中的 not null 属性创建的。
    • 确保主键名称是正确的。
  • 外键的完整性检查:
    • 确保目标数据库中存在基础表和相应的数据类型。
    • 确保目标数据库中存在参考表。
    • 确保外键名称是正确的。
  • 索引的完整性检查:
    • 确保目标数据库中存在该表和相应的字段。
    • 确保字段列表和它们的顺序相同。
    • 确保索引已以正确的顺序创建(升序 / 降序或允许逆向扫描)。

有关更具体的检查清单和数据库迁移的最佳实践,读者可以查看 Amol D. Barsagade 的系列文章

2013-05-16 09:264412
用户头像

发布了 501 篇内容, 共 238.5 次阅读, 收获喜欢 55 次。

关注

评论

发布
暂无评论
发现更多内容

大学计算机专业,什么水平可以进大厂?,解密Android开发常见误区

android 程序员 移动开发

基本功---Litho的使用及原理剖析,10年阿里开发架构师经验分享

android 程序员 移动开发

大众点评App的短视频耗电量优化实战,通宵都要看完这个Android关键技术点

android 程序员 移动开发

在-View-上使用挂起函数,app开发面试题及答案

android 程序员 移动开发

在Android项目中接入Flutter,在Flutter使用安卓布局---草稿

android 程序员 移动开发

[ CloudWeGo 微服务实践 - 番外 ] Go 代码静态检查

baiyutang

golang 11月日更

图解:HTTP 范围请求,助力断点续传,android游戏开发入门

android 程序员 移动开发

备战秋招-阿里巴巴面试真题:-给你一个Demo-你如何快速定位ANR?

android 程序员 移动开发

在中国程序员是青春饭吗?,android开发基础入门教程

android 程序员 移动开发

Android线程思考

轻口味

android 多线程 11月日更

大厂一步到位:Android-基础+Android高级,android物联网开发从入门到实战

android 程序员 移动开发

大牛耗时一年:深入探索-Android-包体积优化,共三万字建议收藏上(1)

android 程序员 移动开发

太强了吧,这居然是19年双非本科开发一年的Android面经总结!开发几年的老程序员自叹不如

android 程序员 移动开发

图文DEMO并茂讲解RecyclerView滑动时回收和复用触发的时机

android 程序员 移动开发

图解:HTTP 范围请求,助力断点续传(1),成功入职腾讯月薪45K

android 程序员 移动开发

大型Bat面试知识总结分享—AMS在Android起到什么作用?简单的分析下Android的源码

android 程序员 移动开发

大神一招搞定:ReentrantReadWriteLock-几道小小数学题就够了。

android 程序员 移动开发

太卷了!程序员面试前刷面经“神似,2021最新Android大厂面试真题大全

android 程序员 移动开发

好不容易撑过了腾讯三面!却因为虚报工资被刷了,挥泪整理面经

android 程序员 移动开发

坊间传言:程序员可以先在大厂镀金,以后去中小厂毫无压力

android 程序员 移动开发

备战阿里面试一年半顺利通过二面,面对突如其来的疫情,让我的阿里三面搁浅ing

android 程序员 移动开发

太难为我这个应届生了,腾讯面试了8轮,终拿下腾讯Android测发岗offer

android 程序员 移动开发

备战金九银十:Android面试10+个知识点总结宝典助你通关

android 程序员 移动开发

事务是如何影响你的系统(二)

卢卡多多

11月日更

大学毕业做音视频开发,月入20K,你呢,kotlin协程面试

android 程序员 移动开发

在线等!阿里、百度一面就惨遭吊打,kotlin语言书籍

android 程序员 移动开发

基于Android的特征X射线谱识别系统的开发,android指纹识别

android 程序员 移动开发

天高任鸟飞,在你还苦闷Android出路时,总有人在系统钻研为高级开发做准备

android 程序员 移动开发

头条Android 岗年薪45W+面经分享(技术 6面,Android开发者值得深入思考的几个问题

android 程序员 移动开发

“神算子”上线!EasyDL时序预测模型零门槛轻松上手

百度大脑

人工智能 百度

大牛耗时一年:深入探索-Android-包体积优化,共三万字建议收藏上

android 程序员 移动开发

数据库迁移后的检查清单_DevOps_崔康_InfoQ精选文章