Oracle数据库迁移到MySQL(kettle,navicate,sqldeveloper等
⼯具
Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等⼯具
1 kettle
--第⼀次使⽤kettle玩迁移,有什么不⾜之处和建议,请⼤家指正和建议。
下载软件,官⽹⽐较慢,国内有⼀些镜像
下载完成,解压
pdi-ce-7.0.0.0-25.zip
G:\download\pdi-ce-7.0.0.0-25\data-integration
双击Spoon.bat 运⾏
提⽰不到
下载jdk安装(这⾥在oracle官⽹上选择相应的进⾏下载安装),路径C:\Program Files\Java\jdk1.8.0_191
添加环境变量 C:\Program Files\Java\jdk1.8.0_191
在双击Spoon.bat 运⾏
--整库转移数据
ojdbc5.jar ojdbc6.jar mysql-connector-java-5.1.47.jar
拷贝到kettle的lib路径 G:\download\pdi-ce-7.0.0.0-25\data-integration\lib
在启动kettle之前拷贝进去,这⾥重新运⾏
--mysql连接
--连接oralce,由于oralce是11g 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,创建2个db的连接,source,target,在菜单中到[复制多表导向],点击进⾏关联操作
⼯具--向导--复制多表导向
--点击 finish
--开始执⾏
--⽇志
--登录mysql进⾏查询,发现数据和表已经同步
--问题,oracle迁移到mysql的表,字段是number类型,迁移到mysql之后,变成了double类型,数据存储的是整数。字段是date类型并且有default值,迁移后到mysql,只是为not null属性,没有default值。
-- oracle
-- mysql
2 Navicat 迁移 oracle 到mysql
--分别创建oracle和mysql的连接
--选择⼯具--数据传输
基本上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;sqldeveloper安装步骤
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⽤户,并把m
ysql数据库导⼊到该⽤户下。可
以exp出来新⽤户的数据后,然后在导⼊到正确的⽤户下,这样数据会存在正确的表空间下⾯,如果数据量⼤,exp/imp⽐较耗时,建议数据量⼤的时候不要采⽤。
先创建好⽤户名(⽤户名|mysql数据库的库名),定义好默认的表空间,然后在做mysql到oracle的转换,也可以改变数据库的默认表空间防⽌⾃动创建⽤户的默认表空间使⽤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;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。