Datastage Routine示例---提取JOB错误信息录入到数据库

上传人:飞*** 文档编号:43539937 上传时间:2018-06-06 格式:DOC 页数:4 大小:115.50KB
返回 下载 相关 举报
Datastage Routine示例---提取JOB错误信息录入到数据库_第1页
第1页 / 共4页
Datastage Routine示例---提取JOB错误信息录入到数据库_第2页
第2页 / 共4页
Datastage Routine示例---提取JOB错误信息录入到数据库_第3页
第3页 / 共4页
Datastage Routine示例---提取JOB错误信息录入到数据库_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《Datastage Routine示例---提取JOB错误信息录入到数据库》由会员分享,可在线阅读,更多相关《Datastage Routine示例---提取JOB错误信息录入到数据库(4页珍藏版)》请在金锄头文库上搜索。

1、DatastageDatastage RoutineRoutine 示例示例使用使用 RoutineRoutine 提取提取 JOBJOB 错误信息录入数据库错误信息录入数据库环境:Red Hat Linux AS 4 + Datastage EE 7.5.2 + Oracle 10g#在此感谢一下金证科技的 Li Bin 和 Wang Jun,是他们带我学习 Datastage 的!目标:目标:使用 Routine 将 JOB 运行后的错误信息录入数据库(暂时忽略警告信息)方案:方案:Server Routine 调用 Shell 脚本,Shell 脚本调用存储过程,存储过程 把传递的参数信

2、息写入数据库表实现过程:实现过程: 1.创建 Server Routine,命名 DSJobLog,系统默认 DSJ 开头的 Routine 为内置 (Built-in)Routine,类型为 Before/After Subroutine2.编写 Routine 的 Code,代码及注释如下:* * *ROUTINE 名称: DSJobLog *ROUTINE 类型:Server Subroutine *ROUTINE 功能:提取 JOB 运行后的错误日志并写入数据库 *ROUTINE 输入参数 1:InputArg *ROUTINE 返回参数 1:ErrorCode *ROUTINE 作者

3、:wangfei () *ROUTINE 日期: 20100623 * *$INCLUDE DSINCLUDE JOBCONTROL.H*设定返回值 ErrorCode = 0*设定当前运行的 JOB JobHandle = DSJ.ME*设定变量 cmdstr,存储 shell 命令及参数 cmdstr=“ sh /home/dsadm/EDCETL/SH/PARA/etl_log.sh “ * 如果状态为失败,则产生错误日志*设定变量 LogList 并初始化,存储 JobLog 信息LogList =“*判断运行 subroutine 前 JOB 的执行状态(DSJ.JOBINTERIM

4、STATUS) *如果产生错误(代码为 3),则将 error 信息存储于动态数组 Summary 中(1 为 INFO,2 为 WARN,3 为 FATAL)if DSGetJobInfo(JobHandle,DSJ.JOBINTERIMSTATUS) = 3 thenSummary=DSGetLogSummary(JobHandle , DSJ.LOGFATAL, DSGetJobInfo(JobHandle,DSJ.JOBSTARTTIMESTAMP), DSGetJobInfo(JobHandle,DSJ.JOBLASTTIMESTAMP), 10)*通过循环先取到错误事件的 ID(E

5、vtID),然后依据 EvtID 获得错误信息*循环开始FOR I=1 TO 10EvtID = Field(Summary,1)if EvtID = “ thenexitendLogList =LogList : DSGetLogEntry(JobHandle ,EvtID):“ZhongTu“NEXT I *循环结束end *如果状态为失败,则产生错误日志*开始拼接 shell 命令的参数 *Char(34)在 VB 中是双引号,这里必须添加双引号以便 Shell 脚本能够正确的 把带单引号的参数传递给存储过程 cmdstr=cmdstr:Char(34) :“:DSGetJobInfo(

6、JobHandle,DSJ.JOBNAME):“:Char(34):“ “ cmdstr=cmdstr:Char(34) :“:DSGetJobInfo(JobHandle,DSJ.JOBSTARTTIMESTAMP):“:Char(34):“ “ cmdstr=cmdstr:Char(34) :“:DSGetJobInfo(JobHandle,DSJ.JOBLASTTIMESTAMP):“:Char(34):“ “ cmdstr=cmdstr:Char(34) :“:DSGetJobInfo(JobHandle,DSJ.JOBINTERIMSTATUS):“:Char(34):“ “ cmd

7、str=cmdstr:“1“:“ “ cmdstr=cmdstr:Char(34) :“:LogList:“:Char(34) *结束拼接 shell 命令的参数*执行 Shell 脚本 Call DSExecute(“UNIX“, cmdstr, Ans, SystemReturnCode)3.其他标签页的内容默认即可,保存并编译!4.在 Job 中调用该 Routine,打开一个 JOB,在 JOB 属性中选择 Routine 即可。5.Linux 系统下编写 Shell 脚本,命名 etl_log.sh,脚本代码如下:#* # # 程序名: etl_log.sh # 执行环境: /hom

8、e/dsadm/EDCETL/SH 目录下 # 程序描述: 调用存储过程将 JOB 日志信息写到数据库中# 输入参数: # 输出参数: # 编写人员: wangfei() # 创建日期: 2010.06.24 # 代码版本: V1.0 # #*if $# -ne 6 then exit 2 fi#参数文件、日志文件、临时文件存放路径 PARAPATH=/home/dsadm/EDCETL/SH/PARA#参数文件 ETLCFG=$PARAPATH/etl_configure.cfg#获取控制 ETL 运行的数据库服务器信息 DBNAME=$(awk -F= /DBNAME_CTL/print

9、$2 $ETLCFG) DBUSR=$(awk -F= /DBUSR_CTL/print $2 $ETLCFG) DBPWD=$(awk -F= /DBPWD_CTL/print $2 $ETLCFG)VALUE=sqlplus -s $DBUSR/$DBPWD$DBNAME ENDset pagesize 0 feedback off verify off heading off echo offcall SP_GEN_ETL_LOG($1,$2,$3,$4,$5,$6);exit;END echo “$VALUE“ exit 0 #-EOF-#6.在 Oracle 中编写存储过程 SP_GEN_ETL_LOG,将错误信息写入数据库,在此 省略存储过程代码!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号