免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6594 | 回复: 6
打印 上一主题 下一主题

shell脚本里面执行存储过程不成功?请大侠给看一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-15 21:36 |只看该作者 |倒序浏览
我写了一个脚本,里面涉及到存储过程如下:

echo "`date`运行存储过程 " >>$LOGFILE 2>&1
sqlplus -s  [email=$USERNAME/$PASSWD@$HOSTNAME]$USERNAME/$PASSWD@$HOSTNAME[/email] <<EOF  >>$LOGFILE 2>&1
exec ibss.p_gen_crm_to_ocs('${day_s}000000','${DATE}000000');  
EOF


手工执行是可以成功的,但是设置了定时器,存储过程居然不会运行。但是脚本里面的其它的语句都可以执行。
不用定时器,手工执行,有全部是成功的。
不知道是怎么回事?
谁能帮我分析一下原因?不胜感激!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
2 [报告]
发表于 2009-05-15 21:39 |只看该作者
用绝对路径试一试

论坛徽章:
0
3 [报告]
发表于 2009-05-15 22:07 |只看该作者
为什么不用oracle的job去调呢

论坛徽章:
0
4 [报告]
发表于 2009-05-16 10:46 |只看该作者

回复 #3 merlin852 的帖子

没有用过,不会,^_^

论坛徽章:
0
5 [报告]
发表于 2009-05-16 10:47 |只看该作者
原帖由 merlin852 于 2009-5-15 22:07 发表
为什么不用oracle的job去调呢



我就是用的绝对路径,不知道你说的绝对路径是指什么?是指
echo "`date`运行存储过程 " >>$LOGFILE 2>&1
sqlplus -s  [email=$USERNAME/$PASSWD@$HOSTNAME]$USERNAME/$PASSWD@$HOSTNAME[/email] <<EOF  >>$LOGFILE 2>&1
exec ibss.p_gen_crm_to_ocs('${day_s}000000','${DATE}000000');  
EOF


这个里面的什么路径么?

论坛徽章:
0
6 [报告]
发表于 2009-05-16 11:13 |只看该作者
原帖由 iceer1212 于 2009-5-15 21:36 发表
我写了一个脚本,里面涉及到存储过程如下:

echo "`date`运行存储过程 " >>$LOGFILE 2>&1
sqlplus -s  $USERNAME/$PASSWD@$HOSTNAME $LOGFILE 2>&1
exec ibss.p_gen_crm_to_ocs('${day_s}000000','${DATE} ...



我把完整的脚本贴出来如下:
$ more yeyl_CRM_TO_OCS.sh
#!/bin/sh
cd
. tux.env
cd /home/ibss/tuxedo/ftp/ftplocal/ocs
HOSTNAME=**
USERNAME=**
PASSWD=**  #这个就不方便公布了
DATE=`date +'20%y%m%d'`
LOGFILE=/home/ibss/tuxedo/ftp/ftplocal/ocs/log/yeyl_CRM_TO_OCS_$DATE.log
echo "运行程序:......时间是`date`" >>$LOGFILE 2>&1
case $# in
0 )
month=`date +%m`
day=`date +%d`
year=`date +%Y`
month=`expr $month + 0`
day=`expr $day - 1`
if [ $day -eq 0 ]; then
month=`expr $month - 1`
if [ $month -eq 0 ]; then
month=12
day=31
year=`expr $year - 1`
else
case $month in
1|3|5|7|8|10|12) day=31;;
4|6|9|11) day=30;;
2)
if [ `expr $year % 4` -eq 0 ]; then
if [ `expr $year % 400` -eq 0 ]; then
day=29
elif [ `expr $year % 100` -eq 0 ]; then
day=28
else
day=29
fi
else
day=28
fi
;;
esac
fi
fi
year1=`expr $year - 2000`
day=`echo $day|awk '{printf "%2s\n",int($1)}'|sed 's/ /0/g' `
month=`echo $month|awk '{printf "%2s\n",int($1)}'|sed 's/ /0/g' `

day_s=$year$month$day
month_s=$year$month  ;;

2 )
day_s=$1
DATE=$2 ;;
* ) echo "用法:";
    echo "   yeyl_CRM_TO_OCS.sh  (上传当天数据)"
    echo "或 yeyl_CRM_TO_OCS.sh  20090511 20090512  (上传指定20090511的数据) "
    exit 0;;
esac   


echo "要输入的参数:${day_s} ${DATE} ">>$LOGFILE 2>&1
echo "`date`运行存储过程 " >>$LOGFILE 2>&1
sqlplus -s  [email=$USERNAME/$PASSWD@$HOSTNAME]$USERNAME/$PASSWD@$HOSTNAME[/email] <<EOF  >>$LOGFILE 2>&1
exec ibss.p_gen_crm_to_ocs('${day_s}000000','${DATE}000000');  
EOF

