数据库迁移工具Navicat Premium之OracleToMysql

1、问题mysql

因为工做须要,须要把业务库的数据库从oracle签到mysql,免费开源linux

2、解决办法sql

2.1:ETL单个对象进行转移(最笨的办法,因此抛弃掉了)数据库

2.2:使用Navicat Premium工具windows

官网地址:https://www.navicat.com.cn/download,提供14天的试用权限(以下图所示)服务器

安装运行以后,咱们开始进行数据迁移吧数据结构

a:建立源和目标的链接,好比从oracle到mysql我就首先须要建立一个mysql和oracle的链接oracle

建立MySQL链接是傻瓜式的,我这里不过多的去讲app

主要说一下navicat建立Oracle链接,官方文档以下函数

Navicat 支持两种 Oracle 服务器链接:在 Basic 模式中,Navicat 经过 Oracle Call Interface (OCI) 链接到 Oracle。
OCI 是一个应用程序界面,让程序开发人员使用第三代语言原有进程或函数呼叫来访问 Oracle 数据库及控制所有 SQL
语句运行的阶段。OCI 是一个标准数据库访问的库和动态连接库形式检索函数。
在 TNS 模式中,Navicat 使用在 tnsnames.ora 文件中的别名项目经过 Oracle Call Interface (OCI) 链接到 Oracle
服务器。OCI 是一个应用程序界面,让程序开发人员使用第三代语言原有进程或函数呼叫来访问 Oracle 数据库及控制
所有 SQL 语句运行的阶段。OCI 是一个标准数据库访问的库和动态连接库形式检索函数。

大概就是须要在navicat的选项中指定oci.dll文件的位置,以下图

可是我按照操做安装了oracle client以后指定client中的oci.dll文件的路径一直不行,仍是报错,oracle链接一直建立不成功,接下来给出终极

解决方法:

把Oracle安装目录D:\app\Administrator\product\11.2.0\dbhome_1\BIN(根据你的实际安装目录)下的oci.dll文件替换Navicat安装目录D:\software\Navicatfor Oracle\instantclient_10_2(根据你的实际安装目录)下的oci.dll就能够了

确实解决了问题

b:开始迁移数据库

以下图所示,在native中选择工具-数据传输能够看到以下界面,咱们定义好源和目标,选择好迁移的对象

遗憾的地方是:Oracle到mysql只能迁移表,视图过程什么的多是由于语法不同而被禁用了,或者是由于我这里是使用版的问题,这就不知道了

点击开始迁移,咱们能够看到迁移日志,以下图所示

不幸的是,中途却报错了

错误1:[Err] [Dtf] 2006 - MySQL server has gone away With statement: INSERT INTO `T_XX_MESSAGE`

这个错误是由于要插入的字段中含有BLOB、CLOB的大文本字段,MySQL处理能力有限

解决办法:

修改MySQL的my.ini文件(windows),linux为my.cnf,如window解压版的mysql没有my.ini只有my-default.ini

那就复制一个my-default.ini重命名为my.ini在后面加上

max_allowed_packet=16M

结果以下图所示

修改保存后重启mysql服务  net   stop mysql   net start mysql

错误2:

[Msg] [Dtf] Create index: `IDX_MEETING_FILENAME`
[Err] [Dtf] 1170 - BLOB/TEXT column 'FILE_NAME' used in key specification without a key length

解决办法:

原来Mysql数据库对于BLOB/TEXT这样类型的数据结构只能索引前N个字符。因此这样的数据类型不能做为主键,也不能是UNIQUE的。因此要换成VARCH,可是VARCHAR类型的大小也不能大于255,当VARCHAR类型的字段大小若是大于255的时候也会转换成小的TEXT来处理。因此也一样有问题。

做为索引的字符不能太长,修改的短一点吧

继续处理能够发现处理OK,以下图所示

相关文章
相关标签/搜索