来自Unix的执行消息Oracle sqlplus

时间:2018-09-04 15:00:37

标签: oracle shell unix sqlplus

我有一个从请求密码的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的执行结束并返回到控制台。

有什么建议或想法吗?

1 个答案:

答案 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

说过,一个好的方法应该是将监视部分放在处理代码之外。