12
votes

Vérifiez la connectivité de la base de données à l'aide du script shell

J'essaie d'écrire un script shell pour vérifier la connectivité de la base de données. Dans mon script, j'utilise la commande xxx

pour se connecter à ma base de données Oracle.

Maintenant, je veux enregistrer la sortie générée par cette commande (avant qu'il ne tombe sur SQL invite) dans un fichier tempe puis grep / trouvez la chaîne "connectée à" à partir de ce fichier pour voir si la connectivité est bien ou non.

Peut-on aider à attraper la sortie et à sortir de cette invite et testez si la connectivité va bien?


0 commentaires

8 Réponses :


2
votes

Vous pouvez éviter l'invite SQL en faisant:

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


0 commentaires

30
votes

Utilisez un script comme celui-ci:

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


1 commentaires

Merci beaucoup à vous tous pour vos contributions ... Oui, j'ai essayé ce jour-là même, cependant, répondit un peu tard.



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

1 commentaires

Merci iddqd pour votre réponse.



3
votes
#! /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
Not knowing whether the "Connected to" message is put to  standard output or standard error, this checks both. "qrep -q" instead of "grep... >/dev/null" assumes Linux.

1 commentaires

Merci Magayer pour votre réponse.



1
votes

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


0 commentaires

1
votes

Aucune des solutions proposées ne fonctionne pour moi, car mon script est exécuté dans des machines exécutant plusieurs pays, avec différents locaux, je ne peux pas simplement vérifier une chaîne simplement car cette chaîne de l'autre machine est traduite dans une langue différente. . En tant que solution, j'utilise SQLCL

https://www.oracle .com / Base de données / Technologies / appdev / sqlcl.html P>

Compatible avec tous les scripts SQL * Plus et vous permettent de tester la connectivité de la base de données comme celle-ci: P>

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


0 commentaires

0
votes

Ceci était mon one-liner pour le conteneur de docker pour attendre que dB soit prêt:

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


0 commentaires

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

0 commentaires