Dastage经验总结
\模式就是限制字符串只能包含八个字符,并且前五个字符必须是字母,第六个字符是下划线\,最后两个字符必须是数字。字符串\能匹配上这种模式,而字符串\或者\都不满足这种格式要求。
如果规则变成\,这个模式就是限制字符串的前五个字符必须是字母,第六个字符是下划线\,而最后两个字符必须是非数字的字符,例如:\能和这个规则匹配上。这时,字符串\不再符合新规则的要求,字符串\也不能满足要求。
(7).对编写好的代码进行编译。用户只需要点击图8中的编译(Compile)按钮即可,编译的结果出现在New Server Routine编辑窗口中Code标签页面的下部区域内。使用编译器对程序进行编译不仅可以帮助用户检查程序中潜在的语法错误,更重要的是,编译成功后的源代码将转化为可执行的对象代码(object code)。
3 DS中常见问题记录
3.1 权限管理问题
DATASTAGE开发权限上处理,非DSTAGE组用户无法登陆DS,如果将其放入DSTAGE组,由于DS是根据组来控制权限所以会造成可以访问其他project。如何处理非DSTAGE组的用户授权,让其只访问自己的project ? 答:
先建立一个组,在建立一个user,将该用户放在该组中,然后给../Ascential/DataStage目录下的DSEngine和PXEngine.751.1、PXEngine.751.2、PXEngine、DSParallel、Scratch目录包括其子目录赋777权限,收回project目录下的其他项目的可读权限。假设该用户只能访问training这项目,那么给该项目赋可读写权限。
添加datastage用户: 进入smit 3.2 job may be being monitored或者是cleanup问题
在datastage中有一个job名为N_Cv_DataStore_TT_PART_LEND_ITEM和N_Cv_ServiceLink_TT_SGM_PT_ADVANCERATE不可以编译,报job may be being monitored,但是找不到任何进程在调用该job. 答:
在Director中选中该Job,到菜单中选择Job--Clear Status File即可解决。
3.3 删除文件的问题
会有要手动清理日志状态文件的情况出现
Cannot get exclusive access to executable file for job I_Cv_DOL_TM_ORG_TYPE - job may be being monitored. 怎么解决? 答:
Individual 2007-10 21 /
64
Dastage经验总结
如果清除不成功,可以使用更高权限的用户进行清除。
3.4 sequence调度出现的错误问题
手动编译相关JOB后,有的JOB的失败因为下面这个错误。 GC job 显示FINISH 但SC JOB显示 finish(see log) 里面的错误提示是:
I_Ss_Source_DOL..JobControl (fatal error from @Coordinator): Sequence job will abort due to previous
unrecoverable errors。
a. CNTR_WDolTmOrgTypeCif,0: Unable to run job - -2. 答:
是由于系统资源不够引起,建议减少并行运行的job个数 。
3.17 字符集问题
DataStage全局字符集设为UTF-8,抽取Oracle GB2312字符集的数据源、SQL Server GB2312字符集的数据源及GB2312字符集的CSV格式文本文件时无法正常处理 ? 答:
采用GBK字符集 。 3.18 VersionControl的问题
将可以正常运行的JOB提交到VersionControl后,再从VersionControl提交到167上运行,程序报NLS Mapping error的Warning,中文字符会变为乱码。 例如:167上的JOB N_Tr_EDS_TI_SWA_CLAIMS_ORIGIN_02
167上的工程SGMEDW与对应的VersionControl工程VERSION_EDS的NLS都已经设置成一致。
ERROR LOG:
N_Tr_EDS_TI_SWA_CLAIMS_ORIGIN_02.0.CNTR_WEdsTiSwaClaimsOriginLdf.SF_TI_SWA_CLAIMS_ORIGIN_LDF.LK01: nls_map_buffer_out() - NLS mapping error, row 1 (approx), row = \\\\\\ \
\ 0. 0.00 8.070200000 0.00 \\\\\\\\\\CHANGE OIL\\ 00000000. 00000000. \\ 00006476. 00010416. 0.00 0.00 \\91.19 735.93 \答:
两者版本不一致造成的,开发机器上DATASTAGE版本为7.5.1A升级到7.5.2版本就没问题了。
Individual 2007-10 22 /
64
Dastage经验总结
3.19 sequence调不起JOB的问题
Sequence Job 调不起相关的 JOB
错误提示: I_Ss_Source_Fo08..JobControl (@Fo08_TM_VEHICLE_PRODUCT): Controller problem: Error calling DSRunJob(I_Gc_Fo08_TM_VEHICLE_PRODUCT), code=-99 [General repository interface 'other error'] 答:
处理方法:编译重跑 。
3.20 sequence调度失败的问题
Sequence Job 自动失败
错误提示如下: Job control process (pid 835698) has failed 处理方法:编译重跑
3.21 用stage调用存储过程运行失败的问题
问题描述:最初用etlmain帐号在数据库中创建了一个存储过程,然后用stage来调用很正常;后来etlmain这个帐号被删除掉了,然后在用其他帐号来调用这个存储过程的时候就报如下截图上的错误(尽管其他帐号对这个存储过程拥有的权限和etlmain一样)!
Individual 2007-10 23 /
64
Dastage经验总结
解决方法:
用当前存在的帐号重新编译etlmain创建的相关存储过程(所谓编译其实就是删除重建),然后再调用就没有问题了。建议在创建存储过程的时候用高级别帐号去创建,例如root帐号,因为存储过程的属主帐号一旦被删除,那么存储过程也就需要重建了! 3.22 DS发送邮件的配置问题
DS中发送邮件需要做哪些配置? 答:
DataStage发送邮件的机制在windows平台和Unix平台是不相同的。
在windows平台,datastage内置了一个小程序叫dssmtpmail.exe,通过此程序可以发送邮件。 在UNIX平台DataStage通过调用/usr/lib/sendmail来发送邮件。
解决方法:需将SGM的SMTP服务器地址加入ETL的服务器的SMTP地址列表中
例如,在AIX环境中的配置如下: DataStage 发邮件设置
/etc/mail/ sendmail.cf 参数
Individual 2007-10 24 /
64
Dastage经验总结
DSsmtp:[210.75.71.180] dssendmail_template.txt
* On UNIX to run sendmail, the template looks like this (doesn't require a
/usr/lib/sendmail -t </// From: %from% To: %to%
Subject: %subject% Server: %server% %body%
3.23 随机错误问题
DataStage Sequence程序随机错误,错误是找不到/tmp目录下的该JOB的临时文件,重新编译后正常Run,错误描述:
I_Tr_EDS_TM_DOL_BRAND.#0.CNTR_WEdsTmDolBrandLdf_ins.LK05-Input.LK01: ds_ipcopen() - Error in open(/tmp/ade.SGMEDW.I_Tr_EDS_TM_DOL_BRAND.#0.CNTR_WEdsTmDolBrandLdf_ins.LK05-Input) - No such file or directory
解决方法:
目前修改了以下参数,连续两天未发现随机错误:
1.APT_MONITOR_SIZE to 100000 and APT_MONITOR_TIME to 5 2.可能是因为在Parallel Job中使用了Server Share Container导致的, 打开Project Property
确保已经选择Enable row buffer,并且选择Inter process 最终确认的原因:
1.Default.app设置的并行节点数为4,那对于一个Stage就会起4个进程,stage过多会导致资源耗尽 解决方案:
1.尽量降低并发度
2.首先采用1个节点运行,待稳定后逐步增加节点数,也可对复杂JOB进行 3.24 DS中的日期问题
在Datastage7.5.1A中,日期抽取问题,例如,时间问题,'2006-04-12'等日期在datastage中变为 '2006-04-11' 答:
问题原因:
dsenv 的TZ设置不能使用别名BEIST,缺省值为GMT0这表示格林标准时间 解决方法:
Datastage dsenv参数TZ=\GMT-8表示的就是北京时间
Individual 2007-10 25 /
64