前两天领导给了个活,数据库迁移,原来的系统是用的oracle数据库,如今要改为MySql,当时没多想就接下来了,mysql
原来的系统用的框架式SSI,因而大概想了下须要做调整无非如下几点sql
第一 数据库迁移数据库
第二 应用程序的修改数据结构
下面详细来讲下这个过程oracle
一 数据库迁移app
简单那的来讲就是把oracle数据库里面的全部数据都迁移到MySql,这个能够用MySQLMigration Toolkit工具框架
MySQL发布了一个将数据由SQL Server或Oracle中移植到MySQL中的工具包MySQLMigration Toolkit。这一工具包经过向导介面,轻松将已有数据导入MySQL数据库,能够迅速移植,包括各类数据库中的表结构和视图下降风险,运用了通过证明的移植策略,节约成本,集成化的工具包可大幅提升效率,减小平常维护工做Oracle-to-MySQL。jvm
使用MySQLMigration Toolkit移植后,表的字段类型会有所变化(从Oracle到Mysql):VARCHAR2→VARCHAR,DATE→DATETIME,TIMESTAMP→DATETIME,NUMBER→DECIMAL,INTEGER→DECIMAL(22,0)。函数
在迁移操做MigratedObjects步骤中会报row size too large的错,选择有问题的表,点左下方的Advanced,将varchar(4000)的列类型改成TEXT就行。工具
表的主键、外键不会出问题,核对下便可。表的索引(Oraclede的位图索引)会被转换成BTree索引。同时表和字段的注释信息会丢失。
注意:我迁移的时候,只是把表和数据作了迁移,一些视图、触发器、函数、存储过程之类都是手动作的
下面是具体的操做步骤
1 安装MySQLMigration Toolkit这个就不作具体介绍了,网上一找都是一堆,安装完成后,打开MySQLMigration Toolkit时遇到了错误以下
Migration Toolkit an error occured during the initialzation of the runtimes system.please make sure........;
网上不少的解决方法可是我试了都不行,找了好久总算找到了一个方法,具体操做以下
在MySQLMigrationTool.exe的目录里面新建MySQLMigrationTool.cmd
编辑内容为
[plain] view plaincopy
MySQLMigrationTool.exe -jvm "D:\Program Files (x86)\Java\jdk1.7.0_01\jre\bin\client\jvm.dll"
jvm.dll的用你机器上真实的路径,而后直接用MySQLMigrationTool.cmd启动,问题解决
2 迁移数据库
一、 运行MySQL Migration Toolkit,一路“Next”到“Source Database”,在Database System中选择Oracle Database Server,若是第一次使用会告之要求加载驱动程序ojdbc14.jar。
加载驱动程序以后,界面将变成以下的形式,在其中填写Oracle数据库的链接信息,按“Next”继续。
二、 在Target Database中默认Database System为MySQL Server,在Connection Parameters中填写相应的MySQL数据库的链接信息,按“Next”继续。
3、进行数据库链接测试,测试经过后按“Next”到Source Schemata Selection,点选准备进行数据迁移的Schemata后按“Next”继续。
4、在Object Type Selection,点Detailed selection按钮,在下方左侧列表中选择不进行迁移的表,将其放入右侧列表中,即左侧列表剩余的表都将进行数据迁移。选择好以后按“Next”继续。
5、在Object Mapping的Migration of type Oracle Schema,若是要设置参数,点Set Parameter按钮。若是默认数据库表为UTF8的话,则选择Multilanguage;若是默认数据库表为GBK的话,则须要选择User defined,并在下方填写charset=gbk, collation=gbk_general_ci。Migration of type Oracle Table中要设置参数点Set Parameter按钮。若是默认数据库表为UTF8的话,则选择Data consistency/multilanguage;若是默认数据库表为GBK的话,则须要选择User defined,并在下方填写addAutoincrement=yes, charset=gbk, collation=gbk_general_ci, engine=INNODB。选择好以后按“Next”继续。
6、再到Manual Editing,在这里能够修改建表脚本。因为Oracle与MySQL之间语法规则的差别,一般须要对脚本的数据类型以及默认值进行调整,好比Oracle中一般会对Timestamp类型的数据设置默认值sysdate,但在MySQL中是不能识别的。在Filter中选择Show All Objects,而后在Migrated Objects中选择要修改脚本的表,再点击左下方的Advanced就能够进行脚本编辑了。修改完以后点击右侧Apply Changes按钮保存,按“Next”继续。
7、而后一路“Next”,若是没有提示出错的话,就能够将指定表中的数据导入MySQL了。若是有提示出错信息,则须要返回到Manual Editing处对脚本从新进行修改。
须要补充一点,在导大容量数据特别是CLOB数据时,可能会出现异常:“Packets larger than max_allowed_packet are not allowed”。这是因为MySQL数据库有一个系统参数max_allowed_packet,其默认值为1048576(1M),能够经过以下语句在数据库中查询其值:
show VARIABLES like '%max_allowed_packet%';
修改此参数的方法是在mysql文件夹找到my.ini文件,在my.ini文件[mysqld]中添加一行:
max_allowed_packet=16777216
重启MySQL,这样将能够导入不大于16M的数据了,固然这数值能够根据须要做调整
这里须要注意的是:在第五步操做的时候,参数必定要设置,刚开始没设置,数据结构都能导入成功,可是不少表的数据都没有进去或者少了不少数据,我把igration of type Oracle Schema、Migration of type Oracle Table参数设置成UTF-8后就没有问题,具体缘由不清楚
3 手动的迁移函数、视图、存储过程等,若是有多用户的话也是要迁移的,这里很差作详细说明,具体的操做课到网上找
第二 程序的调整
平台的迁移是比较麻烦的事情,由于咱们的框架是ssi,里面与不少的sql.xml,这个也很差详细说明,
只能列出几个注意点:
1 分页的修改 2 sql中函数的修改 如 to_char等等,
这块不难改就是比较麻烦,须要大量的测试
总结:平台的迁移,不拿 比较麻烦,要细心,最主要的工做是测试