【发布时间】:2021-02-13 09:42:23
【问题描述】:
#!/bin/sh
set -e
export DATABASE=U414_157_6300/U414_157_6300@db1230cn:1526/DBG192
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export JAVA_HOME=/u01/app/java/jdk180_231
export ORACLE_HOME=/u01/app/oracle/client19
export LD_LIBRARY_PATH=/u01/app/oracle/client19/lib
export PATH=$ORACLE_HOME/bin:$PATH
PATH=$PATH:$HOME/bin
export PATH
echo "exit" |sqlplus -L $DATABASE | grep 'Connected' > /dev/null
if [ $? -eq 0 ]
then
echo "Database is up and the connection is successful!!"
exit 0;
else
echo "Database seems to be down!!"
exit 1;
fi
此脚本用于检查数据库是否已启动或已关闭。当我得到以下结果时。
./db_status.sh
Database is up and the connection is successful!!
但是当 DB 宕机时,我什么也得不到!!为什么??
./db_status.sh
[root@qaapp828cn u414_157_6300]#
【问题讨论】:
-
您确定要查找的
Connected消息已写入标准输出吗? -
顺便说一句,
if sqlplus -L "$DATABASE" <<<"exit" 2>&1 | grep -q Connected; then可能是更简单的写法。而且我希望 sqlplus 将是一个表现良好的程序,如果它无法连接到数据库服务器,它会具有非零退出状态,尽管情况可能并非如此——我当我在 Oracle 商店时,我专门写回了我自己的数据库客户端,因为 sqlplus 在可脚本性方面考虑得非常糟糕。 (这已经是 15 年前的事了,所以我当然不记得导致该行动的具体投诉的细节)。 -
顺便说一句,回复:
set -e,见BashFAQ #105。 -
请注意,脚本将等待,直到 sqlplus 命令结束。或者换句话说,如果
sqlplus命令没有结束,你的脚本也不会结束。没有超时! -
@Marco, ...因为它的标准输入将在读取
exit后处于 EOF,但是,期望它退出是合理的。就此而言,我希望它仅以</dev/null而不是echo "exit" |退出。
标签: bash shell scripting sqlplus oracle19c