2010-09-23 71 views
7

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

sqlplus uid/[email protected] 

连接到我的Oracle数据库。

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

任何人都可以请帮助我赶上输出并摆脱那个提示,并测试连接是否正常?

回答

19

使用的脚本是这样的:

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

回声“退出”可以确保你立刻退出了(这被输送到SQLPLUS )。 -L保证sqlplus在密码不正确的情况下不会要求输入密码(这也会使它被卡住)。

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

+0

非常感谢你们所有人的投入......是的,但是我在那一天自己尝试过,但是有点晚了。 – mohona 2010-09-27 06:50:01

2

您可以通过执行避免SQL提示:

sqlplus uid/[email protected] < /dev/null 

sqlplus中立即退出。

现在只要用grep上面的输出:

if sqlplus uid/[email protected] < /dev/null | grep 'Connected to'; then 
    # have connectivity to Oracle 
else 
    # No connectivity 
fi 
+0

是的它一直在揭露密码一个不错的选择!谢谢Jochem和codaddict ... – mohona 2010-09-27 06:51:26

1
#!/bin/bash 
output=`sqlplus -s "user/[email protected] " <<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 
+0

感谢您的答案iddqd。 – mohona 2010-10-04 08:10:39

1
#! /bin/sh 

if echo "exit;" | sqlplus UID/[email protected] 2>&1 | grep -q "Connected to" 
then echo connected OK 
else echo connection FAIL 
fi 

不知道是否“已连接到“消息被放到标准输出或标准错误,这将同时检查。 “qrep -q”而不是“grep ...>/dev/null”假定Linux。

+0

谢谢你的答案。 – mohona 2010-10-04 08:11:13

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