Heim  >  Artikel  >  Datenbank  >  Web系统从Oracle迁移至MySQL

Web系统从Oracle迁移至MySQL

WBOY
WBOYOriginal
2016-06-07 17:35:41907Durchsuche

简单那的来说就是把oracle数据库里面的所有数据都迁移到MySql,这个可以用MySQLMigration Toolkit工具,MySQL发布了一个将数据由

前两天领导给了个活,数据库迁移,原来的系统是用的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:\Program Files (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等等,这块不难改就是比较麻烦,需要大量的测试

总结:平台的迁移,不难,比较麻烦,要细心,最主要的工作是测试。

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn