Kettle实现Oracle到Mysql数据复制

目录

1.背景

2.安装java 环境

3.部署kettle

3.1. 数据库连接驱动 

3.2. 配置kettle转换

3.3.配置oracle和mysql连接

3.4 配置字符集

4. 配置迁移步骤

4.1.配置输入

4.2.配置表输出

4.3.检查

4.4 运行转换

4.5.执行结果 


1.背景

        工作上遇到个问题:客户本地服务器损坏,本地备份文件全部丢失,基于客户数据库做了个数据中心,实时同步客户数据,数据丢失只能从中心恢复。摆在面前的有几个问题:数据中心数据库是oracle,且数据中心数据量大,本身作为数据仓库存在,不止一个客户数据,数量级别以亿为单位;客户数据库为mysql,传统做法是由dba将数据仓库客户数据剔除生成csv文件,一个表一个文件,提供相关导出数据表结构,使用navicat导入csv文件,一个一个字段确认,过程麻烦不说,效率不高还容易出错;第二个场景,如果客户服务器一旦出问题,没有备份文件,需要立马恢复生产,这个时候只能干看着。这种情况很多,但是dba就是不会,多说一句,dba是真的拖后腿。

        决定用kettle,是因为csv文件还原到客户数据库就是我来做,其中艰辛不多说。直接用kettle从数据中心直接还原到客户数据库,一次配置,永久有效,不同客户出问题直接换个ip就行。

      Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。kettle的数据抽取主要在于抽取数据,而没有考虑数据库的函数、存储过程、视图、表结构以及索引、约束等等,如果想对这些内容进行迁移,就需要通过写脚本或者更改kettle源码的方式实现了。

2.安装java 环境

参考:https://www.cnblogs.com/nothingonyou/p/11936850.html 

3.部署kettle

官网下载较慢,这里选择国内镜像下载,使用的是pdi-ce-7.1.0.0-12.zip 版本。

官网地址:Home - Hitachi Vantara

下载地址:http://mirror.bit.edu.cn/pentaho/Data%20Integration/7.1/

浏览器下载真的很慢,还是用迅雷吧

解压后进入到Kettle目录,双击运行spoon.bat文件,出现如下界面及说明kettle成功部署。

Kettle实现Oracle到Mysql数据复制_第1张图片

3.1. 数据库连接驱动 

在运行之前,我们需要下载对应数据库的jar包导入到Kettle的lib目录下,比如我们需要把oracle迁移到mysql,那就需要oracle和mysql两个jar包

 Kettle实现Oracle到Mysql数据复制_第2张图片

3.2. 配置kettle转换

双击打开spoon.bat,在左侧主对象菜单栏,新建一个转换,命名为【数据同步】,如下图

 Kettle实现Oracle到Mysql数据复制_第3张图片

3.3.配置oracle和mysql连接

        输入对应连接信息

Kettle实现Oracle到Mysql数据复制_第4张图片

点击测试,显示成功即为配置完成 

Kettle实现Oracle到Mysql数据复制_第5张图片

3.4 配置字符集

        迁移时要确认两边数据库使用的是哪种字符集,不然可能会出现迁移后出现乱码的问题,我这里oracle是utf8,mysql是utf8:characterEncoding

Kettle实现Oracle到Mysql数据复制_第6张图片

4. 配置迁移步骤

4.1.配置输入

        左侧菜单栏【转换】里面,选择【核心对象】,双击【表输入】,或者选中将【表输入】拖拽到右侧空白区域

 Kettle实现Oracle到Mysql数据复制_第7张图片

 Kettle实现Oracle到Mysql数据复制_第8张图片

        双击【表输入】,修改“步骤名称”,选择源数据,点击获取【获取SQL查询语句】,选择你想同步的表,点击确定后就可以了。当然也可以自己写sql语句,我这里是自己写的sql,点击【预览】可以查看要迁移的数据。

Kettle实现Oracle到Mysql数据复制_第9张图片

4.2.配置表输出

        配置表输出,在左侧菜单栏【转换】里面,选择【核心对象】,【输出】一栏接着双击【表输出】,或者选中将【表输出】拖拽到右侧空白区域。双击【表输出】,配置要迁移的目标表,我这里两边数据库字段一样,如图

Kettle实现Oracle到Mysql数据复制_第10张图片

        有一点需要主要的地方,提交记录数量是批量写入数量条数;如果没得分区,表数据分区就取消选中,否则报错:The tablename is not defined (empty)

Kettle实现Oracle到Mysql数据复制_第11张图片

         如果源表和目标表结构不一致,需要自己建立对应关系,可以通过右键单击输出,选择【根据目标步骤生成映射】,配置映射关系,点击【猜一猜】会自动匹配。如图

Kettle实现Oracle到Mysql数据复制_第12张图片

Kettle实现Oracle到Mysql数据复制_第13张图片

4.3.检查

        在执行之前,检查整个过程是否存在问题:

Kettle实现Oracle到Mysql数据复制_第14张图片

Kettle实现Oracle到Mysql数据复制_第15张图片

4.4 运行转换

手工运行作业,点击下图红色圈圈里面的开始按钮,选择日志级别,如果没有红色报错基本无碍。

Kettle实现Oracle到Mysql数据复制_第16张图片

Kettle实现Oracle到Mysql数据复制_第17张图片

4.5.执行结果 

 Kettle实现Oracle到Mysql数据复制_第18张图片

另外一个方式比较简单,能实现单表或多表复制:工具 — 向导 — 复制多表向导,这种的使用场景适合于批量数据复制,源表目标表数据结构一致。快准狠

你可能感兴趣的:(工具类,开发工具,Mysql,oracle,mysql,数据库)