又是隔了好久,好久都没有写Kettle的学习笔记了。可能最近有些懒惰吧!好了话不多说,这次就来记录一下我最近处理oracle 9i迁移数据到达梦数据库的全程吧!

   首先,来描述一下我的环境吧!

1、pdi-ce-5.0.1(一个比较新的版本)

2、oracle 9i(一个比较古老的版本)

3、达梦7(一个国产高仿oracle的收费数据库)

   然后是接下来的步骤。

1、创建transformations就不用多说了。

2、然后是最简单的拖拽操作,表输入,表输出。

3、按住shift,单击关联这两个步骤。

4、创建数据库连接(忘记说一点,到这一步的时候往往kettle提示can's load class ....driver.class什么的),这就说明我们没有想kettle中加入数据库的jdbc.jar

5、保存转换,关闭kettle

6、向kettle中添加jdbc.jar(ps:这里需要重点强调一下,kettle升级到5.x的时候,有一个lib的改动,以前我们的jdbc.jar会放到libext/jdbc路径下。现在5.x版本需要放到lib下才能load)由于知道oracle安装时会将jdbc放入安装的路径下,所以使用默认的ojdbc14.jar

7、重新启动kettle

8、重复4步骤 创建oracle连接

9、重复4步骤 创建达梦连接(需要说明一下,由于达梦数据库是国产且知名度不高,所以kettle没有直接支持数据库连接选项,我们要选择Generic database来创建通用的jdbc连接)

   下面就可以进行数据迁移了,普通数据类型是没有问题的。但是有一个表中出现了blob这种大字段,存储空间达到了4G。这样在表输入这个步骤就会出现问题。大致是(For input string:"4294967295")这样的。根据我的查询是由于jdbc的resultset的问题。但是一直没有解决,但是我想了想,如果是使用jdbc的话,有没有可能换个jdbc.jar就可以了呢?

   我抱着试试看的态度,改用了高版本的ojdbc6.jar。导入之后发现,大字段也可以正常读取和迁移了,就在我欣喜若狂的时候,我发现一个很严重的问题,其他普通数据类型的字段查询出来的值都为空串,这样一来我的好心情荡然无存了。

   经过分析,如果说高版本的驱动可以通过表输入的查询语句,那么就尝试一下比ojdbc14.jar高一个版本的ojdbc5.jar来试试运气吧!通过测试真的好用。

   如果大家遇到这样的问题可以通过我的笔记得到答案!