需求
- 一个需求,需要将一个数据库中的数据迁移到另一不同类型的数据库中,要求使用shell脚本。
- 存储过程还未要求。
一般原理
- 迁移的一般原理是将数据从旧库中导出,再导入新库。
标准
- 数据在移动的前后不能有任何变形。
开始的问题
- 新接触一个数据库,从何处着手?
- 如何导出?如何导入?数据交换问题。
着手思路与问题
- 每种数据库都其自己的客户端工具,及维护工具或导入导出工具。查看其相关工具是否具有数据导入或导出功能并学习用法。例如,sybase ase 数据库的导入导出工具是bcp,而客户端工具是isql,gbase的客户端工具是gccli,而gccli 同时也有导入导出功能。mysql 也有 mysqlsh客户端工具,同时具备导入导出功能。
- 需要查具体数据库的SQL语法说明书,查相关函数以及支持的函数,这步主要确定两个相关数据库的差异。一般要确定sql语法差异,主要是ddl差异,以及数据类型差异,函数差异。这一步可能会出现很多不支持问题,比如,gbase不支持多列索引,unique 索引。需要分析差异,评估能否迁移。
数据交换思路与问题
- 数据交换问题主要是数据格式问题,即以何种格式导出,以何种格式导入。
- 需要查看两个数据库导入导出工具能支持的格式。选择一种能通融的格式,如果没有合适的,需要结合sql进行构造。一般的导入导出中,对于自定义格式,有会有相关配置选项,大概包括字段分隔符,行分隔符,空填充符,null填充符等等。
- 一些坑需要注意,比如,字段顺序问题,特殊字符问题,编码问题,空和null问题,text和二进制字段问题。
工作阶段
- 需要结合两个数据库的差异,评估是否能迁移。主要就是语法,类型,函数等支持问题能否有替换方案,比如mysql的自增特性,gbase的不支持多列索引问题。
- 第二步是建表工作。你得拿到旧库中的所有需要迁移的表的ddl sql,即建表语句,包括索引,触发器,自定义函数等等等。拿到ddl sql 之后,首先做的工作就是进行sql语句转换。最多的工作就是在字段转换上,比如,sybase iq 中的char 可以有4000的长度,但是mysql和gabse中char 最大长度只有255。有些字段是系统关键字,也需要处理,比如在mysql system就是关键字ÿ