navicat premium从Oracle导出数据到mysql

项目上要将Oracle数据导出到mysql,从网上查到navicat premium是个不错的工具,就是试了一下。期间遇到很多问题,记录如下:

1、首先是将现场数据库还原到公司远程数据库,一直报“必须说明 'SET_NO_OUTLINES' 组件”错误,上网查了一下,说是导出的Oracle数据库与导入的数据库版本不一致导致,但是我是低版本导入高版本,应该不存在这个问题。试了很长时间,发现是因为我的Oracle账号权限不够所致,试了另一个账号,导入成功。

2、然后安装完navicat premium,连接远程Oracle数据库始终失败,一直弹出"Cannot load OCI DLL, 126: Instant Client package is required for Baic and TNS connection"错误,在网上查了很多方法,大都是说“Navicat仅支持32位的,需下载一个32位的Oracle 客户端instant client”,下了配置好了也不管用,后来发现原来现在Navicat已经有64位和32位了,我安装的是64位的,所以用32位的Oracle客户端有问题。后来又重新下载了32位的Navicat,配置好instant client的oci.dll,这次不报“Cannot load OCI DLL”错误,报了“ORA-12514: TNS:listener does not currently know of service requested in connect”错误,网上说要改tnsnames.ora,但是我用plsql链接远程数据库并没有问题。

后来想起来,我plsql用的是另外一个Oracle精简版安装程序,于是就将Navicat配置了跟plsql一样的oci.dll,然后就可以连上了。

3、使用Navicat导出Oracle数据库到mysql又遇到问题,“Too big precision 7 specified for 'time'. Maximum is 6.”错误,一查是因为Oracle的timestamp精度是7,但是MySQL的datetime精度是6,导致数据传输不成功。在网上也没找到办法,后来我一想,既然是长度问题,我把oracle的长度改一下不就行了,于是就把timestamp的长度改为6,没想到改成了,数据传到mysql了。

4、但是导另外一个表又出现问题,说是重复主键,Oracle里面根本没有重复的主键,没办法我把Oracle的主键取消了,导入才成功了。

5、从网上看到导入mysql的另一个方法,先导出为mysql支持sql文件,然后再在mysql里执行这个sql文件,就可以导入了。

6、后来我换了一台电脑(win10操作系统)使用navicat和plsql连接Oracle又出现问题,按照上面的方法都走了一遍也不行,后来发现是没有配置环境变量(变量名:ORACLE_HOME,变量值:E:\tools\Oracle\OraClient Lite\product\11.2.0\client_lite),后来配好了才能正常连接。之前我用win7也没配环境变量,可以正常连接,这次用win10不行,不知道是否是操作系统的问题。



navicat premium从Oracle导出数据到mysql_第1张图片


6、导入时因为数据太多,数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes

2个解决方法:

1.临时修改:mysql>set global max_allowed_packet=524288000;修改 #512M

 2.修改my.cnf,需重启mysql。   在 [MySQLd] 部分添加一句(如果存在,调整其值就可以):  max_allowed_packet=10M

参考资料:http://blog.csdn.net/u011526234/article/details/50485972

你可能感兴趣的:(数据库)