From 367a9e158ad0d1244a838863024c0af57087244c Mon Sep 17 00:00:00 2001 From: Yacine31 Date: Sun, 20 Jun 2021 22:50:23 +0200 Subject: [PATCH] =?UTF-8?q?z=5Foracle=20simplifi=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configure-host-oel7/files/z_oracle.sh | 432 ++------------------ configure-host-oel7/files/z_oracle_full.sh | 434 +++++++++++++++++++++ 2 files changed, 457 insertions(+), 409 deletions(-) create mode 100644 configure-host-oel7/files/z_oracle_full.sh diff --git a/configure-host-oel7/files/z_oracle.sh b/configure-host-oel7/files/z_oracle.sh index 13f934c..41de94a 100755 --- a/configure-host-oel7/files/z_oracle.sh +++ b/configure-host-oel7/files/z_oracle.sh @@ -1,164 +1,23 @@ #!/bin/bash -######################################################################### -######################################################################### -## Fichier de configuration d'environnement Oracle -## Pour infrastructure cluster ou standalone. -## Versions testees: 12.1, 11.2 GI et SA, flex/normal -## -## 2014-08-13 YOM Correction de l'emplacement des journaux cluster vers ADR en 12c -## 2014-08-13 YOM Correction concernant la détection Restart en 12c (olsnodes réponds...) -## 2014-08-20 YOM Correction des alias crsstat et crsstati pour implémenter les variables ORA_CRS car elles ne doivent pas être laissées dans l'environnement -## 2014-12-02 YOM Correction du prompt par défaut -## 2014-12-03 YOM Suppression des alias crsstat et crsstati pour les transformer en scripts -## 2014-12-04 YOM Ajout de l'alias OH pour un « cd $ORACLE_HOME » -## 2015-01-21 YOM Test si le terminal est interractif pour éviter les erreurs TPUT en v7 -## 2016-02-15 YOM Ajout de l'alias « cdt » sur demande de PIL -## 2016-02-16 YOM Paramétrage de la mise à niveau de l'invite de commande -## 2016-02-25 YOM Modifications comportementales pour faciliter l'execution -## 2016-03-29 YOM 12.2 : changement de la conf ulimit pour être OK préco (fonction ajustement_limites) -## 2016-03-04 YOM . Modification du test de démarrage du cluster à cause de la 12c qui change le comportement olsnodes -## . Ajout d'un critère supplémentaire lié à l'alias cdt si le cluster est arrêté -## 2016-04-07 YOM . Ajout de l'alias SID pour la gestion facile de l'environnement -## . Ajustement de la zone d'exploitation -## 2016-06-28 YOM Rectification d'un problème si le cluster est arrêtée qui provoquait unn affichage d'erreur bash non voulu -## 2016-09-05 YOM Changement de l'alias « alert » pour limiter la largeur de ligne d'affichage -## 2016-09-16 YOM Utilisation des fichiers du vocabulaire RLWrap si ils sont présents (demande de THT) -## 2017-05-16 YOM Modification de la présentation de fonction (retrait des ()) pour une meilleure compatibilité -## 2017-08-23 YOM Création d'un fichier qui stocke la configuration repérée afin de ne pas systématiquement recalculer l'ensemble du paramétrage -## 2019-01-08 THT Arret de l'utilisation de local dans la fonction charge pour la variable lNODE_INFO, car l'utilisation de local donnait toujours un code retour à 0 -## 2019-01-23 THT Ajout de opatch dans le PATH de grid et oracle -######################################################################### - -## Activation des echo pour DEBUG si mis à 1 -DEBUG=0 - -## Invite de commande sympa à activer (1 pour activé, 0 pour dormant) : -ORAC_INV_C=1 -GRID_INV_C=1 -ROOT_INV_C=1 - -## Contexte -APP_CTX=z_oracle.sh -HOSTNAME_SIMPLE=`hostname -s` - -## Shell interactif ou non ? -fd=0 -if [[ $- = *i* ]] -then - INTERACTIF=OUI -else - INTERACTIF=NON -fi - -## Ajustement des limites (préconisations Oracle) -function ajustement_limites { - decho fonction ajustement limites - if [ $SHELL = "/bin/ksh" ] ; then - ulimit -p 16384 - ulimit -n 65536 - ulimit -s 32768 - else - ulimit -u 16384 -n 65536 - fi - ulimit -Hs 32768 - ulimit -Ss 10240 -} - -## Affichage des messages de sortie de debug -function decho { - if [ $DEBUG -eq 1 ] ; then - echo $APP_CTX: $* - fi -} - -######## Préparation fichier d'historique des informations de contexte -FICH_INFOS=/tmp/.z_oracle -# Obsolescence parr défaut: 24h -FICH_OBS=24 -## Gestion de l'obsolescence du fichier d'historique de configuration -# Si il n'existe pas, aucun problème. Sinon, il faut traiter -#ls -lrta $FICH_INFOS -#ls -lrts /tmp/.z_oracle -if [ -r $FICH_INFOS ] ; then - # Si obsolete - decho "Fichier $FICH_INFOS trouvé" - NB_SEC_DEPUIS_EPOCH=`PATH=\`getconf PATH\` awk 'BEGIN{srand();print srand()}'` - NB_SEC_DEPUIS_EPOCH_FICHIER=`stat -c %Y $FICH_INFOS` - NB_SEC_ECOULEES_MOD=`expr $NB_SEC_DEPUIS_EPOCH - $NB_SEC_DEPUIS_EPOCH_FICHIER` - HEURES_MOD=`expr $NB_SEC_ECOULEES_MOD / 3600` - if [ $HEURES_MOD -ge $FICH_OBS ] ; then - decho "Suppression $FICH_INFOS : obsolète (+${FICH_OBS}h)" - rm -f $FICH_INFOS 1>/dev/null 2>&1 - touch $FICH_INFOS - chmod 666 $FICH_INFOS - fi -else - decho "fichier $FICH_INFOS non trouvé" - touch $FICH_INFOS - chmod 666 $FICH_INFOS -fi - -# Fonction qui charge une information, soit depuis le contexte, soit depuis le fichier d'infos -function charge { - # Premier paramètre: le nom de l'élément recherché, identique au nom de la variable d'env du script - if [ $# -ne 1 ] ; then - decho charge: manque de paramétrage - exit 0 - fi - # Afin d'éviter la globalisation des variables de recherche et ne pas alourdir "l'unset" final, utilisation de variables locales pour la recherche - local __varRecherche=$1 - # Déjà connu via le fichier d'infos pour chargement rapide et pas reclacul - if [ `egrep "^${1}=" $FICH_INFOS | wc -l` -eq 1 ] ; then - # OUI - local lRep=`egrep "^$1" $FICH_INFOS | cut -d= -f2` - eval $__varRecherche="'$lRep'" - else - # NON : on calcule et on pérénise - case $1 in - NODE_INFO) - lNODE_INFO=`$ORA_CRS_HOME/bin/olsnodes -l -n -a` - if [ $? -ne 0 ] ; then - # En cluster 11, on n'a pas de -a (mode cluster flex/normal) - lNODE_INFO=`$ORA_CRS_HOME/bin/olsnodes -l -n` - fi - echo "NODE_INFO=$lNODE_INFO" >> $FICH_INFOS - eval $__varRecherche="'$lNODE_INFO'" - ;; - ORA_CRS_CLUSTER_NAME) - local lORA_CRS_CLUSTER_NAME=`$ORA_CRS_HOME/bin/olsnodes -c` - echo "ORA_CRS_CLUSTER_NAME=$lORA_CRS_CLUSTER_NAME" >> $FICH_INFOS - eval $__varRecherche="'$lORA_CRS_CLUSTER_NAME'" - ;; - ORA_CRS_ACTIVEVERSION) - local lORA_CRS_ACTIVEVERSION=`$ORA_CRS_HOME/bin/crsctl query crs activeversion | cut -d[ -f2 | cut -d. -f1` - echo "ORA_CRS_ACTIVEVERSION=$lORA_CRS_ACTIVEVERSION" >> $FICH_INFOS - eval $__varRecherche="'$lORA_CRS_ACTIVEVERSION'" - ;; - ORA_CRS_CLUSTERMODE) - local lORA_CRS_CLUSTERMODE=`$ORA_CRS_HOME/bin/crsctl get cluster mode config |cut -d\" -f2` - echo "ORA_CRS_CLUSTERMODE=$lORA_CRS_CLUSTERMODE" >> $FICH_INFOS - eval $__varRecherche="'$lORA_CRS_CLUSTERMODE'" - ;; - esac - fi -} -######## - -decho "Terminal en mode interactif: $INTERACTIF" ## On entre seulement pour certains utilisateurs. -## root een fait partie pour la composante cluster, crsctl, ... -if [ $USER = "SED_ORACLE_TARGET__" ] || [ $USER = "SED_GRID_TARGET__" ] || [ $USER = "root" ] ; then +if [ $USER = "grid" ] || [ $USER = "oracle" ] || [ $USER = "root" ] ; then - decho $USER login profile - # Certaines operations ne sont pas a realiser pour root # les limites sont laissees par defaut # ainsi que le masque de creation de fichier ou le stty break. if [ $USER != "root" ] ; then - ajustement_limites + # ajustement des limites + if [ $SHELL = "/bin/ksh" ] ; then + ulimit -p 16384 + ulimit -n 65536 + ulimit -s 32768 + else + ulimit -u 16384 -n 65536 + fi + ulimit -Hs 32768 + ulimit -Ss 10240 - decho umask et stty break # Masque de création des fichiers umask 022 @@ -166,269 +25,24 @@ if [ $USER = "SED_ORACLE_TARGET__" ] || [ $USER = "SED_GRID_TARGET__" ] || [ $US if [ -t 0 ]; then stty intr ^C fi - fi - - # préparation pour l'inventaire - # Si l'installation a ete realisee, on a un inventaire accessible que l'on peut traiter - OLR_LOC=/etc/oracle/olr.loc - ORA_INVENTORY_CFFILE=/etc/oraInst.loc - decho OLR: $OLR_LOC - decho Inventaire: $ORA_INVENTORY_CFFILE - - # Si l'installation n'est pas faite... on ignore cette partie - if [ -f $ORA_INVENTORY_CFFILE ] ; then - decho Installation trouvee - # On recupere les informations de l'inventaire, pour traitement eventuel - ORA_INVENTORY=`grep inventory_loc $ORA_INVENTORY_CFFILE | cut -d= -f2` - ORA_INVENTORY_XMLFILE=$ORA_INVENTORY/ContentsXML/inventory.xml - - # Recuperation de l'emplacement du répertoire prive de l'utilisateur premier oracle - ORA_EXPL_DIR=SED_EXPL_REP__ - ORA_EXPL_BIN=$ORA_EXPL_DIR/bin - ORA_EXPL_SQL=$ORA_EXPL_DIR/sql - ORA_EXPL_TMP=$ORA_EXPL_DIR/tmp - ORA_EXPL_RLWVOC=$ORA_EXPL_DIR/rlwrap_vocabulaire - # Préparation des informations de complément pour RLWrap par rapport aux fichiers de vocabulaire, si présents - if [ -r "$ORA_EXPL_RLWVOC/adrci" ] ; then - RLW_COMP_ADRCI=" -i -f $ORA_EXPL_RLWVOC/adrci " - fi - if [ -r "$ORA_EXPL_RLWVOC/asmcmd" ] ; then - RLW_COMP_ASMCMD=" -i -f $ORA_EXPL_RLWVOC/asmcmd " - fi - if [ -r "$ORA_EXPL_RLWVOC/dgmgrl" ] ; then - RLW_COMP_DGMGRL=" -i -f $ORA_EXPL_RLWVOC/dgmgrl " - fi - if [ -r "$ORA_EXPL_RLWVOC/rman" ] ; then - RLW_COMP_RMAN=" -i -f $ORA_EXPL_RLWVOC/rman " - fi - if [ -r "$ORA_EXPL_RLWVOC/sqlplus" -a -d "$ORA_EXPL_RLWVOC/sqlplus" ] ; then - LISTE_COMPLEMENTS=`ls $ORA_EXPL_RLWVOC/sqlplus | sed -e "s|^| -f $ORA_EXPL_RLWVOC/sqlplus/|g" | tr '\n' ' '` - RLW_COMP_SQLPLUS=" -i $LISTE_COMPLEMENTS " - unset LISTE_COMPLEMENTS - fi - - # Test pour savoir si GI installée - if [ -f $OLR_LOC ] ; then - decho GI installee - # Mise en place du pointeur de racine CRS - export ORA_CRS_HOME=`grep crs_home /etc/oracle/olr.loc|cut -d= -f2` - decho ORA_CRS_HOME = $ORA_CRS_HOME - - # On utilise olsnodes qui "sors" rapidement pour aussi valider que la couche est UP - # sinon on perds un temps phénoménal pour rien avec les timeout crsctl - # La remarque n'est plus valable avec la 12C. Donc, ajout d'un test via la ressource ora.crsd - $ORA_CRS_HOME/bin/crsctl stat res ora.crsd -init | grep STATE | grep ONLINE 1>/dev/null 2>&1 - if [ $? -eq 0 ] ; then - # C'est démarré, on peut traiter. - charge NODE_INFO - export ORA_CRS_NODE_NUM=`echo $NODE_INFO | awk '{print $2}'` - export ORA_CRS_NODE_TYPE=`echo $NODE_INFO | awk '{print $3}'` - decho ORA_CRS_NODE_NUM = $ORA_CRS_NODE_NUM - decho ORA_CRS_NODE_TYPE = $ORA_CRS_NODE_TYPE - - charge ORA_CRS_CLUSTER_NAME - decho ORA_CRS_CLUSTER_NAME=$ORA_CRS_CLUSTER_NAME - - # Si le cluster n'a pas de nom, c'est que nous sommes en Oracle Restart. Donc pas de query activeversion! - if [ "$ORA_CRS_CLUSTER_NAME" != "" ] ; then - # Alias qui permet à partir du nom de la base de fixer dynamiquement le SID (depuis ORACLE_SID via oraenv) - if [ "$USER" != "root" ] ; then - # Ajout d'un alias pour adapter le nom de base vers le sid - # le nom de la base est localisé dans le fichier oratab et le nom de l'instance dépend de la configuration - alias sid='egrep "^$ORACLE_SID:" /etc/oratab 1>/dev/null 2>&1 && export ORACLE_SID=`LANG=C srvctl status instance -d $ORACLE_SID -n \`hostname -s\`| cut -d" " -f2`' - fi - charge ORA_CRS_ACTIVEVERSION - if [ "$ORA_CRS_ACTIVEVERSION" -eq "12" ] ; then - # On peut attendre un cluster flex ou non - charge ORA_CRS_CLUSTERMODE - # On raccourcis "standard" en "std" si besoin - if [ "$ORA_CRS_CLUSTERMODE" = "standard" ] ; then - export ORA_CRS_CLUSTERMODE=std - fi - else - export ORA_CRS_CLUSTERMODE=std - fi - else - ORA_CRS_CLUSTERMODE=rst - fi - decho Mode: $ORA_CRS_CLUSTERMODE - - - else - decho Clusterware OFFLINE. - # Est-on en RESTART ???!!! - if [ `cat /etc/oracle/ocr.loc | grep "local_only=TRUE" |wc -l` -eq 1 ] ; then - decho certainement GI standalone pour RESTART - ORA_CRS_CLUSTERMODE=rst - fi - fi - - # Alias manipulation - if [ $USER = "SED_ORACLE_TARGET__" ] ; then - # pointeur facile pour crsctl... - decho Alias crsctl cree - alias crsctl='$ORA_CRS_HOME/bin/crsctl' - elif [ $USER = "root" ] ; then - decho Ajustement path user root - # On ajoute le chemin du cluster dans le PATH - export PATH=$ORA_CRS_HOME/bin:$ORA_EXPL_BIN:$PATH - elif [ $USER = "SED_GRID_TARGET__" ] ; then - decho environnement GI - export ORACLE_HOME=$ORA_CRS_HOME - export ORACLE_BASE=`$ORACLE_HOME/bin/orabase` - export SQLPATH=$ORA_EXPL_SQL - export PATH=$ORA_CRS_HOME/bin:$ORA_CRS_HOME/OPatch:$ORA_EXPL_BIN:$PATH - if [ `ps -ef | grep -E 'pmon.*\+A' | grep -v grep | cut -d_ -f3- | wc -l` -gt 0 ] ; then - export ORACLE_SID=`ps -ef | grep -E 'pmon.*\+A' | grep -v grep | cut -d_ -f3- | sort | tail -1` - fi - fi - ## Accès direct aux logs - if [ "$INTERACTIF" = "OUI" ] ; then - DRT_LI=`tput lines` - else - DRT_LI=100 - fi - ## On teste la présence de fichiers "11" hors ADR. - if [ -r $ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/ohasd/ohasd.log ] ; then - ## Configuration ancienne - OHASD_LOG=$ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/ohasd/ohasd.log - CSSD_LOG=$ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/cssd/ocssd.log - CRSD_LOG=$ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/crsd/crsd.log - ALERT_LOG=$ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/alert$HOSTNAME_SIMPLE.log - else - ## Configuration nouvelle ADR pour les journaux cluster - OB=`ORACLE_HOME=$ORA_CRS_HOME ${ORA_CRS_HOME}/bin/orabase` - OHASD_LOG=$OB/diag/crs/$HOSTNAME_SIMPLE/crs/trace/ohasd.trc - CSSD_LOG=$OB/diag/crs/$HOSTNAME_SIMPLE/crs/trace/ocssd.trc - CRSD_LOG=$OB/diag/crs/$HOSTNAME_SIMPLE/crs/trace/crsd.trc - ALERT_LOG=$OB/diag/crs/$HOSTNAME_SIMPLE/crs/trace/alert.log - fi - ## Cluster Alert log - alias alertgen="tail -${DRT_LI}f $ALERT_LOG" - ## LOG - OHASD - alias ohasd="tail -${DRT_LI}f $OHASD_LOG" - ## LOG - CSSD - alias cssd="tail -${DRT_LI}f $CSSD_LOG" - ## LOG - CRSD - alias crsd="tail -${DRT_LI}f $CRSD_LOG" - ## Alert global watch - - ## Aucun intérêt dans un terminal non interactif - if [ "$INTERACTIF" = "OUI" ] ; then - DRT_LI=`expr $DRT_LI / 10 - 1` - DRT_LI2=`expr $DRT_LI \* 3` - DRT_LI6=`expr $DRT_LI \* 6` - NORMAL=$(tput sgr0) - ROUGE=$(tput setaf 1) - alias alert="while :; do clear ; R=\`tput cols\` ; echo -e \"${ROUGE}ALERT********${NORMAL}\" ; tail -$DRT_LI $ALERT_LOG | cut -c -\$R ; echo -e \"${ROUGE}CRSD*********${NORMAL}\" ; tail -$DRT_LI2 $CRSD_LOG | cut -c -\$R ; echo -e \"${ROUGE}OCSSD********${NORMAL}\" ; tail -$DRT_LI6 $CSSD_LOG | cut -c -\$R ; echo -e \"${ROUGE}OHASD********${NORMAL}\" ; tail -$DRT_LI $OHASD_LOG | cut -c -\$R ; sleep 1; done" - fi - else - decho GI non installee - ORA_CRS_CLUSTERMODE=sa - fi - - # Alias CDT valable pour tous environnements - # Attention, cluster ou non. - if [ "$ORA_CRS_CLUSTERMODE" = "rst" -o "$ORA_CRS_CLUSTERMODE" = "sa" ] ; then - # Sans GI ou en Restart - if [ $USER = "SED_ORACLE_TARGET__" ] ; then - alias cdt='cd $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID | tr [:upper:] [:lower:]`/$ORACLE_SID/trace' - elif [ $USER = "SED_GRID_TARGET__" ] ; then - alias cdt='cd $ORACLE_BASE/diag/asm/`echo $ORACLE_SID | tr [:upper:] [:lower:]`/$ORACLE_SID/trace' - fi - elif [ ! -z "$ORA_CRS_CLUSTERMODE" ] ; then - # En cluster, donc - if [ $USER = "SED_ORACLE_TARGET__" ] ; then - alias cdt='cd $ORACLE_BASE/diag/rdbms/`echo ${ORACLE_SID%?} | tr [:upper:] [:lower:]`/$ORACLE_SID/trace' - elif [ $USER = "SED_GRID_TARGET__" ] ; then - alias cdt='cd $ORACLE_BASE/diag/asm/`echo ${ORACLE_SID%?} | tr [:upper:] [:lower:]`/$ORACLE_SID/trace' - fi - else - decho "Type cluster non calculé" - fi - - # Env oracle avec ou hors GI - if [ $USER = "SED_ORACLE_TARGET__" ] ; then - export SQLPATH=$ORA_EXPL_SQL - # Si 1 seul OH dans l'inventaire, on set. Non déterminable si GI non cluster (manque le CRS=true pour identifier) - if [ `grep ' on change - ## Sinon si on est root et couleur ==> on change - ## Sinon on est alors forcément oracle. si couleur ==> on change - if [ $USER = "SED_GRID_TARGET__" -a $GRID_INV_C -eq 1 ] || [ $USER = "root" -a $ROOT_INV_C -eq 1 ] || [ $ORAC_INV_C -eq 1 -a $USER != "SED_GRID_TARGET__" -a $USER != "root" ] ; then - decho Invite en couleur - if [ "$ORA_CRS_CLUSTERMODE" = "flex" ] ; then - export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] ($ORA_CRS_CLUSTERMODE $ORA_CRS_CLUSTER_NAME $ORA_CRS_NODE_TYPE:$ORA_CRS_NODE_NUM) \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' - elif [ "$ORA_CRS_CLUSTERMODE" = "std" ] ; then - export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] ($ORA_CRS_CLUSTERMODE $ORA_CRS_CLUSTER_NAME:$ORA_CRS_NODE_NUM) \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' - elif [ "$ORA_CRS_CLUSTERMODE" = "sa" -o "$ORA_CRS_CLUSTERMODE" = "rst" ] ; then - export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] ($ORA_CRS_CLUSTERMODE) \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' - else - export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' + alias sqlplus="rlwrap sqlplus" + alias rman="rlwrap rman" + alias asmcmd="rlwrap asmcmd" + alias adrci="rlwrap adrci" + alias dgmgrl="rlwrap dgmgrl" fi fi - # Mode eMacs d'édition de ligne par défaut. Possible de passer en mode vi si nécessaire. - set -o emacs + # prompt coloré + vert=$(tput setaf 2) + bleu=$(tput setaf 4) + gras=$(tput bold) + rouge=$(tput setaf 1) + reset=$(tput sgr0) fi -unset charge ajustement_limites decho APP_CTX HOSTNAME_SIMPLE DEBUG OLR_LOC ORA_INVENTORY ORA_INVENTORY_XMLFILE ORA_INVENTORY_CFFILE ORA_USER_HOME ORA_EXPL_DIR ORA_EXPL_BIN ORA_EXPL_SQL ORA_EXPL_TMP DRT_LI DRT_LI2 DRT_LI6 NODE_INFO DB_TARGET DEC_INST ORA_CRS_HOME INTERACTIF +export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' diff --git a/configure-host-oel7/files/z_oracle_full.sh b/configure-host-oel7/files/z_oracle_full.sh new file mode 100644 index 0000000..13f934c --- /dev/null +++ b/configure-host-oel7/files/z_oracle_full.sh @@ -0,0 +1,434 @@ +#!/bin/bash +######################################################################### +######################################################################### +## Fichier de configuration d'environnement Oracle +## Pour infrastructure cluster ou standalone. +## Versions testees: 12.1, 11.2 GI et SA, flex/normal +## +## 2014-08-13 YOM Correction de l'emplacement des journaux cluster vers ADR en 12c +## 2014-08-13 YOM Correction concernant la détection Restart en 12c (olsnodes réponds...) +## 2014-08-20 YOM Correction des alias crsstat et crsstati pour implémenter les variables ORA_CRS car elles ne doivent pas être laissées dans l'environnement +## 2014-12-02 YOM Correction du prompt par défaut +## 2014-12-03 YOM Suppression des alias crsstat et crsstati pour les transformer en scripts +## 2014-12-04 YOM Ajout de l'alias OH pour un « cd $ORACLE_HOME » +## 2015-01-21 YOM Test si le terminal est interractif pour éviter les erreurs TPUT en v7 +## 2016-02-15 YOM Ajout de l'alias « cdt » sur demande de PIL +## 2016-02-16 YOM Paramétrage de la mise à niveau de l'invite de commande +## 2016-02-25 YOM Modifications comportementales pour faciliter l'execution +## 2016-03-29 YOM 12.2 : changement de la conf ulimit pour être OK préco (fonction ajustement_limites) +## 2016-03-04 YOM . Modification du test de démarrage du cluster à cause de la 12c qui change le comportement olsnodes +## . Ajout d'un critère supplémentaire lié à l'alias cdt si le cluster est arrêté +## 2016-04-07 YOM . Ajout de l'alias SID pour la gestion facile de l'environnement +## . Ajustement de la zone d'exploitation +## 2016-06-28 YOM Rectification d'un problème si le cluster est arrêtée qui provoquait unn affichage d'erreur bash non voulu +## 2016-09-05 YOM Changement de l'alias « alert » pour limiter la largeur de ligne d'affichage +## 2016-09-16 YOM Utilisation des fichiers du vocabulaire RLWrap si ils sont présents (demande de THT) +## 2017-05-16 YOM Modification de la présentation de fonction (retrait des ()) pour une meilleure compatibilité +## 2017-08-23 YOM Création d'un fichier qui stocke la configuration repérée afin de ne pas systématiquement recalculer l'ensemble du paramétrage +## 2019-01-08 THT Arret de l'utilisation de local dans la fonction charge pour la variable lNODE_INFO, car l'utilisation de local donnait toujours un code retour à 0 +## 2019-01-23 THT Ajout de opatch dans le PATH de grid et oracle +######################################################################### + +## Activation des echo pour DEBUG si mis à 1 +DEBUG=0 + +## Invite de commande sympa à activer (1 pour activé, 0 pour dormant) : +ORAC_INV_C=1 +GRID_INV_C=1 +ROOT_INV_C=1 + +## Contexte +APP_CTX=z_oracle.sh +HOSTNAME_SIMPLE=`hostname -s` + +## Shell interactif ou non ? +fd=0 +if [[ $- = *i* ]] +then + INTERACTIF=OUI +else + INTERACTIF=NON +fi + +## Ajustement des limites (préconisations Oracle) +function ajustement_limites { + decho fonction ajustement limites + if [ $SHELL = "/bin/ksh" ] ; then + ulimit -p 16384 + ulimit -n 65536 + ulimit -s 32768 + else + ulimit -u 16384 -n 65536 + fi + ulimit -Hs 32768 + ulimit -Ss 10240 +} + +## Affichage des messages de sortie de debug +function decho { + if [ $DEBUG -eq 1 ] ; then + echo $APP_CTX: $* + fi +} + +######## Préparation fichier d'historique des informations de contexte +FICH_INFOS=/tmp/.z_oracle +# Obsolescence parr défaut: 24h +FICH_OBS=24 +## Gestion de l'obsolescence du fichier d'historique de configuration +# Si il n'existe pas, aucun problème. Sinon, il faut traiter +#ls -lrta $FICH_INFOS +#ls -lrts /tmp/.z_oracle +if [ -r $FICH_INFOS ] ; then + # Si obsolete + decho "Fichier $FICH_INFOS trouvé" + NB_SEC_DEPUIS_EPOCH=`PATH=\`getconf PATH\` awk 'BEGIN{srand();print srand()}'` + NB_SEC_DEPUIS_EPOCH_FICHIER=`stat -c %Y $FICH_INFOS` + NB_SEC_ECOULEES_MOD=`expr $NB_SEC_DEPUIS_EPOCH - $NB_SEC_DEPUIS_EPOCH_FICHIER` + HEURES_MOD=`expr $NB_SEC_ECOULEES_MOD / 3600` + if [ $HEURES_MOD -ge $FICH_OBS ] ; then + decho "Suppression $FICH_INFOS : obsolète (+${FICH_OBS}h)" + rm -f $FICH_INFOS 1>/dev/null 2>&1 + touch $FICH_INFOS + chmod 666 $FICH_INFOS + fi +else + decho "fichier $FICH_INFOS non trouvé" + touch $FICH_INFOS + chmod 666 $FICH_INFOS +fi + +# Fonction qui charge une information, soit depuis le contexte, soit depuis le fichier d'infos +function charge { + # Premier paramètre: le nom de l'élément recherché, identique au nom de la variable d'env du script + if [ $# -ne 1 ] ; then + decho charge: manque de paramétrage + exit 0 + fi + # Afin d'éviter la globalisation des variables de recherche et ne pas alourdir "l'unset" final, utilisation de variables locales pour la recherche + local __varRecherche=$1 + # Déjà connu via le fichier d'infos pour chargement rapide et pas reclacul + if [ `egrep "^${1}=" $FICH_INFOS | wc -l` -eq 1 ] ; then + # OUI + local lRep=`egrep "^$1" $FICH_INFOS | cut -d= -f2` + eval $__varRecherche="'$lRep'" + else + # NON : on calcule et on pérénise + case $1 in + NODE_INFO) + lNODE_INFO=`$ORA_CRS_HOME/bin/olsnodes -l -n -a` + if [ $? -ne 0 ] ; then + # En cluster 11, on n'a pas de -a (mode cluster flex/normal) + lNODE_INFO=`$ORA_CRS_HOME/bin/olsnodes -l -n` + fi + echo "NODE_INFO=$lNODE_INFO" >> $FICH_INFOS + eval $__varRecherche="'$lNODE_INFO'" + ;; + ORA_CRS_CLUSTER_NAME) + local lORA_CRS_CLUSTER_NAME=`$ORA_CRS_HOME/bin/olsnodes -c` + echo "ORA_CRS_CLUSTER_NAME=$lORA_CRS_CLUSTER_NAME" >> $FICH_INFOS + eval $__varRecherche="'$lORA_CRS_CLUSTER_NAME'" + ;; + ORA_CRS_ACTIVEVERSION) + local lORA_CRS_ACTIVEVERSION=`$ORA_CRS_HOME/bin/crsctl query crs activeversion | cut -d[ -f2 | cut -d. -f1` + echo "ORA_CRS_ACTIVEVERSION=$lORA_CRS_ACTIVEVERSION" >> $FICH_INFOS + eval $__varRecherche="'$lORA_CRS_ACTIVEVERSION'" + ;; + ORA_CRS_CLUSTERMODE) + local lORA_CRS_CLUSTERMODE=`$ORA_CRS_HOME/bin/crsctl get cluster mode config |cut -d\" -f2` + echo "ORA_CRS_CLUSTERMODE=$lORA_CRS_CLUSTERMODE" >> $FICH_INFOS + eval $__varRecherche="'$lORA_CRS_CLUSTERMODE'" + ;; + esac + fi +} +######## + +decho "Terminal en mode interactif: $INTERACTIF" + +## On entre seulement pour certains utilisateurs. +## root een fait partie pour la composante cluster, crsctl, ... +if [ $USER = "SED_ORACLE_TARGET__" ] || [ $USER = "SED_GRID_TARGET__" ] || [ $USER = "root" ] ; then + + decho $USER login profile + + # Certaines operations ne sont pas a realiser pour root + # les limites sont laissees par defaut + # ainsi que le masque de creation de fichier ou le stty break. + if [ $USER != "root" ] ; then + ajustement_limites + + decho umask et stty break + # Masque de création des fichiers + umask 022 + + # Pour prévention SSH + if [ -t 0 ]; then + stty intr ^C + fi + fi + + # préparation pour l'inventaire + # Si l'installation a ete realisee, on a un inventaire accessible que l'on peut traiter + OLR_LOC=/etc/oracle/olr.loc + ORA_INVENTORY_CFFILE=/etc/oraInst.loc + decho OLR: $OLR_LOC + decho Inventaire: $ORA_INVENTORY_CFFILE + + # Si l'installation n'est pas faite... on ignore cette partie + if [ -f $ORA_INVENTORY_CFFILE ] ; then + decho Installation trouvee + # On recupere les informations de l'inventaire, pour traitement eventuel + ORA_INVENTORY=`grep inventory_loc $ORA_INVENTORY_CFFILE | cut -d= -f2` + ORA_INVENTORY_XMLFILE=$ORA_INVENTORY/ContentsXML/inventory.xml + + # Recuperation de l'emplacement du répertoire prive de l'utilisateur premier oracle + ORA_EXPL_DIR=SED_EXPL_REP__ + ORA_EXPL_BIN=$ORA_EXPL_DIR/bin + ORA_EXPL_SQL=$ORA_EXPL_DIR/sql + ORA_EXPL_TMP=$ORA_EXPL_DIR/tmp + ORA_EXPL_RLWVOC=$ORA_EXPL_DIR/rlwrap_vocabulaire + # Préparation des informations de complément pour RLWrap par rapport aux fichiers de vocabulaire, si présents + if [ -r "$ORA_EXPL_RLWVOC/adrci" ] ; then + RLW_COMP_ADRCI=" -i -f $ORA_EXPL_RLWVOC/adrci " + fi + if [ -r "$ORA_EXPL_RLWVOC/asmcmd" ] ; then + RLW_COMP_ASMCMD=" -i -f $ORA_EXPL_RLWVOC/asmcmd " + fi + if [ -r "$ORA_EXPL_RLWVOC/dgmgrl" ] ; then + RLW_COMP_DGMGRL=" -i -f $ORA_EXPL_RLWVOC/dgmgrl " + fi + if [ -r "$ORA_EXPL_RLWVOC/rman" ] ; then + RLW_COMP_RMAN=" -i -f $ORA_EXPL_RLWVOC/rman " + fi + if [ -r "$ORA_EXPL_RLWVOC/sqlplus" -a -d "$ORA_EXPL_RLWVOC/sqlplus" ] ; then + LISTE_COMPLEMENTS=`ls $ORA_EXPL_RLWVOC/sqlplus | sed -e "s|^| -f $ORA_EXPL_RLWVOC/sqlplus/|g" | tr '\n' ' '` + RLW_COMP_SQLPLUS=" -i $LISTE_COMPLEMENTS " + unset LISTE_COMPLEMENTS + fi + + # Test pour savoir si GI installée + if [ -f $OLR_LOC ] ; then + decho GI installee + # Mise en place du pointeur de racine CRS + export ORA_CRS_HOME=`grep crs_home /etc/oracle/olr.loc|cut -d= -f2` + decho ORA_CRS_HOME = $ORA_CRS_HOME + + # On utilise olsnodes qui "sors" rapidement pour aussi valider que la couche est UP + # sinon on perds un temps phénoménal pour rien avec les timeout crsctl + # La remarque n'est plus valable avec la 12C. Donc, ajout d'un test via la ressource ora.crsd + $ORA_CRS_HOME/bin/crsctl stat res ora.crsd -init | grep STATE | grep ONLINE 1>/dev/null 2>&1 + if [ $? -eq 0 ] ; then + # C'est démarré, on peut traiter. + charge NODE_INFO + export ORA_CRS_NODE_NUM=`echo $NODE_INFO | awk '{print $2}'` + export ORA_CRS_NODE_TYPE=`echo $NODE_INFO | awk '{print $3}'` + decho ORA_CRS_NODE_NUM = $ORA_CRS_NODE_NUM + decho ORA_CRS_NODE_TYPE = $ORA_CRS_NODE_TYPE + + charge ORA_CRS_CLUSTER_NAME + decho ORA_CRS_CLUSTER_NAME=$ORA_CRS_CLUSTER_NAME + + # Si le cluster n'a pas de nom, c'est que nous sommes en Oracle Restart. Donc pas de query activeversion! + if [ "$ORA_CRS_CLUSTER_NAME" != "" ] ; then + # Alias qui permet à partir du nom de la base de fixer dynamiquement le SID (depuis ORACLE_SID via oraenv) + if [ "$USER" != "root" ] ; then + # Ajout d'un alias pour adapter le nom de base vers le sid + # le nom de la base est localisé dans le fichier oratab et le nom de l'instance dépend de la configuration + alias sid='egrep "^$ORACLE_SID:" /etc/oratab 1>/dev/null 2>&1 && export ORACLE_SID=`LANG=C srvctl status instance -d $ORACLE_SID -n \`hostname -s\`| cut -d" " -f2`' + fi + charge ORA_CRS_ACTIVEVERSION + if [ "$ORA_CRS_ACTIVEVERSION" -eq "12" ] ; then + # On peut attendre un cluster flex ou non + charge ORA_CRS_CLUSTERMODE + # On raccourcis "standard" en "std" si besoin + if [ "$ORA_CRS_CLUSTERMODE" = "standard" ] ; then + export ORA_CRS_CLUSTERMODE=std + fi + else + export ORA_CRS_CLUSTERMODE=std + fi + else + ORA_CRS_CLUSTERMODE=rst + fi + decho Mode: $ORA_CRS_CLUSTERMODE + + + else + decho Clusterware OFFLINE. + # Est-on en RESTART ???!!! + if [ `cat /etc/oracle/ocr.loc | grep "local_only=TRUE" |wc -l` -eq 1 ] ; then + decho certainement GI standalone pour RESTART + ORA_CRS_CLUSTERMODE=rst + fi + fi + + # Alias manipulation + if [ $USER = "SED_ORACLE_TARGET__" ] ; then + # pointeur facile pour crsctl... + decho Alias crsctl cree + alias crsctl='$ORA_CRS_HOME/bin/crsctl' + elif [ $USER = "root" ] ; then + decho Ajustement path user root + # On ajoute le chemin du cluster dans le PATH + export PATH=$ORA_CRS_HOME/bin:$ORA_EXPL_BIN:$PATH + elif [ $USER = "SED_GRID_TARGET__" ] ; then + decho environnement GI + export ORACLE_HOME=$ORA_CRS_HOME + export ORACLE_BASE=`$ORACLE_HOME/bin/orabase` + export SQLPATH=$ORA_EXPL_SQL + export PATH=$ORA_CRS_HOME/bin:$ORA_CRS_HOME/OPatch:$ORA_EXPL_BIN:$PATH + if [ `ps -ef | grep -E 'pmon.*\+A' | grep -v grep | cut -d_ -f3- | wc -l` -gt 0 ] ; then + export ORACLE_SID=`ps -ef | grep -E 'pmon.*\+A' | grep -v grep | cut -d_ -f3- | sort | tail -1` + fi + fi + ## Accès direct aux logs + if [ "$INTERACTIF" = "OUI" ] ; then + DRT_LI=`tput lines` + else + DRT_LI=100 + fi + ## On teste la présence de fichiers "11" hors ADR. + if [ -r $ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/ohasd/ohasd.log ] ; then + ## Configuration ancienne + OHASD_LOG=$ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/ohasd/ohasd.log + CSSD_LOG=$ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/cssd/ocssd.log + CRSD_LOG=$ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/crsd/crsd.log + ALERT_LOG=$ORA_CRS_HOME/log/$HOSTNAME_SIMPLE/alert$HOSTNAME_SIMPLE.log + else + ## Configuration nouvelle ADR pour les journaux cluster + OB=`ORACLE_HOME=$ORA_CRS_HOME ${ORA_CRS_HOME}/bin/orabase` + OHASD_LOG=$OB/diag/crs/$HOSTNAME_SIMPLE/crs/trace/ohasd.trc + CSSD_LOG=$OB/diag/crs/$HOSTNAME_SIMPLE/crs/trace/ocssd.trc + CRSD_LOG=$OB/diag/crs/$HOSTNAME_SIMPLE/crs/trace/crsd.trc + ALERT_LOG=$OB/diag/crs/$HOSTNAME_SIMPLE/crs/trace/alert.log + fi + ## Cluster Alert log + alias alertgen="tail -${DRT_LI}f $ALERT_LOG" + ## LOG - OHASD + alias ohasd="tail -${DRT_LI}f $OHASD_LOG" + ## LOG - CSSD + alias cssd="tail -${DRT_LI}f $CSSD_LOG" + ## LOG - CRSD + alias crsd="tail -${DRT_LI}f $CRSD_LOG" + ## Alert global watch + + ## Aucun intérêt dans un terminal non interactif + if [ "$INTERACTIF" = "OUI" ] ; then + DRT_LI=`expr $DRT_LI / 10 - 1` + DRT_LI2=`expr $DRT_LI \* 3` + DRT_LI6=`expr $DRT_LI \* 6` + NORMAL=$(tput sgr0) + ROUGE=$(tput setaf 1) + alias alert="while :; do clear ; R=\`tput cols\` ; echo -e \"${ROUGE}ALERT********${NORMAL}\" ; tail -$DRT_LI $ALERT_LOG | cut -c -\$R ; echo -e \"${ROUGE}CRSD*********${NORMAL}\" ; tail -$DRT_LI2 $CRSD_LOG | cut -c -\$R ; echo -e \"${ROUGE}OCSSD********${NORMAL}\" ; tail -$DRT_LI6 $CSSD_LOG | cut -c -\$R ; echo -e \"${ROUGE}OHASD********${NORMAL}\" ; tail -$DRT_LI $OHASD_LOG | cut -c -\$R ; sleep 1; done" + fi + else + decho GI non installee + ORA_CRS_CLUSTERMODE=sa + fi + + # Alias CDT valable pour tous environnements + # Attention, cluster ou non. + if [ "$ORA_CRS_CLUSTERMODE" = "rst" -o "$ORA_CRS_CLUSTERMODE" = "sa" ] ; then + # Sans GI ou en Restart + if [ $USER = "SED_ORACLE_TARGET__" ] ; then + alias cdt='cd $ORACLE_BASE/diag/rdbms/`echo $ORACLE_SID | tr [:upper:] [:lower:]`/$ORACLE_SID/trace' + elif [ $USER = "SED_GRID_TARGET__" ] ; then + alias cdt='cd $ORACLE_BASE/diag/asm/`echo $ORACLE_SID | tr [:upper:] [:lower:]`/$ORACLE_SID/trace' + fi + elif [ ! -z "$ORA_CRS_CLUSTERMODE" ] ; then + # En cluster, donc + if [ $USER = "SED_ORACLE_TARGET__" ] ; then + alias cdt='cd $ORACLE_BASE/diag/rdbms/`echo ${ORACLE_SID%?} | tr [:upper:] [:lower:]`/$ORACLE_SID/trace' + elif [ $USER = "SED_GRID_TARGET__" ] ; then + alias cdt='cd $ORACLE_BASE/diag/asm/`echo ${ORACLE_SID%?} | tr [:upper:] [:lower:]`/$ORACLE_SID/trace' + fi + else + decho "Type cluster non calculé" + fi + + # Env oracle avec ou hors GI + if [ $USER = "SED_ORACLE_TARGET__" ] ; then + export SQLPATH=$ORA_EXPL_SQL + # Si 1 seul OH dans l'inventaire, on set. Non déterminable si GI non cluster (manque le CRS=true pour identifier) + if [ `grep ' on change + ## Sinon si on est root et couleur ==> on change + ## Sinon on est alors forcément oracle. si couleur ==> on change + if [ $USER = "SED_GRID_TARGET__" -a $GRID_INV_C -eq 1 ] || [ $USER = "root" -a $ROOT_INV_C -eq 1 ] || [ $ORAC_INV_C -eq 1 -a $USER != "SED_GRID_TARGET__" -a $USER != "root" ] ; then + decho Invite en couleur + if [ "$ORA_CRS_CLUSTERMODE" = "flex" ] ; then + export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] ($ORA_CRS_CLUSTERMODE $ORA_CRS_CLUSTER_NAME $ORA_CRS_NODE_TYPE:$ORA_CRS_NODE_NUM) \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' + elif [ "$ORA_CRS_CLUSTERMODE" = "std" ] ; then + export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] ($ORA_CRS_CLUSTERMODE $ORA_CRS_CLUSTER_NAME:$ORA_CRS_NODE_NUM) \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' + elif [ "$ORA_CRS_CLUSTERMODE" = "sa" -o "$ORA_CRS_CLUSTERMODE" = "rst" ] ; then + export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] ($ORA_CRS_CLUSTERMODE) \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' + else + export PS1='[\[$bleu\]\u\[$reset\]@\[$vert\]\h\[$reset\] \[$rouge\]${TWO_TASK:-$ORACLE_SID}\[$reset\] \W]\$ ' + fi + fi + + # Mode eMacs d'édition de ligne par défaut. Possible de passer en mode vi si nécessaire. + set -o emacs + +fi + +unset charge ajustement_limites decho APP_CTX HOSTNAME_SIMPLE DEBUG OLR_LOC ORA_INVENTORY ORA_INVENTORY_XMLFILE ORA_INVENTORY_CFFILE ORA_USER_HOME ORA_EXPL_DIR ORA_EXPL_BIN ORA_EXPL_SQL ORA_EXPL_TMP DRT_LI DRT_LI2 DRT_LI6 NODE_INFO DB_TARGET DEC_INST ORA_CRS_HOME INTERACTIF