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 pour se connecter à ma base de données Oracle. P> 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. p> Peut-on aider à attraper la sortie et à sortir de cette invite et testez si la connectivité va bien? p> p>
8 Réponses :
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
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
Merci beaucoup à vous tous pour vos contributions ... Oui, j'ai essayé ce jour-là même, cependant, répondit un peu tard.
#!/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
Merci iddqd pour votre réponse.
#! /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.
Merci Magayer pour votre réponse.
Voici une bonne option qui n'expose pas le mot de passe sur la ligne de commande
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"
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
sqlplus ... > /dev/null 2>&1