现在的位置: 首页 > 综合 > 正文

系统转换经验谈

2013年10月13日 ⁄ 综合 ⁄ 共 1612字 ⁄ 字号 评论关闭

最近,公司有个系统,需要更换数据库,操纵系统,不知道为什么要转换,也许是从商业软件转换为免费的开源软件吧,现在都比较流行开源软件。数据库是由SQL Server更换为MySQL,操作系统由Windows Server 2003更换为linux服务器,这种转换并不简单,属于典型的异构平台系统转换,涉及到的主要问题有两个方面:

一个方面是数据库方面的转换,主要包括数据库结构的转换和数据的迁移。

n  数据库结构的转换,看似比较简单,只要是通用的标准SQL就可以,而实际上,从SQL Server的数据库导出的SQL根本不是标准SQL(能在各种主流数据库执行的SQL,这种SQL基本上是跟SQL Server数据库相关的SQL,所以无法直接在MySQL中执行。因此,必须手动修改SQL,将其修改为符合MySQL语法的SQL.如果原来的系统中有存储过程或数据库函数,则可能更麻烦,因为存储过程和数据库函数的语法与特定的数据库系统相关性更强,因此修改的更多。而且,用过MySQL的朋友都知道,免费的数据库,功能上确实稍微不足,比如存储过程支持的功能的自然没有SQL SERVER ,ORACLE等强大,所以,存储过程的转换自然比较麻烦。

在转换的过程中,发现了不少MySQLSQL SERVER之间的区别,再次分享给大家:

²  MySQL中连接字符串不可以用+直接连接,必须用concat函数连接,而SQL SERVER则可以。

²  MySQL中没有nvarchar类型,而SQL SERVER有。但MySQLvarchar类型具有同样的功能。

²  MySQL中的自动增长列用auto_increment关键字实现,而SQL SERVER则用identity函数实现。

²  MySQL中没有getdate函数,而SQL SERVER有。但MySQLcurdate函数实现同样的功能。

²  MySQL在建表时,不支持在default语句中使用函数,但SQL SERVER支持。

²  MySQL procedure的参数名称不能加@,而SQL SERVER可以加。

²  MySQL procedure的参数不能指定默认值。

²  MySQL procedure声明变量时不必要加@在变量前,而SQL SERVER则是必须加@

²  SQL SERVER声明存储过程可以不加括号,即使是多个参数也可以不加括号。

²  MySQL procedure声明时必须加as,SQL SERVER必须加as.

²  如果MySQL procedure中包含多条语句,则需要begin-end关键字。

²  MySQL procedure的每条语句都需要加分号。

²  不能在MySQL procedure中使用return关键字,在函数中则可以使用。

其实这两个数据库之间还有很多区别,再次不再一一列举。希望我的总结可以给大家带来帮助。

n  数据迁移。这个主要是指数据的转换,运行了几年的系统,突然要转换数据库,自然设计到数据迁移,不可能让用户的数据全部丢失吧。但是如何转换呢,同样的数据库系统自然比较简单,比如从SQL ServerSQL Server,可以通过备份-还原机制实现,MYSQLMYSQL可以直接导出带数据的SQL脚本实现,都比较简单。现在是异构数据库,异构环境的数据迁移,确实比较麻烦,曾经做过ETL系统,了解通过ETL完全可以实现我们的这个要求,但ETL是大型的商业软件,一般免费的比较少。在网上找了下,也没有找到合适的工具,所以打算自己写程序实现了。

另一个方面是应用程序的转换,理论说,这里转换的应该不多,如果需要修改的太多,只能说明我们设计系统的时候,系统架构设计上不具备良好的可移植性。但是,这并不代表架构设计得不好,因为有时我们为了高性能,需要牺牲一些其他方面的非功能特性。

一般来说,应用程序需要修改的地方除了数据库连接配置外基本上没有了,除非在你的系统里调用了存储过程,而程序设计又跟存储过程紧耦合。

 

抱歉!评论已关闭.