datastage运行时错误总结(更新中)

问题一:根据给出的id信息找到表,列!!!

SQL0407N  Assignment of a NULL value to a NOT NULL column "TBSPACEID=2, TABLEID=50, COLNO=8" is not allowed.  SQLSTATE=23502 

解决:

上面的错误信息没有直接给出table名,可以通过下面的语句得到table和column

SELECT * FROM SYSCAT.TABLES WHERE TBSPACEID = 2 AND TABLEID = 50


SELECT * FROM SYSCAT.COLUMNS WHERE  TABNAME= '*******' AND COLNO = 8

---当然你也可以写在一起

SELECT tabschema, tabname, colname
FROM syscat.columns
WHERE colno = ... AND
( tabschema, tabname ) IN
( SELECT tabschem, tabname
FROM syscat.tables
WHERE tbspaceid = ... AND
tableid = ... )
--

问题二:乱码问题

在DSEnge目录下的dsenv中添加如下内容。 LANG=zh_CN.GB18030;export LANG LC_ALL=zh_CN.GB18030;export LC_ALL LC_CTYPE=zh_CN.GB18030;export LC_CTYPE LC_COLLATE=zh_CN.GB18030;export LC_COLLATE LC_MONETARY=zh_CN.GB18030;export LC_MONETARY LC_NUMERIC=zh_CN.GB18030;export LC_NUMERIC LC_TIME=zh_CN.GB18030;export LC_TIME LC_MESSAGES=zh_CN.GB18030; export LC_MESSAGES

--


 DataStage是Ascential的ETL工具,后为被IBM收购了,现在已经是WebSpare的一个组件了!


      以前按安装文档来安装的DataStage,一直是没有问题的。可是现在到了苏州这边,却出了问题,原因是有些字是GB2312识别不出来了,比如说这个字“旻”字。


     折腾了几天,总算有了些经验,终于解决了这个问题,配置如下:
     用户的.bash_profile里面:NLS_LANG=AMERICAN_AMERICA.ZH16GBK,如果说开发机器是Windows,那注册表项:[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1] 中 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 这是为了能够在客户端正确地显示字符。
DataStage Administration Client 选中自己的工程,点击NLS,查看其中的确Parallel Maps项,Dafault map name:直接输入GBK。
PXEngine\etc\Oracle_cs.txt 这个文件是Oracle和DataStage之间交互用的,添加以下二行:
    GBK     ZHS16GBK
    ZHS16GBK  GBK
    做好以上三点,应该就没事了

问题三:补丁问题

datastage在运行时总是遇到这问问题,但是在项目重建之后好个一天半天的问题又出现了!据说是补丁问题!我们现在用的版本是8.7.0.0,,据说升级到8.7.0.1!!!!
a call to an OLe server has failed ,or runtime error occurred  within  the ole itself


error calling subroutine :DSR_EXECJOB (action=5)


重建客户端或许有用,把之前说有练过的客户端重新安装一遍!!!注意卸载的时候记得删除注册表!具体详见网址:http://www-01.ibm.com/support/docview.wss?uid=swg21456615
但是我安装上面删除了注册表之后客户端的DB2无法启动了,
报错如下
DB@JAVIT : RC=9501
DB2INSTANC : -2029059760


cannot create odbc ENV...  handle
然后我就想卸载DB2重装,最可恶的是DB2 竟然卸载不了,没方法办法,强制卸载!!方法见我DB2栏目的博客!!
但是我在用那种方法试了之后不管用,没办法,就把新安装的datastage客户端谢了,把所有的有关IBM的注册表都清了,但是安装的时候好像还是报错,没办法,换另一个版本的DB2重装了!!


问题四:ds的transformer报找不到输入字段错误

ds的transformer报找不到输入字段错误,但是经过仔细的排查,发现字段是select出来且各个stage(join)都引用了的!!why
原来是我在select该字段的时候用了trim,但是该字段本来的类型是decamal!!!trim之后自动转化成varchar,类型不匹配,transformer不识别





问题五:job运行失败但是数据正常插入

报错如下:
IFS_CUSTINDEX,0: SQLFetch reported: SQLSTATE = 22018: Native Error Code = -420: Msg = [IBM][CLI Driver][DB2/AIX64] SQL0420N  Invalid character found in a character string argument of the function "DECFLOAT".  SQLSTATE=22018 (CC_DB2DBStatement::dbsFetch, file CC_DB2DBStatement.cpp, line 1,986)

找了半天不知道原因在哪里;
后来原来是
在写sql的where条件式 比如 ”where class=3 “ class为varcha类型!就这样报错了,view data的时候是没有问题的!

看了http://www-01.ibm.com/support/docview.wss?uid=swg21448700之后,隐约知道是数据类型的问题,但是他隐藏的实在是太深了!


问题六:transformer之后行减少很多
报错如下
Transformer_31,0: Field 'APT_Decimal::ErrorBase: From: divizor is 0 via exception..' from input dataset '0' is NULL. Record dropped.

搜到这个网站
http://www.dsxchange.com/viewtopic.php?p=411460

是这样说的
Detect which input columns to that Transformer stage contain nulls and which operation (stage variable, constraint expression, derivation expression) is having problems handling null because it contai ...


Are you doing any division operations in the last transformer? And if so, are he columns used for division have zero or null in them?


果然,我在做除的时候尽管做了分母是否为0的判断,但是在除的时候竟然把分子写成了分母!故导致问题!













你可能感兴趣的:(Datastage,Question)