一、问题

由于工作需要,需要把业务库的数据库从oracle签到mysql,免费开源

二、解决办法

2.1:ETL单个对象进行转移(最笨的办法,所以抛弃掉了)

2.2:使用Navicat Premium工具

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

安装运行之后,我们开始进行数据迁移吧

a:创建源和目标的连接,比如从oracle到mysql我就首先需要创建一个mysql和oracle的连接

创建MySQL连接是傻瓜式的,我这里不过多的去讲

主要说一下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,如下图所示

最新文章

  1. Freemark基本语法知识(转)
  2. JS获取浏览器名和版本信息
  3. mysql 启动失败
  4. Apache 使用localhost(127.0.0.1)可以访问 但是使用本机IP(局域网)不能访问
  5. Web启动服务器上的某一个服务
  6. Android 应用内存优化 之 onLowMemory & onTrimMemory
  7. MySQL的表的优化和列类型的选择
  8. win7系统cmd命令切换到指定文件夹目录
  9. C++学了这么多年,你仍不知道的事
  10. 两段简单的JS代码防止SQL注入
  11. BIEE11g BI_server Jvm參数调整
  12. How to Compile Java DBus
  13. (17)IO中的异常处理
  14. 用SQL表达交并差操作
  15. centos7查看网卡UUID
  16. ubuntu下Qt链接MySQL: QMYSQL driver not loaded(不用重新编译源码)
  17. Day6-------------ext4文件系统
  18. JAVA "GMT+10" 和 "GMT+0010"
  19. php根据命令行参数生成配置文件
  20. Loadrunner打开VU时候报错Critical error(cannot use Exceptiondialog)

热门文章

  1. echarts 去掉网格线
  2. python服务端内存泄露的处理过程
  3. [Winform]Media Player播放控制面板控制,单击事件截获
  4. eclipse中设置自定义文档签名(工具)
  5. delphiredisclient开源GIT
  6. 【Devops】【docker】【CI/CD】jenkins 清除工作空间报错Error: Wipe Out Workspace blocked by SCM
  7. Android 关于“NetworkOnMainThreadException”出错提示的原因及解决办法
  8. nginx网站攻击防护
  9. Unity3D导入3DMax模型缩放单位问题深入分析
  10. Unity Shader _Time 的单位