使用kettle迁移oracle 12c数据到mysql (简单例子)

2021-02-19 10:03:04 浏览数 (1)

说明: 迁移数据有很多工具的, 后续可能会分享其它的.

Kettle最早是一个开源的ETL工具, 2006年被Pentaho收购了,.

Pentaho公司于2015年又被HitachiData Systems收购了,

Hitachi Data Systems于2017年改名为Hitachi Vantara 了.

源端:oracle 11g/12c/19c都可以

目标端: mysql/mariadb

反之也可以.

1. 本次实验环境

操作系统: oel7.8

源端数据库: oracle 12.2

目标端数据库 : mariadb 5.5

迁移工具: kettle版本: pdi-ce-7.1.0.0-12

这个工具是图形化的, 我就安装在windows上演示了,

(安装在linux上的需要设置DISPLAY , 命令参考: export DISPLAY=`last | head -1 | awk '{print $3}'`:0.0)

2.准备环境

2.1 安装数据库

oracle: https://cloud.tencent.com/developer/article/1674412

mariadb:

代码语言:javascript复制
yum install mariadb-server mariadb -y
systemctl start mariadb
systemctl enable mariadb
#简单粗暴...
mysql -uroot -e "set password for 'root'@'localhost'=password('123456');"
mysql -uroot -p123456 -e "create database test_kettle;"
mysql -uroot -p123456 -e "create user 'kettle_mariadb'@'%' identified by '123456';"
mysql -uroot -p123456 -e "grant all privileges on test_kettle.* to 'kettle_mariadb'@'%' identified by '123456';"
mysql -uroot -p123456 -e "flush privileges;"

3. 安装kettle

3.1 下载并安装

最新版本 pdi-ce-9.1.0.0-324

本次实验实验 pdi-ce-7.1.0.0-12

官网下载太慢了, 我就选国内的镜像了

北京理工大学: http://mirror.bit.edu.cn/pentaho/Data Integration/7.1/pdi-ce-7.1.0.0-12.zip

(截至本文时间2021.02.18 这个访问不了了, 报403 .....)

这个工具是JAVA写的, 要安装相应的JDK. 本次使用jdk8.2

windows: JDK 8.2 , linux版本: JDK 8.2

直接解压就可以用(linux和windows是一样的):

3.2 配置kettle

3.2.1

得先配置JAVA_HOME环境变量:

直接编辑启动脚本 pdi-ce-7.1.0.0-12data-integrationSpoon.bat 修改如下即可(第16 17 行 添加JAVA_HOME)

代码语言:text复制

set JAVA_HOME=C:Program FilesJavajdk1.8.0_141
set PENTAHO_JAVA_HOME=%JAVA_HOME%

然后双击Spoon.bat 即可启动

4. 使用kettle迁移数据

4.1 创建转换

文件 --> 新建 --> 转换

4.2 创建 DB连接

我得连上数据库才能迁数据吧....

转换 -- > DB连接 --> 新建

4.2.1 连接oracle pdb

连接oracle的pdb有点坑, 不能直接连接, 得先配置JNDI.

(如果你没得驱动的话, 还得先拷贝驱动如:ojdbc8.jar 到 pdi-ce-7.1.0.0-12data-integrationlib 目录下)

编辑 pdi-ce-7.1.0.0-12data-integrationsimple-jndijdbc.properties 添加如下内容:

代码语言:javascript复制
oracle12c/type=javax.sql.DataSource 
oracle12c/driver=oracle.jdbc.driver.OracleDriver 
oracle12c/url=jdbc:oracle:thin:@192.168.101.19:1521/ddcwpdb
oracle12c/user=system
oracle12c/password=ddcw

然后选择JNDI连接方式 (我这里偷懒用的system, 生产环境不要用system用户和表空间)

点击测试, 没毛病就保存

这种就是正常的,不是的话,就去找原因这种就是正常的,不是的话,就去找原因

4.2.2 连接 mariadb

也可以配置jndi,但是没必要. 我就直接连接了

还是得先整驱动.., 没得的话就会报错如下.

Driver class 'org.mariadb.jdbc.Driver' could not be found, make sure the 'MariaDB' driver (jar file) is installed.

org.mariadb.jdbc.Driver

所以你得先去mariadb官网下载mariadb-java-connect.jar . 比较麻烦, 所以我耍个小聪明,把mariadb当成mysql来用. mysql的驱动你应该有把, 没得的话安装 mysql-connector-java 就有了/usr/share/java/mysql-connector-java.jar

机智如我机智如我

4.3 创建流程

我们环境就简单点, 就只要一个输入 一个输出 就够了

核心对象 --> 输入 --> 表输入

核心对象 --> 输入 --> 插入/更新

连线: 按住shif 鼠标左键 连接即可

4.3.1编辑表输入

双击表输入即可, 编辑完了, 可以预览,自信点不预览也行

4.3.2 编辑输出(插入/更新)

源表的 id 对应新表的new_id 原表的name对应新表的new_name

4.4 开始流程

点击左上角的运行这个转换

检查目标端数据:

总结

一个简单的迁移例子就完成了.

优点:

使用简单,易于控制, 跨平台跨数据库跨版本

缺点:

由于是跑的sql,且有中转过程, 效率有待观望.

(我的环境查询72条/s, 每分钟就有4200条. 写的话,每分钟1800条左右. 因为我的表字段做了转换的, 没转换的话估计会快一些)

0 人点赞