异构数据库的迁移

 
 
 
现在市场上数据库种类众多,随着竞争加剧,数据库间的迁移也就不可避免。异构数据库是指具有不同数据模型、不同体系结构、不同厂家研制的数据库,而迁移是指数据库之间无损、接近等价移植数据库。下面以排名前三位:Oracle 、Microsoft SQL Server、MySql来简单描述异构数据库迁移中的一些原则、要点以及迁移工具,从而起到抛砖引玉的作用。 
 
一、数据库迁移的原因
1、成本与维保
成本是数据库迁移的一个根本性因素,维保亦与成本相关。因为除了开始的一次性购买费用外,后续还需连续支付维保费用。从总体减少成本出发,往往会发生数据库迁移。
2、扩展需要
应用的初始设计架构没有充分考虑到发展以后的规模,在用户和数据几何倍数上升后导致系统性能急剧下降,必须对数据库系统进行扩展。
3、其它
各个DB的工作原理存在差异,管理、整合不同的数据库需要不同的技能和增加额外工作量。为了统一平台,方便开发和管理维护,有时就会涉及到异构数据库的迁移。此外由于构建数据仓库需要单一的数据库等原因,也需要迁移异构数据库。
 
二、 如何迁移异构数据库? 
至于如何迁移异构数据库,首先想到的是利用迁移工具。
ETL是数据抽取(Extract)、清洗(Cleaning)、转换(Transform)、装载(Load)的过程,自然其工具可作异构数据库迁移之用。如Informatica、Datastage、OWB、微软DTS等。其使用比较方便,不过由于价格方面的因素,对于非BI和数据仓库的数据迁移意义不大。 
其实有更好的选择。为了商业利益,各厂家推出了适应别家数据库迁移到自家数据库的迁移工具,如Microsoft的SQL Server Migration Assistant,该工具专用性较强,简便容易上手,质量也是有保证的。此外Oracle的Oracle SQL Developer,MySQL 的Workbench也都集成了Microsoft SQL Server等数据库的迁移工具。以上工具均可免费获取,最多是注册个账号,强烈推荐使用。
其它工具还有很多,如Oracle的migration benchmark,DB2的MTK,SQL  SERVER的DTS和intergrate service。 这些工具使用技能方面要求更高些、操作步骤也更繁琐些。另外每个数据库几乎都有文本的导入导出工具,如SQL Server的bcp,bulk insert,Oracle的sqlldr, MySql的select into txt,DB2的load,imp/exp等,一般都是通过内部的API实现,在速度上具有明显优势。这些工具对使用者的数据库知识要求较高(如表结构、约束、索引维护、日志模式等),适合大中型和较有难度的数据迁移。
当然开发人员可以编写专用程序来完成迁移,其最大优点是使用方式灵活,根据实际需要灵活修改,但毫无疑问这是最昂贵的途径。 
 
 三、 使用要点
Oracle SQL Developer,SQL Server Migration Assistant,MySQL Workbench是不同厂家的产品,其迁移途径非常接近,包括以下步骤:
1、源、目标数据库的配置;
2、转换规则的配置;
3、捕获源数据库元信息并转换成目标数据库的元信息,实现Schema的转换;
4、生成目标数据库的创建脚本;
5、将源数据库的数据迁移至目标数据库。其中迁移工具自身给出了缺省的转换规则,一般较为充分考虑到异构数据库间的差异,也可根据需要来调整。
我有次从Oracle转Sql Server,应用不支持datetime2类型,于是在转换规则的配置中把datetime2全修改为datetime类型后再进行迁移,这远比迁移后再编写Sql脚本转换便捷得多,后者可能还会遇到约束等障碍。
Oracle SQL Developer通过JDBC和数据库进行通信,默认情况下集成Oracle和Access ,加载JDBC驱动程序就可集成第三方数据库。而SQL Server Migration Assistant则更为专用,如源数据库是Oracle就下载Oracle版本,MySql就下载MySql版本,甚至同时包含32位、64位的版本,在迁移过程中可生成详尽的评估、数据迁移报告。MySQL Workbench支持迁移的数据库管理系统包括微软的SQL Server,以及其他支持ODBC的数据库,如PostgreSQL等。
具体操作方法可查阅帮助文档或相关资料。
由于异构数据库的差异,利用以上工具并不能保证100%迁移成功,对于失败的情况,应找出其原因,结合前述的方法手工来完成转换。
 
四、另类通用方法
利用Sybase Powerdesigner的逆向工程功能,逆向出源数据库的物理模型,然后Change Current DBMS修改为目标数据库类型,再生成目标数据库的物理模型,最后根据物理模型生成目标数据库的创建脚本。该方法比较通用,但不足之处是要根据目标数据库的语法特点来调整SQL脚本。
例如根据Sql Server数据库生成创建MySQL数据库的脚本,以下为Sql脚本的修改要点:
将其中的dbo.全部替换成空
将create user这样的语句删除掉。
如果有些字符在MySQL中是关键字,那么必须使用“`”(键盘上数字1左边那个符合)符合框起来。
加上MySQL所需要的存储引擎比如每个建表语句后跟上:
ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
将生成的脚本在MySQL客户端运行即可创建数据库。
最后是数据导入,量不大的话仍可生成Insert脚本,也可通过其它导入导出工具来完成。
 
五、其它注意事项
1.应用对于新数据库类型的排异性必须在迁移之前就要考虑周全,并进行充分的适应性测试 。
 2. 如果应用为7*24小时不间断运行,则需要反复试验以取得最佳策略使得停机时间最短。
3. 制定应急预案,一旦迁移失败能回滚至旧的应用系统。

4. 容灾、备份恢复策略的迁移。

 

作者:上海秀群信息技术有限公司项目总监 黄晓东
 












© 2010-2012 Cherish Information Technology. All rights reserved.
沪ICP备05009269号
电 话:021-5657-5270    邮 箱:service@cherish.com.cn    地 址:上海市宝山区长江南路180号长江软件园C栋110-117室

友情链接:

 乐学院    复旦商业知识在线    每日乐英语    创意发声    中国彩色宝石网     圆周率品牌机构    
唐山松下产业机器    欧莱雅(中国)     上海市互联网经济咨询中心    中电投电力工程有限公司     文汇网    
上海教育新闻网    上海市软件测评中心