• Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具


     Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具

    1 kettle

    --第一次使用kettle玩迁移,有什么不足之处和建议,请大家指正和建议。

    下载软件,官网比较慢,国内有一些镜像 

    下载完成,解压

    pdi-ce-7.0.0.0-25.zip

    G:downloadpdi-ce-7.0.0.0-25data-integration

    双击Spoon.bat 运行

    提示找不到javaw.exe

    下载jdk安装(这里在oracle官网上选择相应的进行下载安装jdk-8u191-windows-x64.exe),路径C:Program FilesJavajdk1.8.0_191

    添加环境变量 C:Program FilesJavajdk1.8.0_191

    在双击Spoon.bat 运行

    --整库转移数据

    ojdbc5.jar ojdbc6.jar mysql-connector-java-5.1.47.jar

    拷贝到kettlelib路径 G:downloadpdi-ce-7.0.0.0-25data-integrationlib

    在启动kettle之前拷贝进去,这里重新运行

    --mysql连接

     

    --连接oralce,由于oralce11g r2 rac环境,之前一直报错

    Error connecting to database: (using class oracle.jdbc.driver.OracleDriver)

    Listener refused the connection with the following error:

    ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

    --所以这里直接指定一个sid,即bol1,选择第一个节点,ip是scan ip

    新建一个job,创建2db的连接,sourcetarget,在菜单中找到[复制多表导向],点击进行关联操作

    工具--向导--复制多表导向

     

    --点击 finish

    --开始执行

    --日志

     

    --登录mysql进行查询,发现数据和表已经同步

    --问题,oracle迁移到mysql的表,字段是number类型,迁移到mysql之后,变成了double类型,数据存储的是整数。字段是date类型并且有default值,迁移后到mysql,只是为not null属性,没有default值。

    -- oracle

    -- mysql

    2 Navicat 迁移 oracle mysql

    --分别创建oraclemysql的连接

    --选择工具--数据传输

    基本上table table的迁移是没什么问题

    --迁移比较慢

    --date字段 迁移到mysql 出错--未解决

     [Msg] [Dtf] Create table: `AIRCRAFT`

    [Err] [Dtf] 1426 - Too big precision 7 specified for column 'AIRCRAFTDATE'. Maximum is 6.

    [Msg] [Dtf] Get table data for: .AIRCRAFT

    3 sql develope Mysql迁移到oracle

    这个工具只能把mysql迁移到oracle

    自行在oracle 官网上下载相应的sql developer版本,只能是其它数据库导入oracle

    下载安装包

    --sqldeveloper-18.3.0.277.2354-x64.zip

    --mysql-connector-java-5.1.47.zip

    --oracle 用户设置

    CREATE TABLESPACE TEST DATAFILE 

      '+DATA/bol/datafile/test01.dbf' SIZE 50M AUTOEXTEND OFF

    LOGGING

    ONLINE

    EXTENT MANAGEMENT LOCAL AUTOALLOCATE

    BLOCKSIZE 8K

    SEGMENT SPACE MANAGEMENT AUTO

    FLASHBACK ON;

    create user TEST identified by TEST DEFAULT TABLESPACE TEST;

    grant connect to TEST;

    grant resource to TEST;

    grant dba to TEST;

    --mysql 用户设置

    grant ALL PRIVILEGES ON *.* TO 'test'@'10.15.%' IDENTIFIED BY "testmysql"; 

    --连接oracle

    --连接mysql

    --选择mysql-connector-java-5.1.47.zip 该包解压出的的bin.jar

    --创建连接

    复制表

    如果不用迁移整个数据,只是迁移表的数据,则可以直接在mysql数据库中选择要转移的表,点击右键 选择复制到oracle即可。此时会把表转移到sql developer链接oracle数据库的用户下,并且该用户下不能有同名的表

    复制表要比迁移数据库的效率低,如果是复制所有表,最好是移植数据库

    移植数据库

    --选择test库测试

    --指定转换规则,可以根据自己的情况设定字段转换,也可以添加新的规则

    修改oracle用户名

    因为转换过来的数据默认存放在users表空间,而且会创建一个和mysql一模一样的oracle用户,并把mysql数据库导入到该用户下。可以exp出来新用户的数据后,然后在导入到正确的用户下,这样数据会存在正确的表空间下面,如果数据量大,exp/imp比较耗时,建议数据量大的时候不要采用。

    先创建好用户名(用户名|mysql数据库的库名),定义好默认的表空间,然后在做mysqloracle的转换,也可以改变数据库的默认表空间防止自动创建用户的默认表空间使用user表空间

    SQL> alter database default tablespace m_data;

    改过名字的用户,权限会继承,但是默认表空间不会继承,需要手工设定

    SQL> alter user oa identified by oa default tablesapce m_data temporary tablespace TEMP;

    修改oracle用户名需要sys用户,或者操作user$表权限

    SQL> GRANT SELECT ON USER$ TO SYSTEM;

    SQL> GRANT UPDATE ON USER$ TO SYSTEM;

    SQL> SELECT USER#,NAME FROM SYS.USER$ WHERE NAME=’TEST’;

    SQL> UPDATE USER$ SET NAM=NEW_NAME WHERE USER#=93;

    SQL> COMMIT;

    SQL> ALTER SYSTEM CHECKPOINT;

    SQL> ALTER USER NEW_USER IDENTIFIED BY PASS

    SQL> ALTER SYSTEM FLUSH SHARED_POOL;

    SQL> CONN NEW_USER/PASS@ORCL;

  • 相关阅读:
    oracle 之 while循环月份
    oracle 之 for循环表
    基本类型与字符串之间的转换
    java的数据类型和mysql的数据类型和Oracle数据类型
    EasyPoi导入数据后,导出发生错误的数据报[object Object]
    mysql查询表名是否存在和oracle查询表名是否存在
    mysql服务相关命令
    vue:按钮后面加一个下拉箭头
    js删除对象中的属性使用delete
    为什么在前端存入的日期,到后台却多了8个小时?而且前端显示的又是很丑的时间戳
  • 原文地址:https://www.cnblogs.com/yhq1314/p/9964497.html
Copyright © 2020-2023  润新知