2010-09-23 72 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