datastage字符集问题

使用DataStage将数据源文件数据导入到DB2中时,发现有个别中文字缺失。

当时第一反应是DataStage中字符集设置不正确。然而先后将Source,TargetTable,Job Properties的NLS更改后
(几乎用遍了里面所提供的字符集 其中能在viewData时正确显示的是 MS936,None是忽略字符集即原来是什么样就是什么样。
这个的话有时候会照成分隔符识别错误。),但是问题依旧。

看来不是DataStage的问题,因为在选择MS936时 ViewData是可以正确显示哪些缺失的中文字的。
由于项目中DataStage是装在AIX上的,怀疑是AIX字符集设置问题。或者是DB本身的字符集不支持。

作个试验,使用本地windows上的DataStage向同一个DB中插入相同的文本数据,ok,中文无缺失。
那么就排除了DB不字符集不支持的情况。将该文本copy到AIX上,用vi打开。果然那些中文字无法正常显示。

经多方求教,得出结论。DataStage在将数据插入到DB前,先用其所在的机器上的DB Client进行字符集转换。
而DBClient所用的字符集又是其所在操作系统上的。所以才会有AIX上插入时有中文缺失,而在windows平台上往DB插入,无此类情况发生


DataStage与字符集转换问题?
我有两个Oracle数据库,test1 & test2
其中,test1的字符集是BGK,test2的字符集是we8iso8859-1
我要把test1中的数据(包括中文数据)导入test2,
怎么做字符集转化?

NLS测试结果:
在DataStage中设置字符集,有时候发生数据丢失(只要该行有中文),有时候导过去
是乱码。

我“究竟做错了什么?”——到底该怎么办


1。定义两个job,gbkout & isoin
2。gbkout是oracle->seq file,seq file选name pipe,起名字例如test
3。isoin是seq file->oracle,seq file也选name pipe,名字跟上面一样
4。gbkout的jobcontrol加一行脚本
Call DSExecute("UV","ENV SET NLS_LANG=AMERICAN_AMERICA.ZHS16GK",status,status)
5。isoin的jobcontrol加一行脚本
Call DSExecute("UV","ENV SET NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1",status,status)
6。执行两个job,先后顺序无所谓,先起的会等后起的

主要就是通过name pipe拆成两个任务,在不同的任务里面动态修改自己的环境变量,这样就可以数据不落地了。

在一个进程里面oracle只认一个环境变量,所以必须拆分两个进程然后分别修改环境变量。看看文档dsexcute吧

相关文档
最新文档