来自 Unix 的 Oracle sqlplus 的执行消息
Execution message Oracle sqlplus from Unix
我有一个从请求密码的 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 分钟通知一次操作员,例如 "The process continues in execution"?因为一旦进入 sqlplus 就会保留在其中,直到 sp 的执行结束并且 returns 到控制台。
有什么建议或想法吗?
将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
话虽如此,一个好的方法应该是将监视部分排除在处理代码之外。
我有一个从请求密码的 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 分钟通知一次操作员,例如 "The process continues in execution"?因为一旦进入 sqlplus 就会保留在其中,直到 sp 的执行结束并且 returns 到控制台。
有什么建议或想法吗?
将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
话虽如此,一个好的方法应该是将监视部分排除在处理代码之外。