转
http://blog.sina.com.cn/s/blog_664558d30100qga9.html
实际工作过程中,常常会遇到将数据从一个数据库迁入到另外一个数据库,以sqlserver2005到oracle11G为例,使用的工具为kettle。
kettle是开源免费的工具,比起那些付费的ETL工具来说,要实惠的多。
下面介绍一下步骤吧:
1.新建一个转换
(图1)
2.配置输入组件
(图2)
(图3)
(图4)
双击图1中的输入,然后在图2中数据库连接处点新建,配置一下主机名,数据库类别(MS
SQLSERVER),数据库名,数据库用户名,数据库用户密码,最后别忘记了连接名,配置好后点击test按钮,test连接成功后,点击确认回到图2界面,点击‘获取SQL查询语句’,选中你要导出的数据库中的表,点击确定,则输入组件已经完成。
3.配置输出组件
输出组件的配置和输入组件大同小异。
(图5)
(图6)
双击图1中的输出组件,然后在图5中数据库连接处点新建,按照图6的红色指示配置一下主机名,数据库类别(MS
SQLSERVER),数据库名,数据库用户名,数据库用户密码,最后别忘记了连接名,配置好后点击test按钮,test连接成功后,点击确认回到图5界面,点击‘目标表’处的浏览按钮,找到对应的您想导入的oracle表,点击确定后,回到图5,勾选上specify
database fields,然后依次选取get fields 和enter field
mapping,匹配好各个项目之后,整个转换就建立完毕了,只需要保存然后运行一下即可,当然了,直接运行的时候,kettle会提示你是否自动保存,选择‘是’,以后就都自动保存了。
注意事项:
在最近的几次实践中,发现,由于sqlserver和oracle对于控制以及‘是否’这样的逻辑词的描述不一样,所以,经常如果照搬sqlserver的数据类型到oracle中,kettle会报错,导致无法正常运行,解决的办法就是,将sqlserver中出现‘null’值的number型数据,建立oracle数据类型的时候,建立为varchar2()型;将‘是否’类的逻辑词也建立为varchar2()型,因为sqlserver是用0和1来表示false和true的,但是,oracle中用的是‘N’,'Y'。