kettle7.0下实现数据库整体迁移
来源:互联网 发布:苏州慧博网络是坑吗 编辑:程序博客网 时间:2024/05/20 08:44
一、采用软件自带方式
1.新建一个job,创建两个DB连接:source、target(源数据库和目标数据库连接),在菜单中找到【复制多表向导】,点击进行相关操作:
2.选择源数据库和目标数据库
3.选择所需迁移的表
4.编辑生成的job文件名:qy.kjb,和文件目录,编辑好后【Finish】
5.运行qy.kjb,可在test2数据库中看到成功生成迁移来的表。
二、自定义数据库迁移(oracle >> mysql)
1.创建一个主job:数据库迁移.kjb
2.创建转换:获取表名称.ktr
1) 创建一个DB连接:oraclesource(源数据库连接)
2) 表输入
注:oracle中获取表名SQL:select * from user_tables,mysql中为:show tables
3) 字段选择
点击【获取选择的字段】,添加新的字段,选中"TABLE_NAME"并改名成“tablename”,将其余字段删除
4)添加一个【复制记录到结果字符串】
3.新建一个job:抽取表.kjb
1) 新建一个DB连接:mysqltarget
4. 新建一个转换:表名称变量设置.ktr
1) 添加一个【从结果获取记录】
2)添加一个【设置变量】
5.添加一个【检查表是否存在】
6.新建一个转换:创建目标库表结构.ktr
1) 新建两个DB连接:oraclesource,mysqltarget
创建过程同上
2)添加一个【表输入】
3)添加一个【Java代码】,代码如下:
public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException{ Object[] r = getRow();//本地连接获取数据库元数据//org.pentaho.di.core.database.DatabaseMeta dbmeta = getTransMeta().findDatabase("target");//资源库连接获取数据库元数据org.pentaho.di.core.database.DatabaseMeta dbmeta = null;java.util.List list = getTrans().getRepository().readDatabases();if(list != null && !list.isEmpty()){for(int i=0;i<list.size();i++){dbmeta = (org.pentaho.di.core.database.DatabaseMeta)list.get(i);if("target".equalsIgnoreCase(dbmeta.getName())){break;}}}if(dbmeta!=null){org.pentaho.di.core.database.Database db=new org.pentaho.di.core.database.Database(dbmeta);try{db.connect();String tablename = getVariable("TABLENAME");//在日志中显示创建表名logBasic("开始创建表:" + tablename);if(tablename!=null && tablename.trim().length()>0){//获取表名称和输入行数据String sql = db.getDDLCreationTable(tablename ,getInputRowMeta());db.execStatement(sql.replace(";", ""));//在日志中显示sql语句logBasic(sql);}}catch(Exception e){logError("创建表出现异常",e);}finally{db.disconnect();}}return false;}7. 新建一个转换:表抽取.ktr
1)新建两个DB连接:oraclesource,mysqltarget。
创建过程同上
2) 添加一个【表输入】
3)添加一个表输出
8.运行数据库迁移.kjb
在mysql数据库test2中成功生成迁移的所有表
注:1.此方案是在资源库环境下创建并运行的,需要登陆资源库。
2.此方案下载地址:点击打开链接
存在问题:当源数据库中存在空表时,会报以下错误:
2017/04/19 14:57:05 - 创建表结构.0 - 开始创建表:KFYQGX
2017/04/19 14:57:05 - 创建表结构.0 - ERROR (version 7.0.0.0-25, build 1 from 2016-11-05 15.35.36 by buildguy) : 创建表出现异常
2017/04/19 14:57:05 - 创建表结构.0 - ERROR (version 7.0.0.0-25, build 1 from 2016-11-05 15.35.36 by buildguy) : java.lang.NullPointerException
2017/04/19 14:57:05 - 创建表结构.0 - at org.pentaho.di.core.database.DatabaseMeta.quoteReservedWords(DatabaseMeta.java:2352)
2017/04/19 14:57:05 - 创建表结构.0 - at org.pentaho.di.core.database.Database.getDDLCreationTable(Database.java:4441)
2017/04/19 14:57:05 - 创建表结构.0 - at Processor.processRow(Processor.java:45)
2017/04/19 14:57:05 - 创建表结构.0 - at org.pentaho.di.trans.steps.userdefinedjavaclass.UserDefinedJavaClass.processRow(UserDefinedJavaClass.java:1018)
2017/04/19 14:57:05 - 创建表结构.0 - at org.pentaho.di.trans.step.RunThread.run(RunThread.java:62)
2017/04/19 14:57:05 - 创建表结构.0 - at java.lang.Thread.run(Thread.java:745)
此问题还未解决,要是哪位仁兄解决了还望告知一下,共同探讨下
- kettle7.0下实现数据库整体迁移
- kettle7.0将本地文件入oracle数据库
- kettle7.0+ 创建资源库
- Shell 数据库迁移实现
- Kettle实现数据库迁移
- 数据库迁移--java实现
- Windows下实现Mysql数据库版本更换、数据迁移
- Kettle7.1 创建数据库资源库方法整理
- 【解决问题】完成从Mysql到SQLite数据库的整体迁移
- MongoDB分片环境下整体数据迁移解决方案
- Ubuntu下MySQL数据库迁移
- domino整体迁移办法
- rman实现oracle数据库迁移
- 数据库迁移怎么实现啊
- python实现数据库迁移脚本
- Flask-Migrate实现数据库迁移
- Kettle7.0抽取GIS数据到翰云库
- imp和exp命令对Oracle9i+SDE空间数据库的整体备份、恢复或迁移
- QT设置单元格格式
- 阿里云 使用镜像mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 使用镜
- 题目1113:二叉树
- 数据库中定义触发器实现:从多张表随机抽取数据组合成一张新表
- redis简单了解和使用
- kettle7.0下实现数据库整体迁移
- shlwapi常用的操作路径函数
- [JZOJ5068]树
- Android 自定义卫星式弧形菜单
- SuperMap iServer REST API介绍
- JS实现浏览器的title闪烁、滚动、声音提示、chrome通知
- vue嵌套路由(二)
- Eclipse删除代码中的空行
- iOS接口的RSA加密算法