原地址 :http://ainidehsj.iteye.com/blog/1735434

需求: 
1.你是否遇到了需要将mysql数据库中的所有表与数据迁移到Oracle。 
2.你是否还在使用kettle重复的画着:表输入-表输出、创建表,而烦恼。

下面为你实现了一套通用的数据库迁移流程。

技术引导: 
实现之初,在kettle提供的例子中找到了一个类似的(samples\jobs\process all tables)。 
通过相关改造,终于达到目标。

实现过程解剖: 
整套流程分为:2个job,4个trans。 
使用到的Trans插件:表输入、字段选择、复制记录到结果、从结果获取记录、设置变量、自定义java脚本、表输出。 
1.大job。 

2.要迁移的源库表名称获取,并设置到结果集,为下面的job使用。 

3.配置子job为前面的每一条记录(即每个表)执行一次该子job 

4.下面是子job。 

5.获取记录中的表名称,并设置为到变量。 

6.读取当前表的结果信息,并在目标库中创建表(这个是难点)。 
 
因为只需要获取抓取要抽取表的结构信息,故在sql后面加上 where 1=2。 
 
下面代码是创建目标库表。

Java代码  
  1. public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException
  2. {
  3. // First, get a row from the default input hop
  4. //
  5. Object[] r = getRow();
  6. org.pentaho.di.core.database.DatabaseMeta dbmeta = null;
  7. java.util.List list = getTrans().getRepository().readDatabases();//3.x中获取资源库的所有数据库连接信息用getDatabases();
  8. if(list != null && !list.isEmpty())
  9. {
  10. for(int i=0;i<list.size();i++)
  11. {
  12. dbmeta = (org.pentaho.di.core.database.DatabaseMeta)list.get(i);
  13. //下面是目标库的数据库连接,大家可根据需要修改
  14. if("mysql_test".equalsIgnoreCase(dbmeta.getName()))
  15. {
  16. break;
  17. }
  18. }
  19. }
  20. if(dbmeta!=null)
  21. {
  22. org.pentaho.di.core.database.Database db=new org.pentaho.di.core.database.Database(dbmeta);
  23. try
  24. {
  25. db.connect();
  26. String tablename = getVariable("TABLENAME");
  27. logBasic("开始创建表:" + tablename);
  28. if(tablename!=null && tablename.trim().length()>0)
  29. {
  30. String sql = db.getDDL(tablename, data.inputRowMeta);//${TABLENAME}
  31. db.execStatement(sql.replace(";", ""));
  32. logBasic(sql);
  33. }
  34. }
  35. catch(Exception e)
  36. {
  37. logError("创建表出现异常",e);
  38. }finally{
  39. db.disconnect();
  40. }
  41. }
  42. return false;
  43. }

7.表数据迁移。 
 

8.差不多就行了,本人使用mysql到mysql、oracle的测试是没有问题的不过在测试过程中,发现源表若存在有blob的表,会有问题,可能是由于表输出没有指定字段的原因,具体解决办法,也没有去多想,以后有时间在完善把。

上面的整套流程的是在kettle4.3下完成的,附件里面可下载完整流程。

5.x运行到创建表结构步骤报错,原因data.inputRowMeta为空,因为在第6步 
在sql后面加上 where 1=2,导致表输入步骤没有抽取到记录,5.x里结构也变成了null。 
解决: 
把where 1=2去掉,然后,在表输入的限制行设置为1,即可,本人亲测。

未来星开发团队--狒狒 QQ:9715234

