mysql迁移到oracle 详解
背景:
更换数据库,需要将Mysql数据库表框架迁移到oracle数据库中.
数据库版本:
Mysql:5.7.1
Oracle:12.2.0
注:oracle须使用12.2以上版本,低版本不支持长表名
工具:
推荐使用Navicat,PLSQL,PLSQL作为oracle语句的编译工具,两者配合使用
备注:PLSQL安装和配置请参考
https://blog.****.net/qq_40709468/article/details/81122028
迁移过程:
思路:
- 创建相应表空间和用户
- 用Navicat将表结构迁移到oracle数据库,将oracle不支持的表类型进行转换
- 查看编码,导出原始脚本,删除脚本里不必要的信息
- 特殊字段处理
- 脚本增加索引,序列,触发器,视图,存储过程和函数
- 所有的创建语句在执行前做判断
- 脚本合并
- 脚本调试
过程:
过程中遇到一些典型的问题拿出来讲一下
- 检查Mysql的数据库,确保是完整一套数据库,如图所示,该数据库中包含了MES系统用的所有数据库
2. 对应mysql里的数据库,使用PLSQL创建表空间和用户,并赋予用户权限,这里我把mysql上的每个数据库作为一个表空间,然后给对应的用户。对应关系如下:
Mysql:库 cloudbackend oracle: 表空间:cloudbackend
cloud_mes_device cloud_mes_device
… …
3. 使用navicat连接oracle,将mysql里的表结构迁移到oracle对应下的表空间,具体过程跟sqlserver表迁移类似,不多赘述。
4. 迁移成功可以看到表的原始结构语句
将其语句转到sql文件里,并打开,删除“”和cloudbackend.并且将数据类型转换(需要转换的要转换),可以参考另一份文档“mysql与oracle数据类型转换”
5. 在使用PLSQL执行建表脚本调试时遇到特殊字段,如group, index等,如图
这里我把这种特殊字段做了“”处理,调试通过,值得注意的是,在编译时如用到这种特殊字段,需加“”去操作。
建表的脚本调试时会碰到如下的错误:
说明脚本里有DEFRRED,将其改为immediate,执行通过。调试需要耐心,表数据庞大,每张表在改动脚本的时候都要做一次调试
6. 索引的创建需要对应表空间,不多赘述。在处理自增时耗费的时间比较久,在实现id字段自增的过程中,mysql和oracle是完全不同的。举例说明:
Mysql实现id自增
create table test (
id int not null auto_increment,
name,varchar,
primary key (id) );
只要主键添加auto_increment,即可实现自增
Oracle实现自增方法:
i:创建序列
ii: 创建触发器
这两者协同实现表id的自增。
- 建表时添加判断的函数目的是为了,多次执行可以覆盖前面的创建。这里判断主要使用在了表,索引,序列,其他的创建,比如创建触发器等可以用replace代替判断。
8.为了方便调试开始时最好每一项作为一个单独脚本调试,最后将已调试好的脚本合并到一个脚本中再做一个调试,注意语句中可能会用到/去做语句连接,调试过程中会遇到大量的错误,需要耐心调查和解决。