【问题标题】:How to check db connection through shell script?如何通过shell脚本检查数据库连接?
【发布时间】:2020-08-17 14:49:00
【问题描述】:

我真的是脚本新手,我厌倦了编写一个检查数据库连接是否存在的脚本。我正计划创建一个作业以在特定时间间隔检查数据库连接并发送警报邮件

这是我写累了的代码,请指正或建议:

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

【问题讨论】:

  • 您的问题是什么?脚本末尾的三个反引号字符应该做什么?
  • 这是一个拼写错误。我想写一个shell脚本来检查数据库连接,成功与否。
  • 如何通过shell脚本检查数据库连接?
  • 不要将重要信息放入 cmets,而是放入您的问题中。您发布的代码在哪些方面未能达到应有的效果?
  • 嗨,Jain,请更新问题,让我们知道出了什么问题。 sqlplus 命令的行为是否符合预期?

标签: database shell alert jobs


【解决方案1】:

您的脚本看起来不错,但存在逻辑缺陷。与几乎所有命令一样,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

您可以进行以下改进:

  1. 当标准输入上没有更多输入时,sqlplus 将退出。因此,`echo "exit" 是不必要的。
  2. 如果您使用-q(安静)参数,您可以避免将grep 重定向到/dev/nullgrep 只会返回 0 或 1 个退出代码,表明它找到了字符串。
  3. 您可能会发现sqlplus在连接成功时返回一个0退出码。您可能不必查找字符串“已连接”。
  4. 您可以将 sqlplus 命令作为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 退出代码有误,您仍然可以这样编写脚本:

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 的假设,我们可以更紧凑(但可能不太清晰)将您的代码重写为:

STATUS="error"
>/dev/null sqlplus  -L uid/pwd@dbname  && STATUS="successful"
mailx -s "DB connection $STATUS" maild_id

【讨论】:

  • 感谢马克的建议。但是我必须像这样连接数据库: ./ssgodbc.linux64 -d "dsn" -u "username" -p 'pswd' -v 如何更改此脚本?我厌倦了更换sql部分,但它没有用
  • 尝试重写您的问题/帖子以分享您看到的错误。这样,整个社区都可以从您的情况中学习。
猜你喜欢
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多