用Kettle的一套流程完成对整个数据库迁移 费元星相关推荐

  1. 用Kettle的一套流程完成对整个数据库迁移

    转自:  https://blog.csdn.net/maenlai0086/article/details/80829143 Kettle日常使用汇总整理:https://www.cnblogs.c ...

  2. kettle 遇到 解决Incorrect integer value: '' for column 'id' at row 1 完美解决-费元星

    最近自己在测试一个开源的程序,测试中发现.该程序都添加和更新的时候回出现 Incorrect integer value: '' for column 'id' at row 1类是的错误! 后来我自 ...

  3. java 实现一套流程管理、流转的思路(伪工作流) 【仅供参考】

    转: java 实现一套流程管理.流转的思路(伪工作流) 在做某个管理项目时,被要求实现一套流程管理,比如请假的申请审批流程等,在参考了很多资料,并和同事讨论后,得到了一个自主实现的流程管理. 以下提 ...

  4. java开发 审核流程思路_java 实现一套流程管理、流转的思路(伪工作流) 【仅供参考】...

    转: 在做某个管理项目时,被要求实现一套流程管理,比如请假的申请审批流程等,在参考了很多资料,并和同事讨论后,得到了一个自主实现的流程管理. 以下提供我的设计思路,知道了思路,实现起来就简单很多了. ...

  5. 【SpringBoot项目实战】图片压缩包上传、解压、存储等等一套流程教学

    [SpringBoot项目实战]图片压缩包上传.解压.存储等等一套流程教学 前言 一.压缩包上传 1.接口实现 2.获取压缩包的文件名和文件路径 二.压缩包解压并保存 1.处理压缩包文件方法 解压缩步 ...

  6. java流程引擎实现_手写实现一套流程编排

    转载自:https://blog.csdn.net/weixin_39631301/article/details/112082970 流程编排 随着业务的不断发展,业务流程迭代慢慢变得复杂了起来,全 ...

  7. kettle创建mysql资源库时报错_kettle 创建数据库资源库

    kettle常见的资源库有3种:数据库资源库.文件资源库.pentaho资源库. 文件资源库是在一个文件目录下定义一个资源库,因为kettle使用的是虚拟文件系统(Apache VFS),所以这里的文 ...

  8. 数据库迁移 软件Spoon Kettle环境搭配(本人踩过的坑)

    项目需要用到数据库迁移.涉及到了Spoon. 初始版本使用的是Kettle (70+M) 由于是测试 就在本地整了.70M版本java环境要求比较严格,我本身就是1.8的环境.还是不匹配.无奈根据弹框 ...

  9. kettle插件加载流程

    前言 kettle遵循着插件机制,基于插件使得kettle整个结构非常清晰,耦合性低,移植性强,特别是对kettle进行二次开发尤其方便,根据了解,扩展step类型的插件比较多,具体步骤可以参考:ht ...

最新文章

  1. MySQL 单表优化
  2. 编写运行最简单的java程序——使用记事本编写java程序
  3. 前后端分离开发模式下后端质量的保证 —— 单元测试
  4. 从前馈到反馈:解析循环神经网络(RNN)及其tricks
  5. 计算机主机外部的连接端口有何作用,微机原理 课后题 标准答案
  6. 面试基础算法、及编程 第一弹
  7. 面向对象开发方法概述
  8. python struct pack string_struct (String) – Python 中文开发手册
  9. GNU make manual 翻译(二十)
  10. 提高Web页面的性能(一)
  11. python爬取12306_爬虫12306返回数据怎么解析
  12. stvd使用c语言编程,stm8编程tips(stvd)
  13. wso2 mysql_windows下 WSO2 Application Server配置 及 MySQL数据服务部署
  14. android剪贴板历史,可能是史上最便捷的剪贴板应用 -- Native Clipboard #Android
  15. 创建LabwindowsCVI工程
  16. 【005】基于Vue.js及相关插件的仿微博移动版的单页应用(SPA)项目(含源码、运行教程)
  17. mysql交并补_集合交并补运算顺序是什么?
  18. SQL查询以某个字母开头
  19. 腾讯云服务器Ubuntu系统如何使用 root 用户远程登录
  20. 2021-10-29PS自学第4天——移动工具的使用

热门文章

  1. 国外计算机音乐专业,音乐留学干货 | 国外电子音乐专业留学如何?
  2. python划分代码_多分类评价指标python代码
  3. vba获取通达信光标的坐标数据_「高阶应用」谈一下VB6和VBA的坐标系统
  4. 2021年春季学期-信号与系统-第十二次作业参考答案-第四小题
  5. 第十六届全国大学生智能汽车竞赛华东赛区 承办情况汇报
  6. ATMEGA8 DIP-28面包板实验
  7. 测量几个光电传感器反向电容
  8. Jquery中获取select选中的文本与值
  9. 计算机后门做法正确的是,网络信息安全知识:张同学发现安全软件提醒自己的电脑有系统漏洞,如果你是张同学,最恰当的做法是?()...
  10. linux界面设计论文,毕业设计(论文)-基于linux的云校园桌面虚拟化系统的设计与实现.doc...