使用Shell脚本检查数据库连接

时间:2010-09-23 14:44:45

标签: database linux shell

我正在尝试编写一个shell脚本来检查数据库连接。在我的脚本中,我使用命令

sqlplus uid/pwd@database-schemaname

连接到我的Oracle数据库。

现在我想在临时文件中保存此命令生成的输出(在它下降到SQL提示符之前),然后从该文件中grep / find字符串“Connected to”以查看连接是否正常。

任何人都可以帮我抓住输出并退出提示并测试连接是否正常?

8 个答案:

答案 0 :(得分:25)

使用这样的脚本:

#!/bin/sh
echo "exit" | sqlplus -L uid/pwd@dbname | grep Connected > /dev/null
if [ $? -eq 0 ] 
then
   echo "OK"
else
   echo "NOT OK"
fi

echo“exit”确保您的程序立即退出(这会通过管道传输到sqlplus)。 -L确保如果凭据不正确,sqlplus将不会要求输入密码(这会使其卡住)。

(> / dev / null只隐藏grep的输出,我们不需要,因为在这种情况下通过$?访问结果)

答案 1 :(得分:2)

您可以通过执行以下操作来避免SQL提示:

sqlplus uid/pwd@database-schemaname < /dev/null

SqlPlus立即退出。

现在只需将上面的输出格式化为:

if sqlplus uid/pwd@database-schemaname < /dev/null | grep 'Connected to'; then
   # have connectivity to Oracle
else
   # No connectivity
fi

答案 2 :(得分:1)

#!/bin/bash
output=`sqlplus -s "user/pass@POLIGON.TEST " <<EOF
           set heading off feedback off verify off
           select distinct machine from v\\$session;
           exit
EOF
`

echo $output
if [[ $output =~ ERROR ]]; then
     echo "ERROR"
else

     echo "OK"
fi 

答案 3 :(得分:1)

#! /bin/sh  

if echo "exit;" | sqlplus UID/PWD@database-schemaname 2>&1 | grep -q "Connected to"
then echo connected OK
else echo connection FAIL
fi

不知道“已连接到”消息是否被置于标准输出或标准错误,这将检查两者。 “qrep -q”而不是“grep ...&gt; / dev / null”假设Linux。

答案 4 :(得分:1)

#!/bin/sh
echo "exit" | sqlplus -S -L uid/pwd@dbname
if [ $? -eq 0 ] 
then
   echo "OK"
else
   echo "NOT OK"
fi

对于连接验证-S就足够了。

“静音”模式不会阻止端子输出。它所做的就是:

-S             Sets silent mode which suppresses the display of
               the SQL*Plus banner, prompts, and echoing of
               commands.

如果要抑制所有终端输出,则需要执行以下操作:

sqlplus ... > /dev/null 2>&1

答案 5 :(得分:0)

这是一个很好的选择,它不会在命令行上公开密码

#!/bin/bash
CONNECT_STRING=<USERNAME>/<PASS>@<SID>
sqlplus -s -L /NOLOG <<EOF
whenever sqlerror exit 1
whenever oserror exit 1
CONNECT $CONNECT_STRING
exit
EOF

SQLPLUS_RC=$?
echo "RC=$SQLPLUS_RC"
[ $SQLPLUS_RC -eq 0 ] && echo "Connected successfully"
[ $SQLPLUS_RC -ne 0 ] && echo "Failed to connect"

exit SQLPLUS_RC

答案 6 :(得分:0)

所提出的解决方案均不适合我,因为我的脚本是在运行多个国家/地区且具有不同语言环境的计算机中执行的,我不能简单地检查一个String就是因为另一台计算机中的此字符串已翻译成另一种语言。作为解决方案,我正在使用SQLcl

https://www.oracle.com/database/technologies/appdev/sqlcl.html

与所有sql * plus脚本兼容,并允许您像这样测试数据库连接:

echo "disconnect" | sql -L $DB_CONNECTION_STRING > /dev/null || fail "cannot check connectivity with the database, check your settings"

答案 7 :(得分:0)

这是我的Docker容器的一线工具,可以等到数据库准备就绪:

until sqlplus -s sys/Oracle18@oracledbxe/XE as sysdba <<< "SELECT 13376411 FROM DUAL; exit;" | grep "13376411"; do echo "Could not connect to oracle... sleep for a while"; sleep 3; done

多行相同:

until sqlplus -s sys/Oracle18@oracledbxe/XE as sysdba <<< "SELECT 13376411 FROM DUAL; exit;" | grep "13376411"; 
do 
  echo "Could not connect to oracle... sleep for a while"; 
  sleep 3; 
done

因此,它基本上会选择魔术数字并检查是否确实返回了正确的数字。