2010-09-23 28 views
7

Veritabanı bağlantısını kontrol etmek için bir kabuk komut dosyası yazmaya çalışıyorum. Komut dizimde, Oracle veritabanıma bağlanmak içinKabuk komut dosyasını kullanarak veritabanı bağlantısını kontrol edin

komutunu kullanıyorum.

Şimdi geçici bir dosyada bu komut tarafından oluşturulan çıktısını (SQL istemine düşmeden önce) kaydetmek istiyorum ve daha sonra, bağlantının düzgün olup olmadığını görmek için bu dosyadan "Bağlandı" dizesini grep/bulun .

Çıktıyı yakalamama ve bu komuttan çıkıp bağlantının iyi olup olmadığını test etmeme yardımcı olabilir misiniz?

cevap

19

Kullanım bir senaryo:

Şimdi sadece yukarıdaki gibi çıktısını grep

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

yankı "çıkış" Programınız derhal çıkar olmasını sağlar (bu sqlplus taşınıyor alır). -L, kimlik bilgileri tamam değilse, sqlplus'ın parola sormayacağını garanti eder (bu da sıkışıp kalmasını sağlar).

(>/dev/null sadece sonuçları $ aracılığıyla erişilir çünkü ihtiyacımız yok grep çıktısı, bu durumda? Gizler)

+0

Girdileriniz için hepinize çok teşekkür ederim .... evet o gün denedim, ancak biraz geç cevap verdi. – mohona

2

Sen yaparak SQL istemini önleyebilirsiniz:

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

SQLPlus hemen çıkar. Böyle

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

evet bu çalıştı komut satırında parola göstermiyor iyi bir seçenek !! Teşekkürler Jochem ve codaddict ... – mohona

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

Cevabınız için teşekkürler iddqd. – mohona

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 

"Bağlı olmadığını bilmeden "mesaj standart çıktıya veya standart hataya sokulur, bu her ikisini de kontrol eder. "grep ...>/dev/null" yerine "qrep -q", Linux'u varsayar.

+0

Cevabınız için teşekkürler Frayser. – mohona

0

İşte

#!/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 
İlgili konular