2017-07-18 2 views
0

J'ai un script SQL qui obtient des détails sur FRA (Flash Recovery Area dans ORACLE) qui doit être exécuté uniquement dans DB et pas dans d'autres entrées oratab. Donc, dans le cas ci-dessous, j'ai besoin de l'exécuter uniquement dans dbname1 et dbname2 et d'ignorer le reste des entrées lorsqu'il est trouvé.script shell pour exclure les entrées + ASM, AGENT, -MGMTDB du fichier ORATAB et juste valider uniquement DBSIDs

exemple de fichier oratab:

dbname1:/u01/app/oracle/11.2.0.4/db_1:Y 
dbname2:/u01/app/oracle/12.2.0.1/db_2:Y 
+ASM:/u01/app/grid:N 
MGMTDB:/u01/app/grid:N 
AGENT:/u01/app/agent_home:N 

J'ai écrit une fonction qui je l'utilise actuellement et ne fonctionne pas correctement selon mes besoins. Tous les changements sont grandement appréciés.

checkORATAB() 
{ 
ORATAB=/etc/oratab 
SID=`egrep -i ":Y|:N" $ORATAB | cut -d":" -f1 |grep -v "\#"|grep -v "\*"` 
export $SID 
if [[ `echo "$ORACLE_SID" | cut -b 1` != '+' ]] && [[ "$ORACLE_SID" != "AGENT" ]] && [[ "$ORACLE_SID" != "GRID" ]] && [[ "$ORACLE_SID" != "-MGMTDB" ]] && [[ "$ORACLE_SID" != "+ASM" ]]; then 
for i in $SID; do 
runscript; 
fi 
done 
exit; 
} 

Merci

+0

alors que j'ai une idée générale ce qu'est un fichier 'oratab' ressemble, je ne suis pas sûr de ce que vous entendez par' FRA'; aussi un peu confus par 'valider seulement DBSIDs 'vs' capture seulement DBSID'; Je vous suggère de mettre à jour votre question avec un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) – markp

+0

Vous devez mettre à jour/modifier votre publication originale avec tous ces détails supplémentaires; les autres personnes qui viendront à cette question ne prendront pas la peine de lire tous les commentaires et essayeront ensuite de rassembler toutes les pièces en une question cohérente; avez-vous lu ce lien (ci-dessus) que j'ai fourni dans mon premier commentaire? Je vous suggère également de jeter un oeil à [Comment poser une bonne question] (https://stackoverflow.com/help/how-to-ask) – markp

+0

Merci markp de m'avoir guidé pour l'afficher correctement .. je suis un débutant à stackoverflow et ne répéterait pas cette erreur .. !! – Pavan

Répondre

0

C'est un travail pour awk ou sed bien une combinaison de grep et cut travaillera également.

checkORATAB() { 
    ORATAB=/etc/oratab 
    for sid in $(awk -F: '$1 !~ /(+ASM|MGMTDB|AGENT)/ {print $1}' $ORATAB) 
    do 
     export ORACLE_SID=$sid 
     runscript 
    done 
} 

Ou en utilisant sed:

checkORATAB() { 
    ORATAB=/etc/oratab 
    for sid in $(sed -n '/^\(+ASM\|MGMTDB\|AGENT\)/b;s/:.*//p' $ORATAB) 
    do 
     export ORACLE_SID=$sid 
     runscript 
    done 
} 
+0

Merci Alvits .. !! Ça a marché comme je le veux .. !! – Pavan