crontab 上的 sqlplus 连接错误,但可以直接运行
sqlplus connection error on crontab but works directly
我正在使用以下脚本创建带有 oracle 查询输出的文本文件。当我手动尝试时,脚本工作正常。但是当我把它放到 crontab 时,它永远无法获得连接。通过自动化访问sqlplus有什么限制吗?
rm /export/home/oracle/out.csv
INC=0
while : ; do
INC=$(($INC+1))
if [[ "$INC" -eq 10 ]]; then
echo "Exit after multiple failed attempt to connect to the DB."
break
fi
sqlplus -s username/password@hostname.com:1552/servicename << EOF
set pagesize 10000
set feedback off
set heading off
set echo off
spool /export/home/oracle/out.csv
SET LINESIZE 10000
SET PAGESIZE 50
SELECT TRIM(COUNT(*)) FROM users;
SPOOL OFF
EXIT;
EOF
[[ -f "/export/home/oracle/out.csv" ]] && break
echo "Failed to connect to DB and retrying."
sleep 5
done
Cron 实用程序默认使用“/bin/sh”shell,因此您需要相应地设置 Oracle 环境。
您可以:
1.- 有一个包含必要变量的配置文件。 (*)
2.- 在脚本中硬编码必要的 Oracle 环境变量。
你的情况:
对于解决方案“1”,您可以创建具有以下内容的 $HOME/profile.12cR2 文件:
export ORACLE_BASE=/oraclebin/app/oracle/product/databaseR2/base
export ORACLE_HOME=/oraclebin/app/oracle/product/databaseR2/12cR2
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export ORACLE_SID=db02
export EDITOR=vi
并按如下方式更新您的脚本:
. $HOME/profile.12cR2
rm /export/home/oracle/out.csv
INC=0
while : ; do
INC=$(($INC+1))
if [[ "$INC" -eq 10 ]]; then
echo "Exit after multiple failed attempt to connect to the DB."
break
fi
...
(*) 根据您的 Oracle 数据库基础结构更新此配置文件。
我正在使用以下脚本创建带有 oracle 查询输出的文本文件。当我手动尝试时,脚本工作正常。但是当我把它放到 crontab 时,它永远无法获得连接。通过自动化访问sqlplus有什么限制吗?
rm /export/home/oracle/out.csv
INC=0
while : ; do
INC=$(($INC+1))
if [[ "$INC" -eq 10 ]]; then
echo "Exit after multiple failed attempt to connect to the DB."
break
fi
sqlplus -s username/password@hostname.com:1552/servicename << EOF
set pagesize 10000
set feedback off
set heading off
set echo off
spool /export/home/oracle/out.csv
SET LINESIZE 10000
SET PAGESIZE 50
SELECT TRIM(COUNT(*)) FROM users;
SPOOL OFF
EXIT;
EOF
[[ -f "/export/home/oracle/out.csv" ]] && break
echo "Failed to connect to DB and retrying."
sleep 5
done
Cron 实用程序默认使用“/bin/sh”shell,因此您需要相应地设置 Oracle 环境。
您可以:
1.- 有一个包含必要变量的配置文件。 (*)
2.- 在脚本中硬编码必要的 Oracle 环境变量。
你的情况:
对于解决方案“1”,您可以创建具有以下内容的 $HOME/profile.12cR2 文件:
export ORACLE_BASE=/oraclebin/app/oracle/product/databaseR2/base
export ORACLE_HOME=/oraclebin/app/oracle/product/databaseR2/12cR2
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export ORACLE_SID=db02
export EDITOR=vi
并按如下方式更新您的脚本:
. $HOME/profile.12cR2
rm /export/home/oracle/out.csv
INC=0
while : ; do
INC=$(($INC+1))
if [[ "$INC" -eq 10 ]]; then
echo "Exit after multiple failed attempt to connect to the DB."
break
fi
...
(*) 根据您的 Oracle 数据库基础结构更新此配置文件。