使用shell调用sqlplus访问oracle直接执行没问题。但是使用crontab调用时由于环境变量不生效,会不认为sqlplus为有效命令。
注:调用时使用的oracle用户
解决方法一:
在shell调用入口处增加如下环境变量:
- ORACLE_BASE=/oracle;export ORACLE_BASE
- ORACLE_HOME=$ORACLE_BASE/app/product/9.2 . 0 ;export ORACLE_HOME
- NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;export NLS_LANG
- ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data;export ORA_NLS33
- PATH=/usr/bin:sbin:/bin:/usr/bin:/usr/sbin:/opt/bin:/usr/local/bin:$ORACLE_HOME/bin:/usr/contrib/bin:$PATH
- export PATH
看起来,下面这四行就足够了。(或者决定于sqlplus 使用的复杂程度?)
ORACLE_BASE=/home/oracle; export ORACLE_BASE
ORACLE_HOME="/home/oracle/software/product/client/10.2"; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:/usr/local/ant/bin:$JAVA_HOME/bin:$PATH;
ORACLE_HOME="/home/oracle/software/product/client/10.2"; export ORACLE_HOME
PATH=$ORACLE_HOME/bin:/usr/local/ant/bin:$JAVA_HOME/bin:$PATH;
export PATH
ORACLE_BASE=/oracle;export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/app/product/9.2.0;export ORACLE_HOME
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK;export NLS_LANG
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data;export ORA_NLS33
PATH=/usr/bin:sbin:/bin:/usr/bin:/usr/sbin:/opt/bin:/usr/local/bin:$ORACLE_HOME/bin:/usr/contrib/bin:$PATH
export PATH
解决方法二:
直接添加profile(对应你自己的机器的路径)到shell程序入口处。即增加Java代码
- . /oracle/.profile
. /oracle/.profile
方法三:
在crontab指名运行的oracle用户名。