unix/linux shell、c/c++、java、oracle pl/sql、db2 sql pl、informatica
分类: Sybase
2012-03-13 23:51:46
某(可见如下图的)节点failed 了,报障过来,我们这边的同事检查可能是脚本的问题,认为是调用子shell脚本的问题(可见如下程序片断),将里面的 . lastdate.sh改成了 . ./ lastdate.sh, . nextday.sh改成了./nextday.sh,然后测试,运行了将近一天都没结束,此问题便转到了我手
shell片断:
#!/bin/sh
cd /file2/ods/cbill_sum/CNet/cdma_yff
. ./lastdate.sh
if [ $# -lt 1 ]; then
time_date=${lastdate}
else
time_date="$1"
fi
./nextday.sh ${time_date}
next1date=${next_date}
排查步骤:
1、 为什么测试用了这么久,平时运行个把小时就完成了
首先这个脚本的逻辑是:取相应日期相应目录外系统送过来的不同业务类型的文件的相应字段,并且加上类型标识字段进行sybase IQ 入库,后面再调一个存储过程进行相应的处理。
查日志,看到连去年的文件都在处理的范围,处理生成的结果文件也超级大(10G以上),而且按类型处理的顺序,第一种都还没处理完。因相应日期是从子shell 脚本里获取的,于是我截取脚本上面相应片段并在后面加了句 echo "next1date ${next1date}" ,进行测试,运行结果:
$ ./t_getdate.sh 20120306
20120307
next1date
$
可以看出并没有获取日期,而获取文件的语句
ls|grep "YFF_CDMA${_listtype}_ACCT.${next1date}"|while read _file_name
出现上面的问题也就不奇怪了!
其实上面两个脚本都改为 . ./ 或者恢复原来的样子 .
于是更正被错改的地方,继续测试
2、 在测试过程中报调用 Sybase 存储过程时报错
[2012/03/09 00:31:32] load data done.
Error in file "/file2/ods/cbill_sum/CNet/cdma_yff/CALL_SP_TB_BILL_SUM_SERV_POSI_YF_DAY.sql" at line 2
Query rejected because it exceeds resource: Query_Temp_Space_Limit
--(dfo_Root.cxx 778)
网上查了下资料
于是脚本备份,并再修改如下:
echo "set temporary option Query_Temp_Space_Limit=0;">${cxdir}/CALL_SP_TB_BILL_SUM_SERV_POSI_YF_DAY.sql
echo "call SP_TB_BILL_SUM_SERV_POSI_YF_DAY('${time_date}');">> ${cxdir}/CALL_SP_TB_BILL_SUM_SERV_POSI_YF_DAY.sql
echo "exit;">>${cxdir}/CALL_SP_TB_BILL_SUM_SERV_POSI_YF_DAY.sql
第一行是新增的,第二行的>改为>> 于是再重跑,成功跑过!
3、 恢复自动调度
先UnSchedule ,然后再 Schedule ,检查第二天的自动调度生成正常