web程序迁移,数据库迁移,原来的系统是用的oracle数据库,现在要改成MySql,当时没多想就接下来了,
原来的系统用的框架式SSI,于是大概想了下需要作调整无非以下几点
第一 数据库迁移
第二 应用程序的修改
下面详细来说下这个过程
一 数据库迁移
简单那的来说就是把oracle数据库里面的所有数据都迁移到MySql,这个可以用MySQLMigration Toolkit工具
MySQL发布了一个将数据由SQL Server或Oracle中移植到MySQL中的工具包MySQLMigration Toolkit。这一工具包通过向导介面,轻松将已有数据导入MySQL数据库,可以迅速移植,包括各种数据库中的表结构和视图降低风险,运用了经过证实的移植策略,节约成本,集成化的工具包可大幅提高效率,减少日常维护工作Oracle-to-MySQL。
使用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
编辑内容为
- MySQLMigrationTool.exe-jvm"D:\ProgramFiles(x86)\Java\jdk1.7.0_01\jre\bin\client\jvm.dll"
jvm.dll的用你机器上真实的路径,然后直接用MySQLMigrationTool.cmd启动,问题解决
2 迁移数据库
1、运行MySQL Migration Toolkit,一路“Next”到“Source Database”,在Database System中选择Oracle Database Server,如果第一次使用会告之要求加载驱动程序ojdbc14.jar。
加载驱动程序之后,界面将变成如下的形式,在其中填写Oracle数据库的连接信息,按“Next”继续。
2、在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等等,
这块不难改就是比较麻烦,需要大量的测试
总结:平台的迁移,不拿 比较麻烦,要细心,最主要的工作是测试
MySQL Migration Toolkit使用
MySQL Migration Toolkit是MySQL出的数据迁移工具(适用于MySQL5.0或以上),使用并不复杂,支持Oracle,Microsoft SQL Server,Microsoft Access,Sybase,MaxDB到MySQL之间的转换。以下实例是Oracle到MySQL的。
1.安装jdk1.6
MySQL Migration Toolkit需要jre1.5.0.8以上的支持。
2.运行MySQL Migration Toolkit
点击“开始”-“程序”-“MySQL”-“MySQL Migration Toolkit”,运行MySQL Migration Toolkit。点击“Next”
3.选择“Direct Migration”,点击“Next”
4.在“Source Database”中填写你要转换的源数据库的一些参数
“Database System”为数据库系统类型;这里选Oracle
“Driver”为使用的驱动程序;
“Service”为源数据库的服务名;
“Hostname”为源数据库文件的ip和port;
“Uesrname”为源数据库的使用用户名;
“Password”为源数据库使用用户密码。
选择Oracle的Driver时,可能需要加载Oracle JDBC驱动(ojdbc14.jar)。
其它数据库可能需要手工写JDBC URL,根据需要自己写吧。
5.在“Target Database”中填写你转换后的数据库类型的一些参数
“Database System”数据库系统是MySQL Server;
“Hostname”为主机名称,“Port”为端口;
“Username”为数据库使用者名称;
“Password”为数据库使用用户密码。
这里需要手工写JDBC URL链接:点击最下面的Advanced键,出现一个方框,提示输入"Connection String:"jdbc:mysql://IP:PORT/?user=USER&password=PASSWD&useServerPrepStmts=false&characterEncoding=gbk
IP、PORT、USER、PASSWD根据MySQL服务器的ip,数据库用户名,密码填写。
6.两个数据库的参数都填写完成后,下一步就是服务器的连接
出现“Execution completed successfully”就说明服务器连接成功,之后点击“Next”。
7.选择要迁移的数据库
选择我们需要迁移的Oracle Schema。
8.Reverse Engineering,显示“Execution completed successfully”则说明数据转换成功
9.Object Type Selection
选中“Objects of type Oracle Table”和 “Objects of type Oracle View”,如需迁移其它对象类型,在相应选项前勾中。
通过“Detailed selection”选择不需要迁移的对象。
10.Object Mapping
修改“Migration of type Oracle Schema”和“Migration of type Oracle Table”
“Migration method”选择“Generic”;点击“Set Parameter”,选择"User defined",设置"charset=gbk,collation=gbk_ci";
11.Migration,显示出“Execution completed successfully”则该步成功
12.Migrated Objects
这里列出了有问题的映射对象及其创建脚本,主要是一些视图或存储过程,这个工具无法确认语法是否正确,另一个选择就是只迁移表了;
13.Object Creation Options
这里可以选择直接在MySQL上创建对象还是保存为脚本后用脚本创建对象。
如保存脚本在“Create Script File for Create Statements”中填写导出文件的存放位置和名称,这里生成的是数据库表结构。
14.Creating Objects显示“Execution completed successfully”则表示对象创建成功;
15.Creation Results显示“No creation problem found”表示上面没有问题
16.选择实际数据的传输方式
可以在线传输数据,当源和目标数据库和迁移工具不在同一台机器上时,会在网络产生较大的数据流量,请注意。
17.最后就是数据传输了,传完后会有一个Summary,显示迁移过程是否有问题;