如何解决检查数据库连通性
我正在编写一个 unix 脚本来检查服务器中的数据库连接。当我的数据库连接出错或连接到数据库时观察到延迟时,我希望输出为“未连接”。如果它已连接,我的输出应为“已连接”。这是一个 Oracle 数据库。
当数据库连接出现延迟时,我的代码无法运行并且我的脚本挂起。我应该对我的代码进行哪些更改,以便它能够处理这两种情况(当我连接到数据库时出现错误时以及在连接到数据库时观察到延迟时)??
if sqlplus $DB_USER/$DB_PASS@$DB_INSTANCE< /dev/null | grep 'Connected to'; then
echo "Connectivity is OK"
else
echo "No Connectivity"
fi
解决方法
添加到代码中的第一件事是超时。检查数据库连接并不容易,连接经过的各个层中可能存在各种问题。超时使您可以选择中断挂起的会话并继续执行任务并报告连接失败。
googleFu 给了我几个很好的例子: Timeout a command in bash without unnecessary delay
,如果您使用的是 Linux,则可以使用 timeout
命令执行您想要的操作。所以下面会有三个结果,设置变量RC如下:
- “连接到”成功:RC 设置为 0
- 未找到“已连接到”:RC 设置为 1
-
sqlplus
命令在 5 分钟后超时:RC 设置为 124
WAIT_MINUTES=5
SP_OUTPUT=$(timeout ${WAIT_MINUTES}m sqlplus $DB_USER/$DB_PASS@$DB_INSTANCE < /dev/null )
CMD_RC=$?
if [ $CMD_RC -eq 124 ]
then
ERR_MSG="Connection attempt timed out after $WAIT_MINUES minutes"
RC=$CMD_RC
else
echo $SP_OUTPUT | grep -q 'Connected to'
GREP_RC=$?
if [ $GREP_RC -eq 0 ]
then
echo "Connectivity is OK"
RC=0
else
ERR_MSG="Connectivity or user information is bad"
RC=1
fi
fi
if [ $RC -gt 0 ]
then
# Add code to send email with subject of $ERR_MSG and body of $SP_OUTPUT
echo Need to email someone about $ERR_MSG
fi
exit $RC
我确信这方面有一些改进,但这会让你开始。
简而言之,我们使用timeout
命令来等待sqlplus命令运行的指定时间。我将 grep
作为单独的命令分开,以允许使用 timeout
并允许更灵活地检查其他文本消息。
StackOverflow 上有 several examples 关于从 Linux 脚本发送电子邮件的内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。