kettle进行数据迁移遇到的问题

简介:

使用kettle进行oracle或db2数据导入到mysql或postgres数据库过程中遇到以下问题,以下只是一个简单描述,详细的说明以及所做的代码修改没有提及。下面所提到的最新的pdi程序是我修改kettle源码并编译之后的版本。

同时运行两个pdi程序,例如:一个为oracle到mysql,另一个为oracle到postgres,其中一个停止运行

  • 原因:从oracle迁移到mysql创建的作业和转换文件和oracle到postgres的作业和转换保存到一个路径,导致同名称的转换相互之间被覆盖,故在运行时候会出现混乱。
  • 解决办法:将新建的作业和转换分别保存在两个不同的路径,最好是新建两个不同路径的仓库,关于如何新建仓库,请参考《kettle使用说明》文档。

关键字的问题。

Oracle初始化到mysql,关键字前面会加上前缀“MY_”。如果在建表的时候出现错误,则需要检查表的字段中是否有关键字。

  • 解决办法:出差的表单独进行处理,新建一个转换,实现关键字段该名称然后初始化出错的表。具体操作参见文档。

oracle中的字段名从中可以有#号,但是到mysql会报错

  • 解决办法:字段改名称,去掉#号

Db2初始化到mysql或是postgres出错

  • 原因:1)db2数据库连接用户没有权限访问出错的表;2)出错的表名存在小写字母
  • 解决办法:使用更新后的pdi程序,更新后的程序会将db2的表名使用双引号括起来。

Oracle到mysql和pg时日期类型数据值有偏差

  • 原因:从oracle中读取日期类型的数据时候,读取结果与oracle数据库中的数据已经存在偏差。少数记录使用oracle10g的驱动读取数据少一个小时,用oracle11g的驱动会多一个小时,该问题尚待oracle工程师给出解决方案。

主键从ORACLE导入不到MYSQL和POSTGRES

  • 原因:pdi程序中没有对主键进行处理
  • 解决办法:使用更新的pdi程序,执行Tools####Wizzard####Copy Tables Extension…功能添加主键;执行Tools####Wizzard####Copy Tables Data Only…功能可以只复制数据

Oracle中存在ascii字符导入到postgres时候报错:ERROR: invalid byte sequence for encoding “UTF8”: 0x00

  • 原因:PostgreSQL内部采用C语言风格的字符串(以0x00)表示结尾,因而不允许字符串中包括0x00,建议在转换时先对字符串类型的数据进行清洗,也就是增加一个节点用于删除字符串数据中的特殊字符0x00。
  • 解决办法:使用新的pdi程序。在kettle的DataBase类中修改PreparedStatement.setString(int index,String value)方法传入的参数,将value的值trim之后在setString

异构数据库之间的类型兼容问题。日期类型和时间类型的数据初始化到mysql或postgres中都为时间类型的数据,导致数据对比时候数据不一致。

  • 原因:Pdi程序中的类型转换采用的是向上兼容的方式,故日期和时间类型都转换为时间类型数据。
  • 解决办法:针对与db2数据初始化到mysql和postgres,该问题在最新的pdi程序中已经处理。因为oracle中的日期类型字段既可以存日期又可以存时间,故没针对oracle数据做出处理。

Db2中没有主键的数据初始化到mysql和postgres需要添加索引

  • 解决办法:使用最新的pdi程序,最新的pdi程序会添加主键和索引。

Db2中decimal(n,m)类型的数据初始化到postgres数据库被四舍五入。

  • 原因:Db2中decimal(n,m)类型的数据初始化到postgres中的类型不对。
  • 解决办法:使用最新的pdi程序。

导数据中途时没有报错,直接软件退出

  • 原因:1)jvm内存溢出,需要修改jvm参数;2)pdi程序报swt错误
  • 解决办法:修改jvm参数

初次使用kettle做db2的初始化会报错

  • 原因:kettle中的db2的jdbc驱动与使用的db2版本不对应。
  • 解决办法:从db2的安装目录下拷贝jdbc驱动到kettle目录(libext/JDBC)下
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
数据库连接 数据库
kettle开发篇-流查询
kettle开发篇-流查询
874 0
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
868 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
Linux Android开发 Windows
ADB和Fastboot最新版的谷歌官方下载链接
ADB和Fastboot for Windows https://dl.google.com/android/repository/platform-tools-latest-windows.zip ADB和Fastboot for Mac https://dl.
9740 0
|
机器学习/深度学习 人工智能 安全
利用 AI 进行代码优化:智能化代码审查的新纪元
【10月更文挑战第24天】本文探讨了AI在代码优化和审查中的应用,介绍了AI如何通过静态代码分析、代码风格一致性、历史数据学习和实时反馈等功能提升代码审查效率。文章还介绍了几款智能化代码审查工具,如SonarQube、DeepCode和GitHub Copilot Security,并提供了实施AI代码审查的最佳实践,帮助开发者提高工作效率和代码质量。
|
机器学习/深度学习 人工智能 监控
生成式 AI 与 LangCHain(二)(4)
生成式 AI 与 LangCHain(二)
1210 5
|
人工智能 自然语言处理 搜索推荐
|
SQL 关系型数据库 MySQL
ETL工具 Kettle 中怎么通过变量传参
ETL工具 Kettle 中怎么通过变量传参
2098 0
|
存储 数据中心 Windows
GPT和MBR的区别
GPT和MBR的区别
1368 1
GPT和MBR的区别
|
JavaScript 前端开发 API
如何在 Vue 中进行数据持久化(例如与后端数据库交互)?
如何在 Vue 中进行数据持久化(例如与后端数据库交互)?
517 3
|
关系型数据库 MySQL 数据库
龙蜥操作系统上安装MySQL:步骤详解与常见问题解决
龙蜥操作系统上安装MySQL:步骤详解与常见问题解决
2018 0