echo "`date`准备生成文件 ">>$LOGFILE 2>&1
sqlplus -s  [email=$USERNAME/$PASSWD@$HOSTNAME]$USERNAME/$PASSWD@$HOSTNAME[/email] <<EOF >/home/ibss/tuxedo/ftp/ftplocal/ocs/srcdata/crm2ocsprod_762_${DATE}.txt
SET HEADING OFF
SET NEWPAGE NONE
SET FEEDBACK OFF
SET LINESIZE 2900
SELECT mdn||'|'||orderid||'|'||area_code||'|'||clausecode||'|'||valuatecode||'|'||valuatevalue||'|'||serv_nbr||'|'||create_da
te  
FROM ibss.CRM_TO_OCS;
EOF
echo "`date`将文件上传 ">>$LOGFILE 2>&1
localdir="/home/ibss/tuxedo/ftp/ftplocal/ocs/srcdata/"
remotedir="/CRMData_UPLoad"
serverip="*****"                ##主机IP                     
username="*"                     ##传用户名                 
password="*"               ##上传用户密码  这个也不方便公布
ftp -nvi <<-EOF>>$LOGFILE 2>&1
    open $serverip
    user $username $password
    bin   
    cd $remotedir
    lcd $localdir
        put      crm2ocsprod_762_${DATE}.txt
     bye
EOF

echo "`date`将文件备份 ">>$LOGFILE 2>&1
mv /home/ibss/tuxedo/ftp/ftplocal/ocs/srcdata/crm2ocsprod_762_${DATE}.txt /home/ibss/tuxedo/ftp/ftplocal/ocs/histdata
echo "`date`程序运行完毕,..........时间是`date`" >>$LOGFILE 2>&1


环境变量文件如下:

$ more tux.env
# Set shell search paths
TUXDIR=/home/tuxedo/tuxedo8.1;export TUXDIR
ORACLE_BASE=/oracle/oracle9i/app/oracle;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/9.2.0;export ORACLE_HOME
ORACLE_TERM=xterm;export ORACLE_TERM
NLS_LANG=American_America.ZHS16GBK;export NLS_LANG
SHLIB_PATH=$ORACLE_HOME/libORACLE_HOME/rdbms/libORACLE_HOME/network/lib:/usr/lib; export SHLIB_PATH
LD_LIBRARY_PATH=$ORACLE_HOME/libORACLE_HOME/rdbms/libORACLE_HOME/network/libLD_LIBRARY_PATH; export LD_LIBRARY_PATH
LIBPATH=$ORACLE_HOME/lib;export LIBPATH
LIBPATH=/lib:/usr/libORACLE_HOME/lib:/home/tuxedo/tuxedo8.1/lib:/home/ibss/tuxedo/ibsssvr/lib:/home/ibss/tuxedo/ibssintf/li
b;export LIBPATH
LD_LIBRARY_PATH=/lib:/usr/lib:/home/tuxedo/tuxedo8.1/lib:/home/ibss/tuxedo/ibssintf/lib:/home/ibss/tuxedo/ibsssvr/lib; export
LD_LIBRARY_PATH
LD_LIBRARY_PATH=$ORACLE_HOME/libORACLE_HOME/rdbms/libORACLE_HOME/network/libLD_LIBRARY_PATH; export LD_LIBRARY_PATH
SHLIB_PATH=/lib:/usr/lib:/home/tuxedo/tuxedo8.1/lib/ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$ORACLE_HOME/network/lib; export
SHLIB_PATH
SHLIB_PATH=$SHLIB_PATH:$TUXDIR/lib:/home/ibss/tuxedo/ibsssvr/lib:/home/ibss/tuxedo/ibssintf/lib:/usr/lib/sparcv9/;export SHLI
B_PATH
TUXCONFIG=/home/ibss/tuxedo/ibsssvr/config/tuxconfig;export TUXCONFIG
TUXAPPLOG=/home/ibss/tuxedo/ibsssvr/myLog/;export TUXAPPLOG
BDMCONFIG=/home/ibss/tuxedo/ibsssvr/config/bdmconfig;export BDMCONFIG
WSNADDR=//****:2888;export WSNADDR  #隐去



设置了定时器后:11 11 * * * /home/ibss/tuxedo/ftp/ftplocal/ocs/bin/yeyl_CRM_TO_OCS.sh
log文件如下:
运行程序:......时间是Sat May 16 11:12:00 CST 2009
要输入的参数:20090515 20090516
Sat May 16 11:12:00 CST 2009运行存储过程
Sat May 16 11:12:00 CST 2009准备生成文件
Sat May 16 11:12:00 CST 2009将文件上传
Connected to 132.96.25.31.
220 Serv-U FTP Server v5.0 for WinSock ready...
Remote system type is UNIX.
Using ascii mode to transfer files.
331 User name okay, need password.
230 User logged in, proceed.
200 Type set to I.
250 Directory changed to /CRMData_UPLoad
crm2ocsprod_762_20090516.txt: No such file or directory
Local directory now /home/ibss/tuxedo/ftp/ftplocal/ocs/srcdata
221 Goodbye!
Sat May 16 11:12:00 CST 2009将文件备份
Sat May 16 11:12:00 CST 2009程序运行完毕,..........时间是Sat May 16 11:12:00 CST 2009

在log文件里面怎么没有提示:PL/SQL procedure successfully completed. 这个哪?非常的郁闷,
结果存储过程没有执行到。


而手工执行此文件log就会如下显示:(手工执行存储过程就会成功。晕死!)

要输入的参数:20090515 20090516
Sat May 16 11:14:09 CST 2009运行存储过程
PL/SQL procedure successfully completed.
Sat May 16 11:14:17 CST 2009准备生成文件
Sat May 16 11:14:17 CST 2009将文件上传


哪位好心人能帮我分析一下,不胜感激!

论坛徽章:
0
7 [报告]
发表于 2009-05-16 15:44 |只看该作者

回复 #6 iceer1212 的帖子

你从$LOGFILE文件中看不出什么吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP