2010-09-23 5 views
7

Je tente d'écrire un script shell pour vérifier la connectivité de la base de données. Dans mon script j'utilise la commandeVérification de la connectivité de la base de données à l'aide du script Shell

sqlplus uid/[email protected] 

pour me connecter à ma base de données Oracle. Maintenant, je veux enregistrer la sortie générée par cette commande (avant qu'elle ne tombe à l'invite SQL) dans un fichier temporaire, puis grep/trouver la chaîne "Connecté à" de ce fichier pour voir si la connectivité est bien ou non .

Quelqu'un peut-il s'il vous plaît m'aider à attraper la sortie et sortir de cette invite et tester si la connectivité est bien?

Répondre

19

Utilisez un script comme celui-ci:

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

echo "exit" assure que votre programme quitte immédiatement (ce qui se redirigée vers sqlplus). -L garantit que sqlplus ne demandera pas de mot de passe si les informations d'identification ne sont pas correctes (ce qui le rendrait également bloqué).

(>/dev/null juste cache sortie de grep, que nous ne avons pas besoin parce que les résultats sont accessibles via $? Dans ce cas)

+0

Merci beaucoup à vous tous pour vos entrées .... ouais j'ai essayé ce jour-là cependant, a répondu un peu en retard. – mohona

2

Vous pouvez éviter l'invite SQL en faisant:

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

SqlPlus quitte immédiatement.

Maintenant grep juste la sortie de ce qui précède que:

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

oui, il a travaillé !! Merci Jochem et 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

Merci iddqd pour votre réponse. – 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 

sachant pas si le « Connected "Le message est mis à la sortie standard ou à l'erreur standard, cela vérifie les deux. "qrep -q" au lieu de "grep ...>/dev/null" suppose Linux.

+0

Merci Frayser pour votre réponse. – mohona

0

est ici une bonne option qui n'expose pas le mot de passe sur la ligne de commande

#!/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