Database 如何通过shell脚本检查数据库连接?
我对脚本编写非常陌生,我已经厌倦了编写一个脚本来检查数据库连接是否存在。我计划创建一个作业,在特定的时间间隔内检查数据库连接并发送警报邮件 这是我写累了的代码,请更正或建议:Database 如何通过shell脚本检查数据库连接?,database,shell,alert,jobs,Database,Shell,Alert,Jobs,我对脚本编写非常陌生,我已经厌倦了编写一个脚本来检查数据库连接是否存在。我计划创建一个作业,在特定的时间间隔内检查数据库连接并发送警报邮件 这是我写累了的代码,请更正或建议: echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null if [ $? -eq 0 ] then mailx -s "DB connection error" maild_id else
echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null
if [ $? -eq 0 ]
then
mailx -s "DB connection error" maild_id
else
mailx -s "DB connection successful" maild_id
fi
您的脚本看起来不错,但有一个逻辑缺陷。与几乎所有命令一样,
grep
成功后将返回退出代码0<代码>grep“Connected”将在sqlplus输出“Connected”时成功。因此,您的脚本应该如下所示:
echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null
if [ $? -eq 0 ]
then
mailx -s "DB connection successful" maild_id
else
mailx -s "DB connection error" maild_id
fi
if
echo "exit" | sqlplus -L uid/pwd@dbname | grep -q Connected
then
mailx -s "DB connection successful" maild_id
else
mailx -s "DB connection error" maild_id
fi
以下是您可以进行的一些改进:
-q
(安静)参数,可以避免将grep
重定向到/dev/null
grep
将只返回0或1个退出代码,表明它找到了字符串if
条件执行if
>/dev/null sqlplus -L uid/pwd@dbname
then
mailx -s "DB connection successful" maild_id
else
mailx -s "DB connection error" maild_id
fi
但是,如果我对sqlplus退出代码的理解有误,您仍然可以这样编写脚本:
echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null
if [ $? -eq 0 ]
then
mailx -s "DB connection successful" maild_id
else
mailx -s "DB connection error" maild_id
fi
if
echo "exit" | sqlplus -L uid/pwd@dbname | grep -q Connected
then
mailx -s "DB connection successful" maild_id
else
mailx -s "DB connection error" maild_id
fi
你也可以避免if;然后,;其他的通过使用和&
共轭,fi构造&&
是一个逻辑AND运算符-只有当左表达式为真时,它才会计算右表达式(它使用短路布尔逻辑)。使用这个概念和sqlplus的一个假设,我们可以将您的代码重新编写得更简洁(但可能不那么清晰),如下所示:
你的问题是什么?在你的剧本结尾的三个反引号字符应该做什么?这是一个打字错误。。我想写一个shell脚本来检查数据库连接,成功与否。如何通过shell脚本检查数据库连接?不要把重要信息放在评论中,而是放在你的问题中。您发布的代码在哪些方面没有达到预期效果?嗨,Jain,请更新问题,让我们知道哪里出了问题。sqlplus命令是否按预期运行?感谢Mark的建议。但是我必须这样连接数据库:./ssgodbc.linux64-d“dsn”-u“username”-p“pswd”-v如何更改此脚本?我尝试了替换sql部分,但没有成功尝试重写您的问题/帖子以分享您看到的错误。这样,整个社区都可以从你的情况中学习。