暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle | 数据库迁移(一)

testDemo 2018-04-07
1007




数据库:Oracle 11g ,  MySQL 5.1

迁移工具:Navicat Premium


主要内容:

1、Navicat 提示 Cannot create oci environment.

2、[Err] [Dtf] 1170 - BLOB/TEXT column 'SERIALNO' used in key specification without a key length.




工作中一直用的是Oracle ,MySQL只是在平时自己用。之前有做过Oracle迁移到Oracle,这次略有不同,从 Oracle 到 MySQL表和数据很多,手工折腾不切实际。正好Navicat Premium可以做。(安装和使用 Navicat Premium 步骤略)


业务数据不尽相同,数据基本无用,只是需要表,源数据库中视图、触发器、存储过程、函数等对象都不用,也不用考虑对存量数据的处理,所以整个迁移过程不难。以今天的文章开篇,算是给日后对Oracle和Mysql 数据库之间的差异对比做个开个头吧。


此文,主要写在迁移过程遇到的几个问题:


1、Navicat 提示 Cannot create oci environment.


解决方案:Tools->Options-> Miscellaneous -> OCI 用plsql的oci文件替换原来的oci文件。


2、[Err] [Dtf] 1170 - BLOB/TEXT column 'SERIALNO' used in key specification without a key length


迁移过程抛异常,原表中 SERIALNO的字段类型是 RAW  [标注1]


RAW在数据迁移时,不会发生字符集转换的!MySQL不允许在可变长字段上建索引。在stackoverflow上也有类似问题(https://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length#


提供的解决方案有两种:

1、移除可变长度字段上的索引、主键约束;

2、设置其他字段为主键。


在这次数据迁移中,解决方案是:将Oracle的RAW类型转化成Varchar2类型,Oracle中的Varchar2 和 MySQL中的varchar是能正常转化的。SERIALNO主键约束依旧不变。




[标注1RAW类型 用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息




文章转载自testDemo,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论