直接在linux上运行shell脚本时,oracle用户是有这个环境变量的。但是crontab运行时,是没有用户的环境变量,所以需要在脚本中设置。
所以必须指定如下ORACLE_SID和ORACLE_HOME和PATH变量,否则会报错, 而有没有#!/bin/sh倒是没什么关系
没有#!/bin/sh则按默认的默认shell中执行,查看默认的shell命令是 echo $SHELL
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=TESTDB
缺少ORACLE_HOME,在crontab中去掉>>/dev/null 2>&1并让crontab运行,会发现在/var/spool/mail/oracle下会有如下报错
Message file RMAN<lang>.msb not found
Verify that ORACLE_HOME is set properly
而缺少ORACLE_SID则在crontab对应的脚本的写入日志中会有如下信息
RMAN-04005: error from target database:
ORA-12162: TNS:net service name is incorrectly specified
注:
并不是所有的oracle下的脚本都需要ORACLE_HOME和ORACLE_SID,只有涉及ORACLE数据库信息的才需要这两个变量如sqlplus和rman
lsnrctl命令不需要ORACLE_HOME和ORACLE_SID两个变量
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30126024/viewspace-2140157/
,如需转载,请注明出处,否则将追究法律责任。