我有一个从请求密码的shell连接到Oracle sqlplus的进程,然后以以下方式开始执行存储过程:
echo -e "Enter Password"
read -s pass
$ORACLE_HOME/bin/sqlplus -s -l /nolog << EOF >> $log_deploy
connect $schema/$pass@$db
@$sql/main.sql;
EOF
事实是,此过程的持续时间可变,并且由操作员从服务器的控制台执行。
是否可以通过某种方式每10分钟通知操作员一次,例如“过程继续执行” ?因为一旦sqlplus保留在里面,直到sp的执行结束并返回到控制台。
有什么建议或想法吗?
答案 0 :(得分:7)
将sqlplus heredoc放在后台。通过检查它的完成,等待最后一个后台进程ID($!)和sleep
完成一定的秒数(顺便说一下,10分钟是很长的间隔)
intrvl=100
sqlplus <<EOF &
input
EOF
PID=$! #get the pid of the last background process.
while [ 1 ]
do
if ps -p $PID > /dev/null
then
echo "The process continues in execution"
sleep $intrvl
else
break
fi
done
说过,一个好的方法应该是将监视部分放在处理代码之外。