Oracle数据转移Mysql中遇到的问题以及解决办法

        前几天因工做须要我得将Oracle数据库中几十张表转移到Mysql中,因为以前没有相关经验,上网简单百度后选用Navcat Premium软件工做。
正则表达式

        Navcat Premium进行数据转移有三种办法:一、复制表  二、导出、导入数据  三、导出成sql脚本,执行。sql

        一开始使用复制表的方法,打开菜单栏“工具”的数据传输功能,左边选择要复制的表,右边选择链接而后选中目标数据库,接下在就是next by next的一键式操做。这个方法真的很方便,可是bug也不少,最大的bug是数值类型不匹配。Oracle中数值类型是Number2,复制到Mysql中默认为double型,而我须要的是int型。使用这方法失败。数据库

        接着尝试将Oracle表中数据导出为文件再导入Mysql,因为导入导出操做有些复杂,且没法批量操做,须要在Mysql中先建立表,而后逐一导入数据,因此放弃。
编辑器

        最后尝试将数据以及表结构转储为sql脚本文件,在Mysql中执行。打开菜单栏“工具”的数据传输功能,左边选择要复制的表,右边选择文件。Mysql中执行sql文件时遇到问题,Oracle转储生成的sql脚本文件中数值类型是decimal(xx,xx),日期类型是datetime(x),而Mysql中没有decimal数值类型,日期类型只支持datetime并没有显式的大小限定,因而决定用sublime编辑器修改。使用sublime查找功能find all找出全部datetime(xx,xx),统一改成int,执行后发现有错误。原来有的字段类型是decimal(xx,xx)而有的字段类型是decimal(x,x),deciaml(xx,x)……,统一修改时会误删其它字符。因而想到正则表达式匹配,恰好sublime支持正则查找,使用正则查找功能匹配全部decimal(xx,xx),decimal(xx,x),decimal(x,xx)……统一改成int类型,而后用一样的方法修改datetime类型,再执行sql脚本,这下终于成功执行,数据也都是正确的,大功告成!工具

        最后说说这个方法的局限:若是有这样一个需求,Mysql中部分字段数值类型须要是double、部分须要是int,这该如何是好?暂时能想到的是先在Mysql中建立表,再逐一导入数据。
ci

相关文章
相关标签/搜索