欢迎来到天天文库
浏览记录
ID:9295871
大小:115.50 KB
页数:4页
时间:2018-04-27
《datastage routine示例---提取job错误信息录入到数据库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、DatastageRoutine示例——使用Routine提取JOB错误信息录入数据库环境:RedHatLinuxAS4+DatastageEE7.5.2+Oracle10g##在此感谢一下金证科技的LiBin和WangJun,是他们带我学习Datastage的!目标:使用Routine将JOB运行后的错误信息录入数据库(暂时忽略警告信息)方案:ServerRoutine调用Shell脚本,Shell脚本调用存储过程,存储过程把传递的参数信息写入数据库表实现过程:1.创建ServerRoutine,命名DSJobLog,系统默认DSJ开头的Routine为内置(Built-in)Rou
2、tine,类型为Before/AfterSubroutine2.编写Routine的Code,代码及注释如下:***************************************************************************ROUTINE名称:DSJobLog **ROUTINE类型:ServerSubroutine **ROUTINE功能:提取JOB运行后的错误日志并写入数据库
3、 **ROUTINE输入参数1:InputArg **ROUTINE返回参数1:ErrorCode **ROUTINE作者:wangfei(wangfei04403@msn.com) **ROUTINE日期:20100623 **********************************************
4、***************************$INCLUDEDSINCLUDEJOBCONTROL.H*设定返回值ErrorCode=0*设定当前运行的JOBJobHandle=DSJ.ME*设定变量cmdstr,存储shell命令及参数cmdstr="sh/home/dsadm/EDCETL/SH/PARA/etl_log.sh"*如果状态为失败,则产生错误日志*设定变量LogList并初始化,存储JobLog信息 LogList=""*判断运行subroutine前JOB的执行状态(DSJ.JOBINTERIMSTATUS)*如果产生错误(代码为3),则将error信息
5、存储于动态数组Summary中(1为INFO,2为WARN,3为FATAL) ifDSGetJobInfo(JobHandle,DSJ.JOBINTERIMSTATUS)=3then Summary=DSGetLogSummary(JobHandle,DSJ.LOGFATAL,DSGetJobInfo(JobHandle,DSJ.JOBSTARTTIMESTAMP), DSGetJobInfo(JobHandle,DSJ.JOBLASTTIMESTAMP),10)*通过循环先取到错误事件的ID(EvtID),然后依据Evt
6、ID获得错误信息 *循环开始 FORI=1TO10 EvtID=Field(Summary,'',1) ifEvtID=""then exit end LogList=LogList:DSGetLogEntry(JobHandle,EvtID):"ZhongTu" NEXTI *循环结束 end*如果状态为失败,则产生错误日志*开始拼接shell命令的参数*Char(34)在VB中是双引号,这里必须添加双引号以便Shell脚本能够正确的把带单引号的参数传递给存储过程cmdstr=cm
7、dstr:Char(34):"'":DSGetJobInfo(JobHandle,DSJ.JOBNAME):"'":Char(34):""cmdstr=cmdstr:Char(34):"'":DSGetJobInfo(JobHandle,DSJ.JOBSTARTTIMESTAMP):"'":Char(34):""cmdstr=cmdstr:Char(34):"'":DSGetJobInfo(JobHandle,DSJ.JOBLASTTIMEST
此文档下载收益归作者所有