#################################################################
# Modified by EMEA OracleDBA Team for enhancements & automation #
# DEC 2016                                                      #
#################################################################
#                                                               #
# USAGE : To be executed as oracle user                         #
#         (pbrun to oracle or pboracle)                         #
#                                                               #
# Manual execution                                              #
#       sh bl_start.ksh                                         #
#                                                               #
# Via job scheduler tools and by-passing the prompt             #
#       sh bl_start.ksh y                                       #
#                                                               #
#---------------------------------------------------------------#
# //Generic information about the batch of scripts developed//  #
#       bl_status.ksh                                           #
#       bl_stop.ksh                                             #
#       bl_stop_crs.ksh                                         #
#       bl_start_crs.ksh                                        #
#       bl_start.ksh                                            #
#                                                               #
# Versions/Combinations Supported                               #
#       Clustware 12c                                           #
#       Clustware 11g                                           #
#       Clustware 10g                                           #
#       NON-RAC with ASM 11g                                    #
#       NON-RAC with ASM 10g                                    #
#       NON-RAC & NON-ASM                                       #
#                                                               #
# Components in scope                                           #
#       Clusterware                                             #
#       ASM Instance                                            #
#       Database Instance                                       #
#       Cluster Listener                                        #
#       Local Listener                                          #
#       Manager Recovery Process                                #
#       GoldenGate Replication                                  #
#       Port Utility                                            #
#       Enterprise Manager Agent                                #
#       OSWatcher Utility                                       #
#       Foglight Monitoring Agent                               #
#       Filesystem                                              #
#       Rawdisk                                                 #
#                                                               #
#################################################################
export OS=`uname -a | awk '{ print $1 }'`
eval timevalue=`date '+%m%d%Y_%H%M%S'`
eval filename=$(echo $(hostname) | cut -d. -f1)_$timevalue

# Check if user really wants to START the services

# CHECK IF MYSQL DATABASE SERVER

if [ "$(ps -ef | grep -i mysql | grep -v grep | wc -l)" -ge 1 ]
then
        echo "This is a MySQL Database Server"
        exit 0
fi

if [ $# -eq 0 ]
    then
        read -r -p "Are you sure you want to START the Oracle services ? [y/n] " response
                if [ $response = y ]
                        then
                            echo "";   echo "Please wait while the services are started up... ";      echo ""
                            export oracred=oracle:dba
                            export oraowner=oracle
                            export oragroup=dba
                else
                    exit; >/dev/null
                fi
elif [ $1 == y ]
    then
                            echo "";   echo "Please wait while the services are started up... ";      echo ""
                            #Handle second Argument
                            if [[ ! -z $2 ]]; then
                               export oracred=$2
                               export oraowner=`echo $oracred | cut -d":" -f1 -s`
                               export oragroup=`echo $oracred | cut -d":" -f2 -s`
                            echo "Oracle Ownership Captured ARGUMENTS ...
                             oracred=$oracred
                             oraowner=$oraowner
                             oragroup=$oragroup
                            "
                            else
                               export oracred=oracle:dba
                               export oraowner=oracle
                               export oragroup=dba
                            fi

else
                    exit; >/dev/null
fi

# CHECK IF THE USER IS Correct as per Arg#2

echo " "
if [ $(whoami) != "${oraowner}" ]
then
        echo "ATTENTION : Please execute this script as ${oraowner} user"
        exit 0;
fi


# SCRIPT AND OUTPUT DIRECTORIES INITIALIZATION

if [[ ${oraowner} = "oracle" ]]; then
   if [[ -d /oracle/dba/output/generic ]]; then
      OUTPUT_DIRECTORY=/oracle/dba/output/generic
   else
      OUTPUT_DIRECTORY=/var/bl_ora/log
      if [[ ! -d $OUTPUT_DIRECTORY ]]; then
         echo "OUTPUT_DIRECTORY: $OUTPUT_DIRECTORY was not found on this server ... Exiting"
         exit 0
      fi
   fi
else
   if [[ -d /oracle/dba/output/generic ]]; then
      OUTPUT_DIRECTORY=/oracle/dba/output/generic/${oraowner}
   else
      OUTPUT_DIRECTORY=/var/bl_ora/log/${oraowner}
      if [[ ! -d $OUTPUT_DIRECTORY ]]; then
         echo "OUTPUT_DIRECTORY: $OUTPUT_DIRECTORY was not found on this server ... Exiting"
         exit 0
      fi
   fi
fi

# Remove the temporary log file
        rm -f $OUTPUT_DIRECTORY/start.log

# Assign a new log file
        LOG=$OUTPUT_DIRECTORY/start.log;                                      echo "" >> ${LOG};



# Check the server type

export server_type=$(cat $OUTPUT_DIRECTORY/server_type.log)



# Collecting service runnning information

collect_lsnr()
{
#ps -ef | grep lsnr | grep "^.*${oraowner} " | grep -v grep | grep -oP '(?<=tnslsnr )\w+' >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
ps -ef | grep lsnr | grep "^.*${oraowner} " | grep -v grep | sed -n 's/.*\(tnslsnr.*\).*/\1/p' | awk '{ print $2 }' | sed '/^\s*$/d' >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
}

collect_mrp()
{
        ps -ef | grep mrp | sort -k9 | grep "^.*${oraowner} " | grep -v grep | awk '{ print $NF }' | cut -d"_" -f3,4 -s>$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
}

collect_dbinst()
{
        ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v ASM | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s>$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
}

collect_dbservices()
{
        rm -f $OUTPUT_DIRECTORY/"$when"_"$why"_dbservices.log
        while read data
        do
                export ORACLE_DB=$(echo $data | awk 'BEGIN{FS=":"}{print $1}')       >/dev/null
                export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
                export ORAENV_ASK=NO                                                    >/dev/null
                . oraenv                                                                >/dev/null
                echo $ORACLE_DB:$ORACLE_SID":"$(srvctl status service -d $ORACLE_DB | grep $ORACLE_SID | grep -i "is running" | awk '{ print $2 }') >> $OUTPUT_DIRECTORY/"$when"_"$why"_dbservices.log
        done < $OUTPUT_DIRECTORY/db:inst.log
}

collect_asm()
{
        ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'>$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
}

collect_agent()
{
        sleep 5
        ORACLE_SID=`cat /etc/oratab | awk 'BEGIN{FS=":"}{print $1}' | grep OEM | grep -v "^#"`
        export ORAENV_ASK=NO                                                    >/dev/null;
        if [[ ! -z $ORACLE_SID ]]; then
           . oraenv                                                                >/dev/null
           if [[ -f $ORACLE_HOME/bin/emctl ]]; then
              emctl status agent | grep "Agent is Running and Ready" | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
           fi
        fi
}

collect_fgl()
{
        sleep 10
        ps -ef | grep -i foglight | grep "^.*${oraowner} " | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
}

collect_portutil()
{
        ps -ef | grep "portdaemon.pl" | grep -v grep | grep port | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
}

# OGG Support
##############
collect_ogg()
{
ps -ef | grep -v grep | grep "mgr PARAMFILE" | grep "^.*${oraowner} " | sed -n 's/.*\(....................................................................\/....prm \).*/\1/p' | awk '{ print $NF }' | grep -v "\.\.\.\.mgr.prm" >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log

}

# DBFS Support
###############
collect_dbfs()
{
ps -ef | grep -v grep | grep "dbfs_client" | grep "^.*${oraowner} " | sed -n 's/.*\(................................................................\/bin\/dbfs_client\).*/\1/p' | awk '{ print $NF }' | grep -v "\.\.\.\.dbfs_client" >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
}

started_status()
{
        rm -f $OUTPUT_DIRECTORY/diff_file;         rm -f $OUTPUT_DIRECTORY/diff_1;         rm -f $OUTPUT_DIRECTORY/diff_2
        if [[ -f $OUTPUT_DIRECTORY/pre_stop_$what.log ]]; then
        cat $OUTPUT_DIRECTORY/pre_stop_$what.log | sort > $OUTPUT_DIRECTORY/diff_1;
        fi
        if [[ -f $OUTPUT_DIRECTORY/post_start_$what.log ]]; then
        cat  $OUTPUT_DIRECTORY/post_start_$what.log | sort > $OUTPUT_DIRECTORY/diff_2;
        fi
        if [[ -f $OUTPUT_DIRECTORY/diff_2 ]]; then
        diff -b -i -w $OUTPUT_DIRECTORY/diff_1 $OUTPUT_DIRECTORY/diff_2 > $OUTPUT_DIRECTORY/diff_file
        chown $oracred $OUTPUT_DIRECTORY/diff_file
        chmod 755 $OUTPUT_DIRECTORY/diff_file
        fi
        if [ ! -s $OUTPUT_DIRECTORY/diff_file ]
        then
                echo "yes" > $OUTPUT_DIRECTORY/started_$what.log
                echo "OK : pre-post status matches for $what"
        else
                if [[ $what == "fgl" ]]; then
                   if [[ -f $OUTPUT_DIRECTORY/post_start_$what.log ]]; then
                      if [[ $(cat $OUTPUT_DIRECTORY/post_start_$what.log) -gt 0 ]]; then
                         echo "yes" > $OUTPUT_DIRECTORY/started_$what.log
                         echo "OK : pre-post status matches for $what"
                      else
                         echo "no" > $OUTPUT_DIRECTORY/started_$what.log
                         echo "ATTENTION : $what didn't start. Please check"
                      fi
                   fi
                else
                   echo "no" > $OUTPUT_DIRECTORY/started_$what.log
                   echo "ATTENTION : $what didn't start. Please check"
                fi
        fi
}

service_alignment()
{
        rm -f $OUTPUT_DIRECTORY/diff_file;         rm -f $OUTPUT_DIRECTORY/diff_1;         rm -f $OUTPUT_DIRECTORY/diff_2
        cat  $OUTPUT_DIRECTORY/pre_stop_dbservices.log   | sort > $OUTPUT_DIRECTORY/diff_1;
        cat  $OUTPUT_DIRECTORY/post_start_dbservices.log | sort > $OUTPUT_DIRECTORY/diff_2;
        diff -b -i -w $OUTPUT_DIRECTORY/diff_1 $OUTPUT_DIRECTORY/diff_2 > $OUTPUT_DIRECTORY/diff_file
        chown $oracred $OUTPUT_DIRECTORY/diff_file
        chmod 755 $OUTPUT_DIRECTORY/diff_file

        if [ ! -s $OUTPUT_DIRECTORY/diff_file ]
        then
                echo ""  >> ${LOG}
                echo "***************************** DB SERVICES ************************"     >> ${LOG}
                echo "" >> ${LOG}
                echo "OK : pre-post status matches for DB service alignment" >> ${LOG}
                echo "" >> ${LOG}
                echo ""
                echo "OK : pre-post status matches for DB service alignment"
                echo ""
        else
                echo ""
                #echo "ATTENTION : Please verify DB service alignment"
                #echo "pre-stop status (db:instance:service) is available at $OUTPUT_DIRECTORY/pre_stop_dbservices.log"
                #echo ""
                echo "Attempting to Fix DB service alignment mismatch on this node"
                echo ""
                echo "***************************** DB SERVICES ************************"     >> ${LOG}
                echo "" >> ${LOG}
                echo "Attempting to Fix DB service alignment mismatch on this node" >> ${LOG}
                echo "" >> ${LOG}
                # Try to fix the mis-alignment of services on this node per database (ORACLE_DB)
                cat $OUTPUT_DIRECTORY/diff_file | grep "^<" |awk '{ print $2 }' | cut -d":" -f1 | sort -u | while read ORACLE_DB
                do
                  export ORACLE_DB              >/dev/null
                  export ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep $ORACLE_DB | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s | tail -1`             >/dev/null
                  export ORAENV_ASK=NO                                                    >/dev/null
                  if [[ ! -z $ORACLE_SID ]]; then
                     . oraenv                                                                >/dev/null
                  fi
                  export LOCAL_NODE=`hostname -s`

                  if [[ "$server_type" == rac* ]]; then

                     srvctl status service -d $ORACLE_DB | grep $ORACLE_SID | grep -i "is running" | awk '{ print $2 }' | while read SERV_NAME
                     do
                        echo "srvctl stop service -d $ORACLE_DB -s $SERV_NAME -n $LOCAL_NODE" >> ${LOG}
                        srvctl stop service -d $ORACLE_DB -s $SERV_NAME -n $LOCAL_NODE >> ${LOG}
                     done
                     # Read pre_stop_dbservices.log and start only those services
                     cat $OUTPUT_DIRECTORY/pre_stop_dbservices.log  | grep $ORACLE_DB | while read SERV_LINE
                     do
                         DB_SERV_LIST=`echo $SERV_LINE | cut -d":" -f3 -s`
                         for DB_SERV_NAME in $DB_SERV_LIST
                         do
                           echo "srvctl enable service -d $ORACLE_DB -s $DB_SERV_NAME" >> ${LOG}
                           srvctl enable service -d $ORACLE_DB -s $DB_SERV_NAME  >> ${LOG}

                           #Check if the database config is SINGLE_NODE even though this is a RAC cluster!
                           RAC_SINGLE=`${ORACLE_HOME}/bin/srvctl config database -d $ORACLE_DB | grep "^Type:" | awk '{print $2}' | grep -i "single"`
                           if [[ -z $RAC_SINGLE ]]; then
                              echo "srvctl start service -d $ORACLE_DB -s $DB_SERV_NAME -n $LOCAL_NODE" >> ${LOG}
                              srvctl start service -d $ORACLE_DB -s $DB_SERV_NAME -n $LOCAL_NODE >> ${LOG}
                           else
                              echo "srvctl start service -d $ORACLE_DB -s $DB_SERV_NAME" >> ${LOG}
                              srvctl start service -d $ORACLE_DB -s $DB_SERV_NAME >> ${LOG}
                           fi
                         done
                     done
                  else
                     # Stop Any services for $ORACLE_DB on this node
                     if [ $(srvctl status service -d $ORACLE_DB | grep -i "is running" | awk '{ print $2 }' | wc -l) -ne 0 ]
                     then
                        echo "srvctl stop service -d $ORACLE_DB" >> ${LOG}
                        srvctl stop service -d $ORACLE_DB  >> ${LOG}
                     fi
                     # Read pre_stop_dbservices.log and start only those services
                     cat $OUTPUT_DIRECTORY/pre_stop_dbservices.log  | grep $ORACLE_DB | while read SERV_LINE
                     do
                         DB_SERV_LIST=`echo $SERV_LINE | cut -d":" -f3 -s`
                         for DB_SERV_NAME in $DB_SERV_LIST
                         do
                           echo "srvctl start service -d $ORACLE_DB -s $DB_SERV_NAME" >> ${LOG}
                           srvctl start service -d $ORACLE_DB -s $DB_SERV_NAME >> ${LOG}
                         done
                     done

                  fi

                  echo "" >> ${LOG}
                done

                # Do another round of service checks and report accordingly
                collect_dbservices
                service_alignment_basic
        fi
}

service_alignment_basic()
{
        rm -f $OUTPUT_DIRECTORY/diff_file;         rm -f $OUTPUT_DIRECTORY/diff_1;         rm -f $OUTPUT_DIRECTORY/diff_2
        cat  $OUTPUT_DIRECTORY/pre_stop_dbservices.log   | sort > $OUTPUT_DIRECTORY/diff_1;
        cat  $OUTPUT_DIRECTORY/post_start_dbservices.log | sort > $OUTPUT_DIRECTORY/diff_2;
        diff -b -i -w $OUTPUT_DIRECTORY/diff_1 $OUTPUT_DIRECTORY/diff_2 > $OUTPUT_DIRECTORY/diff_file
        chown $oracred $OUTPUT_DIRECTORY/diff_file
        chmod 755 $OUTPUT_DIRECTORY/diff_file

        if [ ! -s $OUTPUT_DIRECTORY/diff_file ]
        then
                echo ""
                echo "OK : pre-post status matches for DB service alignment"
                echo ""
                echo "" >> ${LOG}
                echo "OK : pre-post status matches for DB service alignment" >> ${LOG}
                echo "" >> ${LOG}
        else
                echo ""
                echo "ATTENTION : Please verify DB service alignment"
                echo "pre-stop status (db:instance:service) is available at $OUTPUT_DIRECTORY/pre_stop_dbservices.log"
                echo ""
                echo "" >> ${LOG}
                echo "DB_SERVICE_MISMATCH: Please verify DB service alignment" >> ${LOG}
                echo "pre-stop status (db:instance:service) is available at $OUTPUT_DIRECTORY/pre_stop_dbservices.log" >> ${LOG}
                echo "" >> ${LOG}
        fi
}

display_pre_post()
{
     if [ $why = stop ]
     then
          if [ $when = pre ]
          then
               if [ $what = fgl ] || [ $what = agent ] || [ $what = mrp ] || [ $what = dbfs ] || [ $what = ogg ]
               then
                    if [ "$(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log)" = 0 ] || [ ! -s $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
                    then
                         echo "PRE stop" $what "running " ":" "NO"  | tee -a ${LOG}
                    else
                         echo "PRE stop" $what "running " ":" "YES"  | tee -a ${LOG}
                    fi
               elif [ $what = asm ] || [ $what = dbinst ] || [ $what = lsnr ]
               then
                    if [ "$(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log)" = 0 ] || [ ! -s $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
                    then
                         echo "PRE stop" $what "running " ":" "NO"  | tee -a ${LOG}
                    else
                         echo "PRE stop" $what "running " ":" $(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log) | tee -a ${LOG}
                    fi
               fi
          fi
     elif [ $why = start ]
     then
          if [ $what = fgl ] || [ $what = agent ] || [ $what = mrp ] || [ $what = dbfs ] || [ $what = ogg ]
          then
               if [[ -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]]; then
               if [ "$(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log)" = 0 ] || [ ! -s $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
               then
                    echo "POST start" $what "running " ":" "NO" | tee -a ${LOG}
                    echo ""                    | tee -a ${LOG}
               else
                    echo "POST start" $what "running " ":" "YES"        | tee -a ${LOG}
                    echo ""                    | tee -a ${LOG}
               fi
               fi
          elif [ $what = asm ] || [ $what = dbinst ] || [ $what = lsnr ]
          then
               if [ "$(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log)" = 0 ] || [ ! -s $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
               then
                    echo "POST start" $what "running " ":" "NO" | tee -a ${LOG}
                    echo ""                    | tee -a ${LOG}
               else
                    echo "POST start" $what "running " ":" $(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log) | tee -a ${LOG}
                    echo ""                    | tee -a ${LOG}
               fi
          fi
     fi
}

# Code for starting the services

start_asm()
{
echo "***************************** ASM ************************"     >> ${LOG}; echo "" >> ${LOG}

if [[ -f $OUTPUT_DIRECTORY/pre_stop_asm.log ]]; then
while read data
do
        export ORACLE_SID=$data                                               >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Checking for instance ${ORACLE_SID} "
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep $ORACLE_SID | wc -l) -eq 0 ]
                then
                        echo "Starting instance ${ORACLE_SID} "
                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysasm' << EOF
                        startup;
                        set echo off;
                        set linesize 200 pages 100;
                        select instance_name,host_name,startup_time from gv\\$instance;
EOF`
        echo "$op"                                      >> ${LOG}; echo "" >> ${LOG}
                else
                        echo "ASM Instance ${ORACLE_SID} is already running "
                        echo "ASM Instance: $ORACLE_SID is already running .. moving on to databases ... " >> ${LOG}; echo "" >> ${LOG}
                fi
        echo "_____________________________________________________________________"   >> ${LOG};echo "" >> ${LOG}
done < $OUTPUT_DIRECTORY/pre_stop_asm.log
fi
}

start_asm_10g()
{
echo "***************************** ASM ************************"     >> ${LOG}; echo "" >> ${LOG}

while read data
do
        export ORACLE_SID=$data                                               >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Starting instance ${ORACLE_SID} "
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep $ORACLE_SID | wc -l) -eq 0 ]
                then
                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF
                        startup;
                        set echo off;
                        set linesize 200 pages 100;
                        select instance_name,host_name,startup_time from gv\\$instance;
EOF`
        echo "$op"                                      >> ${LOG}; echo "" >> ${LOG}
                fi
        echo "_____________________________________________________________________"   >> ${LOG};echo "" >> ${LOG}
done < $OUTPUT_DIRECTORY/pre_stop_asm.log
}

start_db_rac()
{
echo "************************** DATABASE & SERVICES *********************"     >> ${LOG}; echo "" >> ${LOG}

# Start instance in OPEN mode

while read data
do
        export ORACLE_DB=$(echo $data | awk 'BEGIN{FS=":"}{print $1}')       >/dev/null
        export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
        export RACONE_DB=$(echo $data | awk 'BEGIN{FS=":"}{print $3}')       >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Starting instance ${ORACLE_SID} "
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep "pmon_${ORACLE_SID}\$" | wc -l) -eq 0 ]
                then
                        if [ $ORACLE_DB = $ORACLE_SID ]
                        then
                                srvctl start database -d $ORACLE_DB                         >> ${LOG};echo "" >> ${LOG}
                        elif [[ ! -z $RACONE_DB ]]
                        then
                                srvctl start database -d $ORACLE_DB  -n $RACONE_DB          >> ${LOG};echo "" >> ${LOG}
                        else
                                srvctl start instance -d $ORACLE_DB -i $ORACLE_SID          >> ${LOG};echo "" >> ${LOG}
                        fi

                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF
                        set linesize 200 pages 100;
                        set echo off;
                        select instance_name,host_name,startup_time from gv\\$instance;
                        select name,open_mode,database_role from gv\\$database;
EOF`
        echo "$op"                                              >> ${LOG}; echo "" >> ${LOG}
                fi
        srvctl status service -d $ORACLE_DB                       >> ${LOG}
        echo "___________________________________________________________">> ${LOG};
done < $OUTPUT_DIRECTORY/pre_stop_dbopen.log

# Start instance in READ ONLY mode (should be defined as such in srvctl config)

while read data
do
        export ORACLE_DB=$(echo $data | awk 'BEGIN{FS=":"}{print $1}')       >/dev/null
        export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Starting instance ${ORACLE_SID} "
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep "pmon_${ORACLE_SID}\$" | wc -l) -eq 0 ]
                then
                        if [ $ORACLE_DB = $ORACLE_SID ]
                        then
                                srvctl start database -d $ORACLE_DB                          >> ${LOG};echo "" >> ${LOG}
                        elif [[ ! -z $RACONE_DB ]]
                        then
                                srvctl start database -d $ORACLE_DB  -n $RACONE_DB          >> ${LOG};echo "" >> ${LOG}
                        else
                                srvctl start instance -d $ORACLE_DB -i $ORACLE_SID          >> ${LOG};echo "" >> ${LOG}
                        fi

                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF
                        set linesize 200 pages 100;
                        set echo off;
                        select instance_name,host_name,startup_time from gv\\$instance;
                        select name,open_mode,database_role from gv\\$database;
EOF`
        echo "$op"                                              >> ${LOG}; echo "" >> ${LOG}
                fi
        srvctl status service -d $ORACLE_DB                       >> ${LOG}
        echo "___________________________________________________________">> ${LOG};
done < $OUTPUT_DIRECTORY/pre_stop_dbopenronly.log


# Start instance in MOUNT mode

while read data
do
        export ORACLE_DB=$(echo $data | awk 'BEGIN{FS=":"}{print $1}')       >/dev/null
        export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Mounting instance ${ORACLE_SID} "
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep "pmon_${ORACLE_SID}\$" | wc -l) -eq 0 ]
                then
                        if [ $ORACLE_DB = $ORACLE_SID ]
                        then
                                srvctl start database -d $ORACLE_DB -o mount                     >> ${LOG};echo "" >> ${LOG}
                        elif [[ ! -z $RACONE_DB ]]
                        then
                                srvctl start database -d $ORACLE_DB  -n $RACONE_DB  -o mount        >> ${LOG};echo "" >> ${LOG}
                        else
                                srvctl start instance -d $ORACLE_DB -i $ORACLE_SID -o mount        >> ${LOG};echo "" >> ${LOG}
                        fi
                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF
                        set linesize 200 pages 100;
                        set echo off;
                        select instance_name,host_name,startup_time from gv\\$instance;
                        select name,open_mode,database_role from gv\\$database;
EOF`
        echo "$op"                                              >> ${LOG}; echo "" >> ${LOG}
                fi
        echo "___________________________________________________________">> ${LOG};
done < $OUTPUT_DIRECTORY/pre_stop_dbmount.log
}

start_db_standalone()
{
echo "************************** DATABASE & SERVICES *********************"     >> ${LOG}; echo "" >> ${LOG}

# Start instance in OPEN mode

while read data
do
        export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Starting instance ${ORACLE_SID} "
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep "pmon_${ORACLE_SID}\$" | wc -l) -eq 0 ]
                then
                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF
                        startup;
                        set linesize 200 pages 100;
                        set echo off;
                        select instance_name,host_name,startup_time from v\\$instance;
                        select name,open_mode,database_role from v\\$database;
EOF`
        echo "$op"                                              >> ${LOG}; echo "" >> ${LOG}
                fi
        echo "___________________________________________________________">> ${LOG};
done < $OUTPUT_DIRECTORY/pre_stop_dbopen.log


# Start instance in READ ONLY mode

while read data
do
        export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Starting instance ${ORACLE_SID} "
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep "pmon_${ORACLE_SID}\$" | wc -l) -eq 0 ]
                then
                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF
                        startup mount;
                        alter database open read only;
                        set linesize 200 pages 100;
                        set echo off;
                        select instance_name,host_name,startup_time from v\\$instance;
                        select name,open_mode,database_role from v\\$database;
EOF`
        echo "$op"                                              >> ${LOG}; echo "" >> ${LOG}
                fi
        echo "___________________________________________________________">> ${LOG};
done < $OUTPUT_DIRECTORY/pre_stop_dbopenronly.log

# Start instance in MOUNT mode

while read data
do
        export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Mounting instance ${ORACLE_SID} "
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep "pmon_${ORACLE_SID}\$" | wc -l) -eq 0 ]
                then
                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF
                        startup mount;
                        set linesize 200 pages 100;
                        set echo off;
                        select instance_name,host_name,startup_time from v\\$instance;
                        select name,open_mode,database_role from v\\$database;
EOF`
        echo "$op"                                              >> ${LOG}; echo "" >> ${LOG}
                fi
        echo "___________________________________________________________">> ${LOG};
done < $OUTPUT_DIRECTORY/pre_stop_dbmount.log
}

start_mrp()
{
echo "******************************* MRP **************************"     >> ${LOG}; echo "" >> ${LOG}

        echo "Starting $what"

while read data
do
        export ORACLE_SID=$data                                               >/dev/null
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
                echo "Starting MRP on ${ORACLE_SID}"
                if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep "pmon_${ORACLE_SID}\$" | wc -l) -ne 0 ]
                then
                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF
                        set echo off;
                        set linesize 200 pages 100;
                        select name,open_mode,database_role from v\\$database;
                        ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
EOF`
        echo "$op"                                              >> ${LOG}; echo "" >> ${LOG}
                fi
        echo "_____________________________________________________________________"   >> ${LOG};echo "" >> ${LOG}
done < $OUTPUT_DIRECTORY/pre_stop_mrp.log
}

start_lsnr()
{
echo "***************************** LISTENER ************************"     >> ${LOG}; echo "" >> ${LOG}

        if [[ $server_type = "rac_12c" ]] || [[ $server_type = "norac_asm12c" ]] || [[ $server_type = "rac_11g" ]] || [[ $server_type = "norac_asm11g" ]] || [[ $server_type = "rac_10g" ]] || [[ $server_type = "norac_asm10g" ]]
        then
                ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}' | head -1`
        else
                ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s | head -1`
        fi
                export ORAENV_ASK=NO                                                    >/dev/null
                . oraenv                                                                >/dev/null
                while read lsnr
                do
                        echo "Starting listener ${lsnr}"
                        #if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep $lsnr | wc -l) -eq 0 ]
                        if [ $(ps -ef | grep lsnr |grep -v grep | grep "^.*${oraowner} " | grep "tnslsnr $lsnr " | wc -l) -eq 0 ]
                        then
                            if [[ -f $OUTPUT_DIRECTORY/pre_config_lsnr.log ]]; then
                               LSNR_HOME=`cat $OUTPUT_DIRECTORY/pre_config_lsnr.log | grep "${lsnr}:" | cut -d":" -f2 -s |tail -1`
                               if [[ $ORACLE_HOME != $LSNR_HOME ]]; then
                                  if [[ -f /etc/oratab ]]; then
                                     ORACLE_SID=`grep "$LSNR_HOME" /etc/oratab | grep -v "^#" | cut -d":" -f1 -s |tail -1`
                                     export ORAENV_ASK=NO                                                    >/dev/null
                                     if [[ ! -z $ORACLE_SID ]]; then
                                        . oraenv                                                                >/dev/null
                                     fi
                                  fi
                               fi
                            fi

                                echo "Starting listener ${lsnr}" >> ${LOG}
                                echo "" >> ${LOG}
                                lsnrctl start $lsnr                                             >> ${LOG};echo "" >> ${LOG}
                        else
                           echo "" >> ${LOG}
                           echo "Listener: ${lsnr} already in Running state " >> ${LOG}
                           echo "" >> ${LOG}
                        fi
                done < $OUTPUT_DIRECTORY/pre_stop_lsnr.log

        sleep 5
}

start_agent()
{
echo "***************************** EMAGENT ************************"     >> ${LOG}; echo "" >> ${LOG}

if [[ -f $OUTPUT_DIRECTORY/pre_stop_agent.log ]]; then
        echo "Starting $what"
        if [ "$(cat $OUTPUT_DIRECTORY/pre_stop_agent.log)" -eq 0 ]
        then
                echo "EMAgent was down even before the activity, so didn't bring it up"        >> ${LOG}; echo "" >> ${LOG}
        else
                ORACLE_SID=`cat /etc/oratab | awk 'BEGIN{FS=":"}{print $1}' | grep OEM | grep -v "^#"`
                export ORAENV_ASK=NO                                                    >/dev/null;
              if [[ ! -z $ORACLE_SID ]]; then
                . oraenv                                                                >/dev/null
                   if [[ -f $ORACLE_HOME/bin/emctl ]]; then
                        emctl start agent                                                        >/dev/null;
                        sleep 15
                   fi
              fi
        fi
else
   echo "Note: pre_stop file Found: $OUTPUT_DIRECTORY/pre_stop_agent.log -> Skipping EMAGENT startup" >> ${LOG}
fi
}

start_fgl()
{
echo "**************************** FOGLIGHT ****************************"       >> ${LOG}; echo "" >> ${LOG}

        echo "Starting $what"
        if [ "$(cat $OUTPUT_DIRECTORY/pre_stop_fgl.log)" -eq 0 ]
        then
                echo "Foglight was down even before the activity, so didn't bring it up"        >> ${LOG}; echo "" >> ${LOG}
        elif [ "$(ps -ef | grep -i foglight | grep "^.*${oraowner} " | grep -v grep | wc -l)" -ne 0 ]
        then
                echo "Foglight is already running"                                               >> ${LOG}; echo "" >> ${LOG}
        else
                if [[ -f /oracle/dba/foglight/fgl_5/bin/fglam ]]; then
                   /oracle/dba/foglight/fgl_5/bin/fglam -d                                  >/dev/null;
                   sleep 30
                else
                   if [[ -f $OUTPUT_DIRECTORY/non_standard_fgl_start.cmd ]]; then
                      chmod 755 $OUTPUT_DIRECTORY/non_standard_fgl_start.cmd
                      $OUTPUT_DIRECTORY/non_standard_fgl_start.cmd  >/dev/null;
                      sleep 30
                   fi
                fi
        fi
}

# OGG Support
##############
start_ogg()
{
echo "***************************** GOLDENGATE ************************"     >> ${LOG}; echo "" >> ${LOG}

        echo "Starting $what"
        if [ "$(cat $OUTPUT_DIRECTORY/pre_stop_ogg.log)" = 0 ]
        then
                echo "OGG was down even before the activity, so didn't bring it up"        >> ${LOG}; echo "" >> ${LOG}
        else
               # Set Ora env
                ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep -v grep | grep "+ASM" | grep "^.*${oraowner} " | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'`
                export ORAENV_ASK=NO                                                    >/dev/null;
                if [[ ! -z $ORACLE_SID ]]; then
                        . oraenv                                                                >/dev/null
                else
                   ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep "^.*${oraowner} " | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s| tail -1`
                   if [[ ! -z $ORACLE_SID ]]; then
                        . oraenv                                                                >/dev/null
                   fi
                fi

                if [[ -f ${OUTPUT_DIRECTORY}/gg_config.txt ]]; then

                # Read gg start config on this host and act accordingly ..
                cat ${OUTPUT_DIRECTORY}/gg_config.txt | sort -u | while read gg_config
                do

                CRS_RES_GG=`echo $gg_config | grep "GGCRS@" | cut -d ":" -f1 -s | cut -d"@" -f2 -s`
                GG_HOME=`echo $gg_config | cut -d ":" -f2 -s`
                LOCAL_NODE=`echo $gg_config | cut -d ":" -f3 -s`
                if [[ ! -z $CRS_RES_GG ]]; then

                   if [[ -f ${ORACLE_HOME}/bin/crsctl ]]; then

                   CRS_STATE=`${ORACLE_HOME}/bin/crsctl stat res $CRS_RES_GG | grep "STATE=" | awk '{ print $1 }' | cut -d"=" -f2 -s`
                   if [[ "$CRS_STATE" != "ONLINE" ]]; then
                      echo "Starting Golden Gate via CRS Resource: $CRS_RES_GG" >> ${LOG}
                      if [[ "$server_type" == rac* ]]; then
                         echo "${ORACLE_HOME}/bin/crsctl start res $CRS_RES_GG -n $LOCAL_NODE -f" >> ${LOG}
                         ${ORACLE_HOME}/bin/crsctl start res $CRS_RES_GG -n $LOCAL_NODE -f >> ${LOG}
                         sleep 30
                      else
                         echo "${ORACLE_HOME}/bin/crsctl start res $CRS_RES_GG" >> ${LOG}
                         ${ORACLE_HOME}/bin/crsctl start res $CRS_RES_GG >> ${LOG}
                         sleep 30
                      fi
                   fi

                   fi
                   # display GG mgr output
#${GG_HOME}/ggsci << EOF >> ${LOG}
#info all
#exit
#EOF
                else

                if [[ -f ${OUTPUT_DIRECTORY}/pre_gg_inst.log ]]; then
                   ORACLE_GG_SID=`cat ${OUTPUT_DIRECTORY}/pre_gg_inst.log | grep "PRE_OGG_DBINST:" | cut -d":" -f3 -s | tail -1`
                   echo "Found a value for ORACLE_SID where GG was last running .. So will use: $ORACLE_GG_SID " >> ${LOG}
                fi

                if [[ ! -z $ORACLE_GG_SID ]]; then
                   ORACLE_SID=$ORACLE_GG_SID
                   . oraenv
                else
                  ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s | tail -1`
                  if [[ ! -z $ORACLE_SID ]]; then
                     echo "Did Not Find ORACLE_SID where GG was last running .. So will use a Random value: $ORACLE_SID" >> ${LOG}
                     . oraenv
                  fi
                fi

echo "Starting Golden Gate (Non CRS Control) from GG_HOME=${GG_HOME}" >> ${LOG}
${GG_HOME}/ggsci << EOF >> ${LOG}
start mgr
shell sleep 10
exit
EOF
sleep 60
                fi
                done
                fi

        fi

##################################
# Post start OGG status in $LOG
##################################
echo "Collecting Post START GOLDENGATE information ..... "; echo ""
        if [ "$(ps -ef | grep -v grep | grep "mgr PARAMFILE" | grep "^.*${oraowner} " | wc -l)" -eq 0 ]
        then
                echo "GoldenGate is not running on this host under osuser: ${oraowner}"                                >> ${LOG};echo "" >> ${LOG}
        else
                echo "" >> ${LOG}
                echo "******************** POST START GOLDENGATE STATUS **************************"       >> ${LOG}; echo "" >> ${LOG}
                echo "GoldenGate is running on this host under osuser: ${oraowner}"                                >> ${LOG}
                ps -ef | grep -v grep | grep "^.*${oraowner} " | grep "mgr PARAMFILE"                 >> ${LOG};echo "" >> ${LOG}

                # Set Ora env
                ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'`
                export ORAENV_ASK=NO                                                    >/dev/null;
                if [[ ! -z $ORACLE_SID ]]; then
                    . oraenv                                                                >/dev/null
                else
                   ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s | tail -1`
                   . oraenv                                                                >/dev/null
                fi

#ps -ef | grep -v grep | grep "mgr PARAMFILE" | grep "^.*${oraowner} " | sed -n 's/.*\(....................................................................mgr.prm \).*/\1/p' | awk '{ print $NF }' | sort | while read GG_MGRPROC
ps -ef | grep -v grep | grep "mgr PARAMFILE" | grep "^.*${oraowner} " | sed -n 's/.*\(...................................................................\/....prm \).*/\1/p' | awk '{ print $NF }' | sort | while read GG_MGRPROC
        do
        # Proceed only if Golden Gate Manager is running
        if [[ ! -z $GG_MGRPROC ]]; then
           #GG_HOME=`echo $GG_MGRPROC | sed 's/\/dirprm\/mgr.prm//g'`
           GG_HOME=`echo $GG_MGRPROC | sed 's/\/dirprm\/mgr.prm//g' | sed 's/\/dirprm\/MGR.prm//g'`

sleep 60
if [[ -d $GG_HOME ]]; then
${GG_HOME}/ggsci << EOF >> ${LOG}
info all
exit
EOF
           #echo "$op"                                                      >> ${LOG};echo "" >> ${LOG}
fi
        fi
        done
        fi
}

# DBFS Support
##############
start_dbfs()
{
echo "***************************** DBFS ************************"     >> ${LOG}; echo "" >> ${LOG}

        echo "Starting $what"
        if [ "$(cat $OUTPUT_DIRECTORY/pre_stop_dbfs.log)" = 0 ]
        then
                echo "DBFS was down even before the activity, so didn't bring it up"        >> ${LOG}; echo "" >> ${LOG}
        else
               # Set Ora env
                ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep -v grep | grep "+ASM" | grep "^.*${oraowner} " | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'`
                export ORAENV_ASK=NO                                                    >/dev/null;
                if [[ ! -z $ORACLE_SID ]]; then
                        . oraenv                                                                >/dev/null
                else
                   ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep "^.*${oraowner} " | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s | tail -1`
                   if [[ ! -z $ORACLE_SID ]]; then
                        . oraenv                                                                >/dev/null
                   fi
                fi

                # Read gg start config on this host and act accordingly ..
                if [[ -f ${OUTPUT_DIRECTORY}/dbfs_config.txt ]]; then

                cat ${OUTPUT_DIRECTORY}/dbfs_config.txt | sort -u | while read dbfs_config
                do

                CRS_RES_DBFS=`echo $dbfs_config | grep "DBFSCRS@" | cut -d ":" -f1 -s | cut -d"@" -f2 -s`
                DBFS_HOME=`echo $dbfs_config | cut -d ":" -f2 -s`
                LOCAL_NODE=`echo $dbfs_config | cut -d ":" -f3 -s`
                if [[ ! -z $CRS_RES_DBFS ]]; then

                   if [[ -f ${ORACLE_HOME}/bin/crsctl ]]; then

                   CRS_STATE=`${ORACLE_HOME}/bin/crsctl stat res $CRS_RES_DBFS | grep "STATE=" | awk '{ print $1 }' | cut -d"=" -f2 -s`
                   if [[ "$CRS_STATE" != "ONLINE" ]]; then
                      if [[ "$server_type" == rac* ]]; then
                         echo "${ORACLE_HOME}/bin/crsctl start res $CRS_RES_DBFS -n $LOCAL_NODE" >> ${LOG}
                         ${ORACLE_HOME}/bin/crsctl start res $CRS_RES_DBFS -n $LOCAL_NODE >> ${LOG}
                         sleep 60
                      else
                         echo "${ORACLE_HOME}/bin/crsctl start res $CRS_RES_DBFS" >> ${LOG}
                         ${ORACLE_HOME}/bin/crsctl start res $CRS_RES_DBFS  >> ${LOG}
                         sleep 60
                      fi
                   else
                      echo "DBFS CRS Resource: $CRS_RES_DBFS is already ONLINE state ..."  >> ${LOG}; echo "" >> ${LOG}
                   fi

                   fi

                else
                    echo ""                              >> ${LOG}; echo "" >> ${LOG}
                    echo " INFO: For DBA .. DBFS process was detected on this host - As per config file: ${OUTPUT_DIRECTORY}/dbfs_config.txt "   >> ${LOG}; echo "" >> ${LOG}
                    echo " But does not appear to be setup as a CRS Cluster Resource  OR  has failed to be stopped via CRS Cluster Resource " >> ${LOG}
                    echo " ... Please start manually if required ..."   >> ${LOG}; echo "" >> ${LOG}
                    echo ""                      >> ${LOG}; echo "" >> ${LOG}
                fi
                #sleep 60
                done
                fi
        fi
}


#INSERT INTO REPOSITORY DATABASE
#ASSIGNING THE OUTPUT VARIABLES

assign_log()
{
if [ -s $OUTPUT_DIRECTORY/post_start_crs.log ]
then
        crs_output=`cat $OUTPUT_DIRECTORY/post_start_crs.log`
else
        crs_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_asm.log ]
then
        asm_output=`cat $OUTPUT_DIRECTORY/post_start_asm.log`
else
        asm_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_esm.log ]
then
        esm_agent_output=`cat $OUTPUT_DIRECTORY/post_start_esm.log`
else
        esm_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dma.log ]
then
        dma_agent_output=`cat $OUTPUT_DIRECTORY/post_start_dma.log`
else
        dma_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_lsnr.log ]
then
        listener_output=`cat $OUTPUT_DIRECTORY/post_start_lsnr.log`
else
        listener_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbinst.log ]
then
        db_instance_output=`cat $OUTPUT_DIRECTORY/post_start_dbinst.log`
else
        db_instance_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbopen.log ]
then
        db_open_output=`cat $OUTPUT_DIRECTORY/post_start_dbopen.log`
else
        db_open_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbopenro.log ]
then
        db_openro_output=`cat $OUTPUT_DIRECTORY/post_start_dbopenro.log`
else
        db_openro_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbmount.log ]
then
        db_mount_output=`cat $OUTPUT_DIRECTORY/post_start_dbmount.log`
else
        db_mount_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbservices.log ]
then
        service_alignment_output=`cat $OUTPUT_DIRECTORY/post_start_dbservices.log`
else
        service_alignment_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_mrp.log ]
then
        mrp_output=`cat $OUTPUT_DIRECTORY/post_start_mrp.log`
else
        mrp_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_agent.log ]
then
        oem_agent_output=`cat $OUTPUT_DIRECTORY/post_start_agent.log`
else
        oem_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_portutil.log ]
then
        port_utility_output=`cat $OUTPUT_DIRECTORY/post_start_portutil.log`
else
        port_utility_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_fgl.log ]
then
        foglight_output=`cat $OUTPUT_DIRECTORY/post_start_fgl.log`
else
        foglight_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_osw.log ]
then
        os_watcher_output=`cat $OUTPUT_DIRECTORY/post_start_osw.log`
else
        os_watcher_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_usb.log ]
then
        usb_output=`cat $OUTPUT_DIRECTORY/post_start_usb.log`
else
        usb_output="no_status"
fi

if [ -s /oracle/dba/foglight/fgl_5/bin/fglam ]
then
        fglam_output=`/oracle/dba/foglight/fgl_5/bin/fglam --check-connection`
else
        fglam_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/server_type.log ]
then
                instance_type=`cat $OUTPUT_DIRECTORY/server_type.log`
else
                instance_type="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/version_executed_status.log ]
then
                script_version=`cat $OUTPUT_DIRECTORY/version_executed_status.log`
else
                script_version="no_status"
fi

}

insert_repdb()
{
        for what in fgl osw agent portutil lsnr mrp dbinst asm
                do
                        if [ -f $OUTPUT_DIRECTORY/stopped_$what.log ]
                        then
                                if [ "$(cat $OUTPUT_DIRECTORY/stopped_$what.log)" = yes ]
                                then
                                        eval var_$what="success"
                                fi
                                if [ "$(cat $OUTPUT_DIRECTORY/stopped_$what.log)" = no ]
                                then
                                        eval var_$what="failure"
                                fi
                        else
                                        eval var_$what="no_status"
                        fi
                done

                var_dma="na"
                var_esm="na"
                var_crs="na"

        if [[ $server_type = "rac_11g" ]] || [[ $server_type = "norac_asm11g" ]]
        then
                var_lsnr="na"
                var_asm="na"
        elif [[ $server_type = "norac_noasm" ]]
        then
                var_asm="na"
        fi



#PREPARING THE INSERT STATEMENT

if [ $(cat /etc/oratab | grep oracle | grep -v -i asm | grep -v -i crs | grep -v -i oem | grep -v "#" | awk 'BEGIN{FS=":"}{print $1}' | head -1 | wc -l) = 1 ]
then
export ORACLE_SID=`cat /etc/oratab | grep oracle | grep -v -i asm | grep -v -i crs | grep -v -i oem | grep -v "#" | awk 'BEGIN{FS=":"}{print $1}' | head -1`
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
        $ORACLE_HOME/bin/sqlplus -s OSH_SEH/dbaas_operations1@SUNDVD94 << EOFSTATUS
                set echo off;
                set head off;
                set feedback off;
insert into OSH_SEH.dbss_log (DBSS_ID,
SCRIPT_VERSION,
INSTANCE_TYPE,
STOP_OR_START,
CRS_OR_DB,
SERVER_NAME,
SERVER_TIMESTAMP,
CRS,
ASM,
LISTENER,
DB_INSTANCE,
MRP_PROCESS,
ESM_AGENT,
DMA_AGENT,
OEM_AGENT,
PORT_UTILITY,
FOGLIGHT,
OS_WATCHER,
SENT_MAIL,
CRS_OUTPUT,
ASM_OUTPUT,
LISTENER_OUTPUT,
DB_INSTANCE_OUTPUT,
DB_OPEN_OUTPUT,
DB_OPENRO_OUTPUT,
DB_MOUNT_OUTPUT,
SERVICE_ALIGNMENT_OUTPUT,
MRP_OUTPUT,
ESM_AGENT_OUTPUT,
DMA_AGENT_OUTPUT,
OEM_AGENT_OUTPUT,
PORT_UTILITY_OUTPUT,
FOGLIGHT_OUTPUT,
OS_WATCHER_OUTPUT,
USB_OUTPUT,
FGLAM_OUTPUT)
values (DBSS_LOG_SEQ.nextval,
'$script_version',
'$instance_type',
'start',
'db',
'$(hostname -f)',
'$timevalue',
'$var_crs',
'$var_asm',
'$var_lsnr',
'$var_dbinst',
'$var_mrp',
'$var_esm',
'$var_dma',
'$var_agent',
'$var_portutil',
'$var_fgl',
'$var_osw',
0,
'$crs_output',
'$asm_output',
'$listener_output',
'$db_instance_output',
'$db_open_output',
'$db_openro_output',
'$db_mount_output',
'$service_alignment_output',
'$mrp_output',
'$esm_agent_output',
'$dma_agent_output',
'$oem_agent_output',
'$port_utility_output',
'$foglight_output',
'$os_watcher_output',
'$usb_output',
'$fglam_output');
commit;
EOFSTATUS
fi
}



# Start the appropriate services based on server type


echo "************************* START TIME : $(date) ************************"  >> ${LOG}; echo "" >> ${LOG}

case $server_type in
        "rac_12c")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 12c CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo "" >> ${LOG}

                        when=pre; why=stop; what=dbinst; display_pre_post
                        start_db_rac;
                        when=post; why=start; what=dbinst; sleep 10; collect_$what;  display_pre_post
                        collect_dbservices
                        service_alignment

                for what in mrp agent fgl dbfs ogg
                do
                        when=pre; why=stop; display_pre_post
                        start_$what
                        when=post; why=start; sleep 15; collect_$what; display_pre_post
                done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                for what in dbinst mrp agent fgl dbfs ogg
                do
                        started_status
                done
                        assign_log
                        insert_repdb
                echo "**************************************************"
                ;;
        "rac_11g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 11g CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo "" >> ${LOG}

                        when=pre; why=stop; what=dbinst; display_pre_post
                        start_db_rac;
                        when=post; why=start; what=dbinst; sleep 10; collect_$what;  display_pre_post
                        collect_dbservices
                        service_alignment

                for what in mrp agent fgl dbfs ogg
                do
                        when=pre; why=stop; display_pre_post
                        start_$what
                        when=post; why=start; sleep 15; collect_$what; display_pre_post
                done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                for what in dbinst mrp agent fgl dbfs ogg
                do
                        started_status
                done
                        assign_log
                        insert_repdb

                echo "**************************************************"
                ;;
        "rac_10g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 10g CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo "" >> ${LOG}
                        when=pre; why=stop; what=dbinst; display_pre_post
                        start_asm_10g;
                        when=post; why=start; what=dbinst; sleep 10; collect_$what;  display_pre_post
                        collect_dbservices
                        service_alignment

                        when=pre; why=stop; what=dbinst; display_pre_post
                        start_db_rac;
                        when=post; why=start; what=dbinst; sleep 10; collect_$what;  display_pre_post

                for what in mrp lsnr agent fgl ogg
                do
                        when=pre; why=stop; display_pre_post
                        start_$what
                        when=post; why=start; sleep 10; collect_$what; display_pre_post
                done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                for what in asm dbinst lsnr mrp agent fgl ogg
                do
                        started_status
                done
                        assign_log
                        insert_repdb
                echo "**************************************************"
               ;;
        "norac_asm12c")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 12c <----------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo "" >> ${LOG}

                        #Check for ASM and start if needed
                        when=pre; why=stop; what=asm; display_pre_post
                        start_asm;
                        when=post; why=start; what=asm; sleep 10; collect_$what;  display_pre_post

                        when=pre; why=stop; what=dbinst; display_pre_post
                        start_db_standalone
                        when=post; why=start; what=dbinst; sleep 10; collect_$what;  display_pre_post
                        collect_dbservices
                        service_alignment

                for what in lsnr mrp agent fgl dbfs ogg
                do
                        when=pre; why=stop; display_pre_post
                        start_$what;
                        when=post; why=start; sleep 15; collect_$what; display_pre_post
                done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                for what in asm dbinst mrp agent lsnr fgl dbfs ogg
                do
                        started_status
                done
                        assign_log
                        insert_repdb
                echo "**************************************************"

                ;;
        "norac_asm11g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 11g <----------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo "" >> ${LOG}

                        #Check for ASM and start if needed
                        when=pre; why=stop; what=asm; display_pre_post
                        start_asm;
                        when=post; why=start; what=asm; sleep 10; collect_$what;  display_pre_post

                        when=pre; why=stop; what=dbinst; display_pre_post
                        start_db_standalone
                        when=post; why=start; what=dbinst; sleep 10; collect_$what;  display_pre_post
                        collect_dbservices
                        service_alignment

                for what in lsnr mrp agent fgl dbfs ogg
                do
                        when=pre; why=stop; display_pre_post
                        start_$what;
                        when=post; why=start; sleep 15; collect_$what; display_pre_post
                done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                for what in asm dbinst mrp agent fgl lsnr dbfs ogg
                do
                        started_status
                done
                        assign_log
                        insert_repdb
                echo "**************************************************"

                ;;
        "norac_asm10g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 10g <----------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo "" >> ${LOG}

               when=post; why=start;

                        start_asm_10g; what=dbinst; collect_$what
                        start_db_standalone; what=dbinst; collect_$what

                for what in mrp lsnr agent fgl ogg
                        do
                        start_$what; collect_$what
                        done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                for what in fgl agent lsnr dbinst mrp asm ogg
                        do
                        started_status
                        done
                assign_log
                insert_repdb
                echo "**************************************************"

                ;;
        "norac_noasm")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "--------------------------> THIS IS A NON-RAC & NON-ASM SYSTEM <----------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo "" >> ${LOG}

                when=pre; why=stop; what=dbinst; display_pre_post
                        start_db_standalone;
                when=post; why=start; what=dbinst; sleep 10; collect_$what;  display_pre_post

                for what in mrp lsnr agent fgl ogg
                        do
                                when=pre; why=stop; display_pre_post
                                start_$what;
                                when=post; why=start; sleep 10; collect_$what; display_pre_post
                        done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                for what in dbinst mrp lsnr agent fgl ogg
                        do
                        started_status
                        done
                assign_log
                insert_repdb
                echo "**************************************************"

                ;;
        *)
                echo "Invalid Selection : $server_type "
esac


chmod 755 $OUTPUT_DIRECTORY/pre_stop*.log 1> /dev/null 2>&1
chmod 755 $OUTPUT_DIRECTORY/post_start*.log 1> /dev/null 2>&1
chmod 755 $OUTPUT_DIRECTORY/started*.log 1> /dev/null 2>&1
chmod 755 $OUTPUT_DIRECTORY/bl_start*.log 1> /dev/null 2>&1

chown $oracred $OUTPUT_DIRECTORY/pre_stop*.log 1> /dev/null 2>&1
chown $oracred $OUTPUT_DIRECTORY/post_start*.log 1> /dev/null 2>&1
chown $oracred $OUTPUT_DIRECTORY/started*.log 1> /dev/null 2>&1
chown $oracred $OUTPUT_DIRECTORY/bl_start*.log 1> /dev/null 2>&1


filename=$(echo $(hostname) | cut -d. -f1)_$(date '+%m%d%Y_%H%M%S')
mv ${LOG} $OUTPUT_DIRECTORY/start_$filename.log


echo ""
echo ""
echo "************************************************************************************************************";
echo "Please check the detailed START report at $OUTPUT_DIRECTORY/start_$filename.log"
echo "************************************************************************************************************";
echo ""


#################################################################
#                                                               #
# Modified by EMEA OracleDBA Team for enhancements & automation #
# DEC 2016                                                      #
#                                                               #
#################################################################
#                                                               #
#                                                               #
# USAGE : To be executed as oracle user                         #
#         (pbrun to oracle or pboracle)                         #
#                                                               #
# Manual execution                                              #
#       sh bl_status.ksh                                        #
#                                                               #
# Via job scheduler tools and by-passing the prompt             #
#       sh bl_status.ksh y                                      #
#                                                               #
#---------------------------------------------------------------#
#                                                               #
# //Generic information about the batch of scripts developed//  #
#       bl_status.ksh                                           #
#       bl_stop.ksh                                             #
#       bl_stop_crs.ksh                                         #
#       bl_start_crs.ksh                                        #
#       bl_start.ksh                                            #
#                                                               #
# Versions/Combinations Supported                               #
#       Clustware 12c                                           #
#       Clustware 11g                                           #
#       Clustware 10g                                           #
#       NON-RAC with ASM 11g                                    #
#       NON-RAC with ASM 10g                                    #
#       NON-RAC & NON-ASM                                       #
#                                                               #
# Components in scope                                           #
#       Clusterware                                             #
#       ASM Instance                                            #
#       Database Instance                                       #
#       Cluster Listener                                        #
#       Local Listener                                          #
#       Manager Recovery Process                                #
#       GoldenGate Replication                                  #
#       Port Utility                                            #
#       Enterprise Manager Agent                                #
#       OSWatcher Utility                                       #
#       Foglight Monitoring Agent                               #
#       Filesystem                                              #
#       Rawdisk                                                 #
#                                                               #
#################################################################
export OS=`uname -a | awk '{ print $1 }'`
eval timevalue=`date '+%m%d%Y_%H%M%S'`

#Handle First Argument (oraowner:oragroup) if specified
if [[ ! -z $1 ]]; then
   export oracred=$1
   export oraowner=`echo $oracred | cut -d":" -f1 -s`
   export oragroup=`echo $oracred | cut -d":" -f2 -s`
   echo "Oracle Ownership Captured ARGUMENTS ...
   oracred=$oracred
   oraowner=$oraowner
   oragroup=$oragroup
   "
else
   export oracred=oracle:dba
   export oraowner=oracle
   export oragroup=dba
fi

# CHECK IF THE USER IS as Arg#1 if specified
echo " "
if [ $(whoami) != "${oraowner}" ]
then
        echo ' \t \t' "ATTENTION : Please execute this script as ${oraowner} user"
        exit 0;
fi


# SCRIPT AND OUTPUT DIRECTORIES INITIALIZATION
SCRIPT_DIRECTORY=/efs/dist/gmrtdba/dbascripts/scripts/common
if [[ ${oraowner} = "oracle" ]]; then
   if [[ -d /oracle/dba/output/generic ]]; then
      OUTPUT_DIRECTORY=/oracle/dba/output/generic
   else
      OUTPUT_DIRECTORY=/var/bl_ora/log
      if [[ ! -d $OUTPUT_DIRECTORY ]]; then
         echo "OUTPUT_DIRECTORY: $OUTPUT_DIRECTORY was not found on this server ... Exiting"
         exit 0
      fi
   fi
else
   if [[ -d /oracle/dba/output/generic ]]; then
      OUTPUT_DIRECTORY=/oracle/dba/output/generic/${oraowner}
   else
      OUTPUT_DIRECTORY=/var/bl_ora/log/${oraowner}
      if [[ ! -d $OUTPUT_DIRECTORY ]]; then
         echo "OUTPUT_DIRECTORY: $OUTPUT_DIRECTORY was not found on this server ... Exiting"
         exit 0
      fi
   fi
fi


if [[ -f $OUTPUT_DIRECTORY/server_type.log ]]; then
   #server_type=$(<$OUTPUT_DIRECTORY/server_type.log)
   rm -f $OUTPUT_DIRECTORY/server_type.log
fi

         if [ "$(ps -ef | grep crsd.bin | grep -v grep | wc -l)" -eq 1 ]
                then
                        if [ "$(ps -ef | grep crsd.bin | grep -v grep | grep "12\." | wc -l)" -eq 1 ]
                        then
                                export server_type="rac_12c"
                        elif [ "$(ps -ef | grep crsd.bin | grep -v grep | grep "11\." | wc -l)" -eq 1 ]
                        then
                                export server_type="rac_11g"
                        else
                                export server_type="rac_10g"
                        fi
        else
                        if [ "$(ps -ef | grep ohasd.bin | grep -v grep | grep "12\." | wc -l)" -eq 1 ]
                        then
                                export server_type="norac_asm12c"
                        elif [ "$(ps -ef | grep ohasd.bin | grep -v grep | grep "11\." | wc -l)" -eq 1 ]
                        then
                                export server_type="norac_asm11g"
                        elif [ "$(ps -ef | grep pmon | grep -v grep | grep "+ASM" | grep -v onitor | wc -l)" -eq 1 ]
                        then
                                export server_type="norac_asm10g"
                        else
                                export server_type="norac_noasm"
                        fi
        fi

# Address rare issue seen where crsd.bin not picked up even though it is in fact a RAC system!
if [[ "$server_type" == norac_asm* ]] && [[ -f /etc/oratab ]]; then
   ASM_LAST_CHAR=`grep "^\+ASM" /etc/oratab | cut -d":" -f1 -s | sed -e "s/.*\(.\)/\1/"`
   echo $ASM_LAST_CHAR | egrep '^[0-9]+$'
   if [ $? -eq 0 ]; then
      #echo "$ASM_LAST_CHAR is a number .. So it's a RAC "
      server_str_2=`echo $server_type | sed 's/asm//g' |cut -d"_" -f2 -s`
      export server_type="rac_${server_str_2}"
   fi
fi

echo $server_type > $OUTPUT_DIRECTORY/server_type.log

########################################################################
## Get standard pw for db connections ##################################
## Gen: echo "*****" | openssl enc -base64
export dba_ro_p=`echo "c2FmMzJ1c2UK" | openssl enc -base64 -d`
export gem_re_p=`echo "Z2Vtc19wYXNzdzByZAo=" | openssl enc -base64 -d`
########################################################################

status_ora_homes()
{
rm -f $OUTPUT_DIRECTORY/bl_ora_homes.tmp
rm -f $OUTPUT_DIRECTORY/bl_ora_homes.lst
#Get ORA HOME info from running instances
ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s | while read ORA_INST
do
if [[ ! -z $ORA_INST ]]; then
   grep "^${ORA_INST}:" /etc/oratab | grep -v "^#" | cut -d":" -f2 -s | while read ORA_HOME
   do
      echo $ORA_HOME >> $OUTPUT_DIRECTORY/bl_ora_homes.tmp
   done
fi
done

if [[ -f $OUTPUT_DIRECTORY/bl_ora_homes.tmp ]]; then
   cat $OUTPUT_DIRECTORY/bl_ora_homes.tmp | sort -u > $OUTPUT_DIRECTORY/bl_ora_homes.lst
   echo " Active Oracle Homes Found in /etc/oratab on this host: " >> ${LOG}
   echo "`cat $OUTPUT_DIRECTORY/bl_ora_homes.lst`" >> ${LOG}
   echo "" >> ${LOG}
else
   echo "" >> ${LOG}
   echo "No Oracle Home Information Found from /etc/oratab on this host "  >> ${LOG}
   echo "" >> ${LOG}
fi
}

status_has()
{
echo "Collecting CLUSTERWARE information ..... "; echo ""
echo "************************** CLUSTERWARE *********************"     >> ${LOG}; echo "" >> ${LOG}

                export ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'`
                export ORAENV_ASK=NO                                                    >/dev/null;
                . oraenv                                                                >/dev/null
                crs_en_dis=`cat /etc/oracle/scls_scr/$(echo $(hostname) | cut -d. -f1)/root/crsstart | awk 'BEGIN{FS=":"}{print $1}'`
                echo "CRS status : $crs_en_dis"                                         >> ${LOG}; echo "" >> ${LOG}
                crsctl check has                                                        >>  ${LOG} ; echo "" >> ${LOG}
                crsctl check crs                                                        >>  ${LOG} ; echo "" >> ${LOG}
                srvctl status asm -n $(hostname)                                                >> ${LOG} ;  >> ${LOG} ; echo "" >> ${LOG}
                crs_stat -t                                                             >> ${LOG} ;  >> ${LOG} ; echo "" >> ${LOG}
                crsctl stat res -t                                                      >> ${LOG} ;  >> ${LOG} ; echo "" >> ${LOG}
                echo "CRS status : $crs_en_dis"  >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
}

status_crs()
{
echo "Collecting CLUSTERWARE information ..... "; echo ""
echo "************************** CLUSTERWARE *********************"     >> ${LOG}; echo "" >> ${LOG}

               ORACLE_SID=`cat /etc/oratab | awk 'BEGIN{FS=":"}{print $1}' | grep CRS | grep -v "#"`
                export ORAENV_ASK=NO                                                    >/dev/null;
                . oraenv                                                                >/dev/null
                crs_en_dis=`cat /etc/oracle/scls_scr/$(echo $(hostname) | cut -d. -f1)/root/crsstart | awk 'BEGIN{FS=":"}{print $1}'`
                echo "CRS status : $crs_en_dis"                                         >> ${LOG}; echo "" >> ${LOG}
                crsctl check crs                                                        >>  ${LOG} ; echo "" >> ${LOG}
                crs_stat -t                                                             >> ${LOG} ;  >> ${LOG} ; echo "" >> ${LOG}
                if [ "$(ps -ef | grep crs | grep -v grep | awk 'BEGIN{FS=" "}{print $(NF)}' | grep "10\." | wc -l)" -eq 0 ]
                then
                        crsctl stat res -t >> ${LOG} ;  >> ${LOG} ; echo "" >> ${LOG}
                        crsctl stat res -t >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                else
                #crsctl stat res -t                                                      >> ${LOG} ;  >> ${LOG} ; echo "" >> ${LOG}
                    echo "";
                fi
}

status_asm()
{
 echo "Collecting ASM information ..... "; echo ""
echo "***************************** ASM ************************"     >> ${LOG}; echo "" >> ${LOG}

        ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor               >> ${LOG} ; echo "" >> ${LOG}
        ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'>$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log

                for SID in `ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'`
                        do
                export ORACLE_SID=${SID}                                                >/dev/null
                export ORAENV_ASK=NO                                                    >/dev/null
                . oraenv                                                                >/dev/null
                op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba'<< EOF
                set echo off;
                set linesize 200 pages 1000
                col PATH for A40
                col NAME for A30
                select instance_name,host_name,startup_time from gv\\$instance;
                select group_number gn,disk_number dn, mount_status, header_status,mode_status,state, total_mb, free_mb, path, name
                        from v\\$asm_disk order by group_number, disk_number;
                set heading off;
                select 'Use below ouput for comparing ASM DISK Status Pre and Post' from dual;
                select 'ASMDISK_COMPARE_STRINGS:'||mount_status||':'||header_status||':'||mode_status||':'||name from v\\$asm_disk where NAME is not null order by name;
EOF`
                        echo "$op"                                                        >> ${LOG};echo "" >> ${LOG}
                        done

}

status_db()
{
echo "Collecting DATABASE & SERVICES information ..... "; echo ""
echo "************************** DATABASE & SERVICES *********************"     >> ${LOG}; echo "" >> ${LOG}
ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s>$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log

if [ "$(ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" |grep -v "\-MGMTDB" | grep -v onitor | wc -l)" != 0 ]
then
        rm -f $OUTPUT_DIRECTORY/db:inst
        rm -f $OUTPUT_DIRECTORY/db:inst.log
        rm -f $OUTPUT_DIRECTORY/unidb:inst.log
        rm -f $OUTPUT_DIRECTORY/dbopen:info.log
        rm -f $OUTPUT_DIRECTORY/inst_info.log
        rm -f $OUTPUT_DIRECTORY/db_stat_info.log
        rm -f $OUTPUT_DIRECTORY/"$when"_"$why"_dbservices.log

        # Grab unique name from each runing Instance
        for SID in `ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" |grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s`
                        do

                                export ORACLE_SID=$SID
                                export ORAENV_ASK=NO                                                    >/dev/null
                                . oraenv                                                                >/dev/null

                                $ORACLE_HOME/bin/sqlplus -s '/ as sysdba'<< EOFUDB1 > $OUTPUT_DIRECTORY/inst_info.log
                                set echo off;
                                set heading off;
                                set linesize 200 pages 100;
                                select 'DBINST_ENTRY:'||d.DB_UNIQUE_NAME||':'||i.INSTANCE_NAME from v\$database d, v\$instance i;
                                select 'DBINST_OPEN_INFO:'||i.INSTANCE_NAME from v\$database d, v\$instance i where i.STATUS='OPEN' and d.DATABASE_ROLE='PRIMARY';
EOFUDB1
                                cat $OUTPUT_DIRECTORY/inst_info.log | grep "DBINST_ENTRY:"    >> $OUTPUT_DIRECTORY/unidb:inst.log
                                cat $OUTPUT_DIRECTORY/inst_info.log | grep "DBINST_OPEN_INFO:" >> $OUTPUT_DIRECTORY/dbopen:info.log
                        done

        # Display some db info in status log based on contents of $OUTPUT_DIRECTORY/dbopen:info.log
        if [[ -f $OUTPUT_DIRECTORY/dbopen:info.log ]]; then
           while read data
           do
               export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
               export ORAENV_ASK=NO                                                    >/dev/null
               . oraenv                                                                >/dev/null
               echo "" >> ${LOG}
               echo "Collecting db info for instance: ${ORACLE_SID} " >> ${LOG}
               echo "" >> ${LOG}
               if [ $(ps -ef | grep -v grep | grep pmon | grep "^.*${oraowner} " | grep "pmon_${ORACLE_SID}\$" | wc -l) -ne 0 ]
                then
                        $ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOF > $OUTPUT_DIRECTORY/db_stat_info.log
                        set linesize 200 pages 100;
                        set heading off;
                        set echo off;
                        column COMP_ID format a15
                        column COMP_NAME format a40
                        column STATUS format a10
                        select '******* DB REGISTRY INFO *******' FROM DUAL;
                        select COMP_NAME, VERSION, STATUS, MODIFIED from dba_registry;
                        select '******* DB OBJECT VALID/INVALID COUNT *******' FROM DUAL;
                        select STATUS,COUNT(*) FROM DBA_OBJECTS GROUP BY STATUS;
                        select 'Checking any INVALID object counts ' FROM DUAL;
                        select owner,object_type,count(1) from dba_objects where status='INVALID' group by owner,object_type order by owner,object_type;
                        select '******* CONTROL FILE LOCATIONS *******' FROM DUAL;
                        select NAME from v\$controlfile;
                        select '******* DB SIZE TOTALS *******' FROM DUAL;
                        set heading on;
                        select (select sum(bytes/1048576) from dba_data_files) "Data Mb", (select NVL(sum(bytes/1048576),0) from dba_temp_files) "Temp Mb", (select sum(bytes/1048576)*max(members) from v\$log) "Redo Mb", (select sum(bytes/1048576) from dba_data_files) + (select NVL(sum(bytes/1048576),0) from dba_temp_files) + (select sum(bytes/1048576)*max(members) from v\$log) "Total Mb" from dual;
                        set heading off;
EOF
                 cat $OUTPUT_DIRECTORY/db_stat_info.log  >> ${LOG}; echo "" >> ${LOG}
               fi
               echo "___________________________________________________________">> ${LOG};
           done < $OUTPUT_DIRECTORY/dbopen:info.log

        fi

        if [[ $server_type = "rac_11g" ]] || [[ $server_type = "rac_12c" ]]
        then
                        export ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'`
                        export ORAENV_ASK=NO                                                    >/dev/null
                        . oraenv                                                                >/dev/null
                        for SID in `ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" |grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d "_" -f3,4 -s`
                        do

                                R_DBNAME=` echo $SID | sed "s/[1-9]$//g"|sed "s/_$//g"`;ONENode_DB="";

                                if [ "$(srvctl config database -d $R_DBNAME |grep -w "RACOneNode" | wc -l)" -eq 1 ]
                                then
                                        export LOCAL_NODE=`hostname -s`
                                        export ONENode_DB=`echo ":$LOCAL_NODE"`
                                fi


                                UNIQUE_NAME=`echo $(crs_stat | grep "ora." | grep ".db$" | grep -i "$R_DBNAME" | tr "[:lower:]" "[:upper:]")`

                                if [[ -f $OUTPUT_DIRECTORY/unidb:inst.log ]] && [[ ! -z $UNIQUE_NAME ]]; then
                                     UNIQUE_SID=`echo $UNIQUE_NAME | cut -d"." -f2 -s`
                                     CHK_UNI_LOG=`grep ":${UNIQUE_SID}:" $OUTPUT_DIRECTORY/unidb:inst.log`
                                     if [[ -z $CHK_UNI_LOG ]]; then
                                        UNIQUE_NAME=""
                                     fi
                                fi

                                if [[ ! -z $UNIQUE_NAME ]]; then
                                   echo $(crs_stat | grep "ora." | grep ".db$" | grep -i $R_DBNAME | tr "[:lower:]" "[:upper:]" | awk 'BEGIN{FS="."}{print $2}')":"$SID$ONENode_DB >> $OUTPUT_DIRECTORY/db:inst
                                else
                                   if [[ -f $OUTPUT_DIRECTORY/unidb:inst.log ]]; then
                                        #Do lookup from status file to find correct Unique name
                                        UNI_NAME=`grep "DBINST_ENTRY:" $OUTPUT_DIRECTORY/unidb:inst.log | grep ":${SID}$"| cut -d":" -f2 -s`
##                                        if [[ ! -z $UNI_NAME ]]; then  ## if unique name is have _tx matching with crs resource
                                        if [[ "$(crs_stat | grep "ora." | grep ".db$" | grep -i ${UNI_NAME} | wc -l)" -eq 1 ]]; then
                                           echo $(crs_stat | grep "ora." | grep ".db$" | grep -i ${UNI_NAME} | tr "[:lower:]" "[:upper:]" | awk 'BEGIN{FS="."}{print $2}')":"$SID >> $OUTPUT_DIRECTORY/db:inst
                                        else
                                           echo $(crs_stat | grep "ora." | grep ".db$" | grep -i ${R_DBNAME} | tr "[:lower:]" "[:upper:]" | awk 'BEGIN{FS="."}{print $2}')":"$SID >> $OUTPUT_DIRECTORY/db:inst
                                        fi
                                   else
                                        echo $(crs_stat | grep "ora." | grep ".db$" | grep -i ${R_DBNAME} | tr "[:lower:]" "[:upper:]" | awk 'BEGIN{FS="."}{print $2}')":"$SID >> $OUTPUT_DIRECTORY/db:inst
                                   fi
                                fi
                        done
        elif [[ $server_type = "rac_10g" ]]
        then
                        ORACLE_SID=`cat /etc/oratab | awk 'BEGIN{FS=":"}{print $1}' | grep CRS | grep -v "#"`
                        export ORAENV_ASK=NO                                                    >/dev/null
                        . oraenv                                                                >/dev/null
                        for SID in `ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s`
                        do
                                echo $(crs_stat | grep ora | grep db | grep -i ${SID%?} | tr "[:lower:]" "[:upper:]" | awk 'BEGIN{FS="."}{print $2}')":"$SID >> $OUTPUT_DIRECTORY/db:inst
                        done
        else
                for SID in `ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s`
                        do
                        echo $SID":"$SID >> $OUTPUT_DIRECTORY/db:inst
                done
        fi

        cp $OUTPUT_DIRECTORY/db:inst $OUTPUT_DIRECTORY/db:inst.log

        ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor             >> ${LOG} ; echo "" >> ${LOG}
        while read data
        do
                export ORACLE_DB=$(echo $data | awk 'BEGIN{FS=":"}{print $1}')       >/dev/null
                export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
                export ORAENV_ASK=NO                                                    >/dev/null
                . oraenv                                                                >/dev/null
                echo "Database Instance : "$ORACLE_SID                                  >> ${LOG};

                if [[ $server_type = "rac_11g" ]] || [[ $server_type = "rac_10g" ]] || [[ $server_type = "rac_12c" ]]
                then
                        srvctl status database -d $ORACLE_DB        >> ${LOG};echo "" >> ${LOG}
                        srvctl status service -d $ORACLE_DB        >> ${LOG};echo "" >> ${LOG}
                        echo $ORACLE_DB:$ORACLE_SID":"$(srvctl status service -d $ORACLE_DB | grep $ORACLE_SID | grep -i "is running" | awk '{ print $2 }') >> $OUTPUT_DIRECTORY/"$when"_"$why"_dbservices.log
                        echo "_____________________________________________________________________"   >> ${LOG}
                        sleep 3
                else
                        op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba'<< EOFDB2
                        set echo off;
                        set linesize 200 pages 100;
                        select instance_name,host_name,startup_time from gv\\$instance;
                        select name,open_mode,database_role from gv\\$database;
EOFDB2`
                        echo "$op"                                                        >> ${LOG};echo "" >> ${LOG}
                        if [[ "$server_type" == norac_asm* ]]; then
                           echo "" >> ${LOG}
                           echo "srvctl status database -d $ORACLE_DB" >> ${LOG}
                           srvctl status database -d $ORACLE_DB        >> ${LOG}
                           echo "srvctl status service -d $ORACLE_DB" >> ${LOG}
                           srvctl status service -d $ORACLE_DB        >> ${LOG}
                           echo "" >> ${LOG}
                        fi
                        echo "_____________________________________________________________________"   >> ${LOG}
                fi
        done < $OUTPUT_DIRECTORY/db:inst.log

        if [[ "$(cat $OUTPUT_DIRECTORY/db:inst.log | wc -l)" -gt 0 ]]; then
            echo "yes" > $OUTPUT_DIRECTORY/"$why"_"$what".log
        else
            echo "no" > $OUTPUT_DIRECTORY/"$why"_"$what".log
        fi

        if [[ "$(cat $OUTPUT_DIRECTORY/dbopen:info.log | wc -l)" -gt 0 ]]; then
            echo "yes" > $OUTPUT_DIRECTORY/"$why"_dbopenlog
        else
            echo "no" > $OUTPUT_DIRECTORY/"$why"_dbopen.log
        fi

else
        echo "All oracle instances are DOWN"    >> ${LOG}; echo "" >> ${LOG}
fi

}


status_lsnr()
{
echo "Collecting LISTENER information ..... "; echo ""
echo "***************************** LISTENER ************************"     >> ${LOG}; echo "" >> ${LOG}

                ps -ef | grep lsnr | grep "^.*${oraowner} " | grep -v grep                                       >> ${LOG} ; echo "" >> ${LOG}
                ps -ef | grep lsnr | grep "^.*${oraowner} " | grep -v grep |sed -n 's/.*\(tnslsnr.*\).*/\1/p' | awk '{ print $2 }' | sed '/^\s*$/d' >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
if [[ $server_type = "rac_11g" ]] || [[ $server_type = "norac_asm11g" ]] || [[ $server_type = "rac_12c" ]] || [[ $server_type = "norac_asm12c" ]] || [[ $server_type = "rac_10g" ]] || [[ $server_type = "norac_asm10g" ]]
then
                ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}' | head -1`
else
                ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s | head -1`
fi
                export ORAENV_ASK=NO                                                    >/dev/null
                if [[ ! -z $ORACLE_SID ]]; then
                . oraenv                                                                >/dev/null
                fi
                        for lsnr in `ps -ef | grep lsnr | grep "^.*${oraowner} " | grep -v grep | sed -n 's/.*\(tnslsnr.*\).*/\1/p' | awk '{ print $2 }'`
                        do
LSNR_HOME=`ps -ef | grep lsnr | grep $lsnr | grep "^.*${oraowner} " | grep -v grep | sed -n 's/.*\(..........................................................tnslsnr\).*/\1/p' | awk '{ print $NF }' | sed 's/\/bin\/tnslsnr//g'`
                           if [[ $ORACLE_HOME != $LSNR_HOME ]]; then
                                  if [[ -f /etc/oratab ]]; then
                                     ORACLE_SID=`grep "$LSNR_HOME" /etc/oratab | grep -v "^#" | cut -d":" -f1 -s | tail -1`
                                     export ORAENV_ASK=NO                                                    >/dev/null
                                     if [[ ! -z $ORACLE_SID ]]; then
                                        . oraenv                                                                >/dev/null
                                     fi
                                  fi
                           fi

                lsnrctl status $lsnr                                                    >> ${LOG};echo "" >> ${LOG}
                        done
}

status_gg()
{
echo "Collecting GOLDENGATE information ..... "; echo ""
echo "***************************** GOLDENGATE **************************"       >> ${LOG}; echo "" >> ${LOG}

ps -ef | grep -v grep | grep "mgr PARAMFILE" | grep "^.*${oraowner} " | sed -n 's/.*\(....................................................................\/....prm \).*/\1/p' | awk '{ print $NF }' | grep -v "\.\.\.\.mgr.prm" >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log

        if [ "$(ps -ef | grep -v grep | grep "mgr PARAMFILE" | grep "^.*${oraowner} " | wc -l)" -eq 0 ]
        then
                echo "GoldenGate is not running"                                >> ${LOG};echo "" >> ${LOG}
        else
                echo "GoldenGate is running"                                >> ${LOG};echo "" >> ${LOG}
                #ps -ef | grep "/ggate/product/" | grep -v grep                 >> ${LOG};echo "" >> ${LOG}
                ps -ef | grep -v grep | grep "^.*${oraowner} " | grep "mgr PARAMFILE"                 >> ${LOG};echo "" >> ${LOG}

                # Set Ora env
                ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF}'`
                export ORAENV_ASK=NO                                                    >/dev/null;
                if [[ ! -z $ORACLE_SID ]]; then
                    . oraenv                                                                >/dev/null
                else
                   ORACLE_SID=`ps -ef | grep pmon | sort -k9 | grep "^.*${oraowner} " | grep -v grep | grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor | awk '{ print $NF }' | cut -d"_" -f3,4 -s | tail -1`
                   . oraenv                                                                >/dev/null
                fi

ps -ef | grep -v grep | grep "mgr PARAMFILE" | grep "^.*${oraowner} " | sed -n 's/.*\(...................................................................\/....prm \).*/\1/p' | awk '{ print $NF }' | sort | while read GG_MGRPROC
        do
        # Proceed only if Golden Gate Manager is running
        if [[ ! -z $GG_MGRPROC ]]; then
           #GG_HOME=`echo $GG_MGRPROC | sed 's/\/dirprm\/mgr.prm//g'`
            GG_HOME=`echo $GG_MGRPROC | sed 's/\/dirprm\/mgr.prm//g' | sed 's/\/dirprm\/MGR.prm//g'`

if [[ -d $GG_HOME ]]; then
${GG_HOME}/ggsci << EOF >> ${LOG}
info all
exit
EOF
           #echo "$op"                                                      >> ${LOG};echo "" >> ${LOG}
fi
        fi
        done
        fi
}

status_dbfs()
{
echo "Collecting DBFS information ..... "; echo ""
echo "***************************** DBFS **************************"       >> ${LOG}; echo "" >> ${LOG}
ps -ef | grep -v grep | grep "dbfs_client" | grep "^.*${oraowner} " | sed -n 's/.*\(................................................................\/bin\/dbfs_client\).*/\1/p' | awk '{ print $NF }' | grep -v "\.\.\.\.dbfs_client"  >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
if [ "$(ps -ef | grep -v grep | grep "dbfs_client" | grep "^.*${oraowner} " | wc -l)" -eq 0 ]
        then
                echo "DBFS is not running"                                >> ${LOG};echo "" >> ${LOG}
        else
                echo "DBFS is running"                                >> ${LOG};echo "" >> ${LOG}
                ps -ef | grep -v grep | grep "^.*${oraowner} " | grep "dbfs_client"                 >> ${LOG};echo "" >> ${LOG}
       fi
}

status_mrp()
{
echo "Collecting MRP information ..... "; echo ""
echo "******************************** MRP *****************************"       >> ${LOG}; echo "" >> ${LOG}
ps -ef | grep mrp | sort -k9 | grep "^.*${oraowner} " | grep -v grep                             >> ${LOG} ; echo "" >> ${LOG}
ps -ef | grep mrp | sort -k9 | grep "^.*${oraowner} " | grep -v grep | awk '{ print $NF }' | cut -d"_" -f3,4 -s >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
if [ "$(ps -ef | grep mrp | grep "^.*${oraowner} " | grep -v grep | wc -l)" -eq 0 ]
   then
        echo "MRP is not running"                                          >> ${LOG} ; echo "" >> ${LOG}
   else
        echo "MRP is running .. Collecting DG related Info" >> ${LOG} ; echo "" >> ${LOG}
        #Pickup DG LAG STATUS from Primary db
        DG_INST_1_LOG=$OUTPUT_DIRECTORY/pre_stop_dg_dbinst.log
        DG_INST_2_LOG=$OUTPUT_DIRECTORY/pre_stop_dg_Primdbinst.log
        rm -f ${DG_INST_1_LOG}
        rm -f ${DG_INST_2_LOG}

        while read data
        do
                export ORACLE_DB=$(echo $data | awk 'BEGIN{FS=":"}{print $1}')       >/dev/null
                export ORACLE_SID=$(echo $data | awk 'BEGIN{FS=":"}{print $2}')       >/dev/null
                export ORAENV_ASK=NO                                                    >/dev/null
                . oraenv                                                                >/dev/null
                echo "Checking Database Instance : "$ORACLE_SID                                  >> ${LOG};

                op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba'<< EOFDB2
                        set heading off;
                        set echo off;
                        set linesize 200 pages 100;
                        select 'PRIMARY_DB_UNIQUE:'||PRIMARY_DB_UNIQUE_NAME||':STANDBY_DB_UNIQUE:'||DB_UNIQUE_NAME||':STANDBY_DB_INST:${ORACLE_SID}' from v\\$database where database_role like 'PHYSICAL STANDBY';
EOFDB2`
                        echo "$op"   | grep "PRIMARY_DB_UNIQUE:"                                            >> ${DG_INST_1_LOG}

        done < $OUTPUT_DIRECTORY/db:inst.log


   if [[ -f ${DG_INST_1_LOG} ]]; then

   STANDBY_CNT=`cat ${DG_INST_1_LOG} | wc -l`

     if  [[ $STANDBY_CNT -ne 0 ]]; then
        cat ${DG_INST_1_LOG} | while read dgline
        do
                PRIM_DB_SID=`echo $dgline | cut -d":" -f2 -s`
                STANDBY_DB_SID=`echo $dgline | cut -d":" -f4 -s`
                STANDBY_DB_INST=`echo $dgline | cut -d":" -f6 -s`
                if [[ ! -z $PRIM_DB_SID ]]; then
                   op=`$ORACLE_HOME/bin/sqlplus -s '/ as sysdba' << EOFDB2
                        conn dba_ro/${dba_ro_p}@${PRIM_DB_SID}
                        set heading off;
                        set echo off;
                        set linesize 200 pages 100;
                        select d.name||':'||b.dest_id||':'||b.DRNAME||':'||max(a.Primary_sequence - b.DR_sequence)
                        from v\\$database d,(select thread#, SEQUENCE# Primary_sequence from v\\$log where status='CURRENT') a,
           (select thread#,RESETLOGS_CHANGE#,max(sequence#) DR_sequence,dest_id,upper(name) DRNAME from v\\$archived_log where dest_id in (2,3) and applied in ('YES','IN-MEMORY') group by thread#,RESETLOGS_CHANGE#,dest_id,upper(name)) b
                        where d.RESETLOGS_CHANGE#=b.RESETLOGS_CHANGE#
                        and a.thread#=b.thread#
                        and b.DRNAME is not null
                        and b.DRNAME not like '%/%'
                        group by d.name,b.dest_id,b.DRNAME;
EOFDB2`
                        echo "${op}:${STANDBY_DB_INST}"                                  >> ${DG_INST_2_LOG}

                        if [[ -f ${DG_INST_2_LOG} ]]; then
                           echo "" >> ${LOG};
                           echo "Active DG destinations detected on Primary db: $PRIM_DB_SID .. "  >> ${LOG};
                           echo "" >> ${LOG};
                           echo "PRIMARY_DB:DEST_ID:STANDBY_DB:CURRENT_LAG:STANDBY_LOCAL_INST" >> ${LOG};
                           echo "============================================================" >> ${LOG};
                           echo "`cat ${DG_INST_2_LOG} | grep ":${STANDBY_DB_SID}:"`" >> ${LOG};
                           echo "" >> ${LOG};
                           echo "" >> ${LOG};
                        fi
                fi
        done
     fi
   fi

        fi
}

status_em()
{
echo "Collecting EMAGENT information ..... "; echo ""
echo "***************************** EMAGENT ************************"     >> ${LOG}; echo "" >> ${LOG}
        if [ $(ps -ef | grep emagent | grep "^.*${oraowner} " | grep -v grep | wc -l) != 0 ]
        then
                ORACLE_SID=`cat /etc/oratab | awk 'BEGIN{FS=":"}{print $1}' | grep OEM | grep -v "^#"`
                export ORAENV_ASK=NO                                                    >/dev/null;
                if [[ ! -z $ORACLE_SID ]]; then
                . oraenv                                                                >/dev/null
                emctl status agent              >> ${LOG} ; echo "" >> ${LOG}
                fi
                emctl status agent | grep "Agent is Running and Ready"  > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        else
                echo "EMAgent is not running"    >> ${LOG} ; echo "" >> ${LOG}
        fi
}

status_fgl()
{
echo "Collecting FOGLIGHT information ..... "; echo ""
echo "**************************** FOGLIGHT ****************************"       >> ${LOG}; echo "" >> ${LOG}
        ps -ef | grep -i foglight | grep "^.*${oraowner} " | grep -v grep                                        >> ${LOG} ; echo "" >> ${LOG}
        ps -ef | grep -i foglight | grep "^.*${oraowner} " | grep -v grep|head -1  > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        if [ "$(ps -ef | grep -i foglight | grep "^.*${oraowner} " | grep -v grep | wc -l)" -eq 0 ]
        then
        echo "Foglight is not running"                                          >> ${LOG} ; echo "" >> ${LOG}
        fi
}

status_osw()
{
echo "Collecting OSWATCHER information ..... "; echo ""
echo "**************************** OSWATCHER ****************************"       >> ${LOG}; echo "" >> ${LOG}
        ps -ef | grep -i OSW | grep "^.*${oraowner} " | grep -v grep                                        >> ${LOG} ; echo "" >> ${LOG}
        ps -ef | grep -i OSW | grep "^.*${oraowner} " | grep -v grep |head -1 > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        if [ "$(ps -ef | grep -i OSW | grep "^.*${oraowner} " | grep -v grep | wc -l)" -eq 0 ]
        then
        echo "OSWatcher is not running"                                          >> ${LOG} ; echo "" >> ${LOG}
        fi
}

status_portutil()
{
echo "Collecting PORT UTILITY information ..... "; echo ""
echo "**************************** PORT UTILITY ****************************"   >> ${LOG}; echo "" >> ${LOG}
        #ps -ef | grep 10101 | grep -v grep | grep port                          >> ${LOG} ; echo "" >> ${LOG}
        ps -ef | grep "portdaemon.pl" | grep -v grep | grep port                          >> ${LOG} ; echo "" >> ${LOG}
        ps -ef | grep "portdaemon.pl" | grep -v grep | grep port |head -2 > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        #if [ "$(ps -ef | grep 10101 | grep -v grep | grep port | wc -l)" -ge 1 ]
        if [ "$(ps -ef | grep "portdaemon.pl" | grep -v grep | grep port | wc -l)" -ge 1 ]
                then
                echo "Port Utility is running"                                  >> ${LOG} ; echo "" >> ${LOG}
        else
                echo "Port Utility is not running"                              >> ${LOG} ; echo "" >> ${LOG}
        fi
}

status_tfa()
{
echo "Collecting TFA information ..... "; echo ""
echo "***************************** TFA **************************"       >> ${LOG}; echo "" >> ${LOG}
ps -ef | grep -v grep | grep tfa_home |head -1 > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        if [ "$(ps -ef | grep -v grep | grep tfa_home | wc -l)" -eq 0 ]
        then
                echo "TFA is not running"                                >> ${LOG};echo "" >> ${LOG}
        else
                echo "TFA is running"                                >> ${LOG};echo "" >> ${LOG}
                ps -ef | grep -v grep | grep "tfa_home"                 >> ${LOG};echo "" >> ${LOG}
       fi
}

status_bda()
{
echo "Collecting BDA Agent information ..... "; echo ""
echo "***************************** BDA **************************"       >> ${LOG}; echo "" >> ${LOG}
ps -ef | grep -v grep | grep dagent.conf |head -1 > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
BDA_AGT=$OUTPUT_DIRECTORY/pre_stop_bda.log
        if [ "$(ps -ef | grep -v grep | grep dagent.conf | wc -l)" -eq 0 ]
        then
                echo "BDA Agent is not running"                                >> ${LOG};echo "" >> ${LOG}
                echo "no" > $BDA_AGT
        else
                echo "BDA Agent is running"                                >> ${LOG};echo "" >> ${LOG}
                ps -ef | grep -v grep | grep "dagent.conf"                 >> ${LOG};echo "" >> ${LOG}
                echo "yes" > $BDA_AGT
       fi
}

status_fs()
{
echo "Collecting FILESYSTEM information ..... "; echo ""
echo "**************************** FILESYSTEM ***************************"      >> ${LOG}; echo "" >> ${LOG} ;
        df -Pk > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        df -Pk                                                >> ${LOG} ; echo "" >> ${LOG}

echo "OCFS Information... "                                                     >> ${LOG} ;
        if [[ -f /etc/fstab ]]; then
        grep ocfs /etc/fstab                                                    >> ${LOG} ; echo "" >> ${LOG}
        fi
#Get Core FS Count
df -Pk | sed -n '1!p' | grep -v " /home" | grep -v " /.efs" | grep -v " /efs" | grep -v " /run" | grep -v " /apps/oracle" | grep -v " /tempmnt" | grep -v " /Net" | grep -v " /net" | grep -v " /dbacl" | wc -l > $OUTPUT_DIRECTORY/pre_disk_fs_mount.cnt
df -Pk | sed -n '1!p' | awk '{ print $NF }' | grep -v "^/home" |  grep -v "^/.efs" | grep -v "^/efs" | grep -v "^/run" | grep -v "^/apps/oracle" | grep -v "^/tempmnt" | grep -v "^/Net" | grep -v "^/net" | grep -v "^/dbacl" > $OUTPUT_DIRECTORY/pre_disk_fs_mount.log

}

status_disk()
{
echo "Collecting DISK information ..... "; echo ""
echo "******************************* DISK ******************************"      >> ${LOG}; echo "" >> ${LOG} ;
if [[ $OS != "AIX" ]]; then
        ls -l /dev/mapper|egrep "asm.*p1|fra.*p1|gg.*p1"|while read line
        do
                named_disk=$(echo $line|xargs|cut -f9 -d" ")
                dm_disk=$(echo $line|xargs|cut -f11 -d" "|cut -f2 -d"/")
                echo "${named_disk}"
                ls -l /dev/${dm_disk}
        done > $OUTPUT_DIRECTORY/disk_info.lst

        filename=$(date '+%m%d%Y_%H%M%S')
        mv $OUTPUT_DIRECTORY/disk_info.lst $OUTPUT_DIRECTORY/disk_info_$filename.lst

        echo "Disk ownership information is available at $OUTPUT_DIRECTORY/disk_info_$filename.lst" >> ${LOG} ; echo "" >> ${LOG}
fi
}

status_standalone_autostart()
{
echo "Collecting ORATAB and LSNRTAB information ..... "; echo ""
echo "******************************* STANDALONE AUTO-START INFO  (/etc/oratab and /etc/lsnrtab contents) ******************************"      >> ${LOG}; echo "" >> ${LOG} ;

if [[ -f /etc/oratab ]]; then
   echo "" >> ${LOG}
   echo "/etc/oratab =>" >> ${LOG}
   echo "" >> ${LOG}
   echo "`cat /etc/oratab`" >> ${LOG} ; echo "" >> ${LOG}
   echo "" >> ${LOG}
else
   echo "" >> ${LOG}
   echo " NO /etc/oratab FOUND on this host!" >> ${LOG} ; echo "" >> ${LOG}
   echo "" >> ${LOG}
fi

if [[ -f /etc/lsnrtab ]]; then
   echo "" >> ${LOG}
   echo "/etc/lsnrtab =>" >> ${LOG}
   echo "" >> ${LOG}
   echo "`cat /etc/lsnrtab`" >> ${LOG} ; echo "" >> ${LOG}
   echo "" >> ${LOG}
else
   echo "" >> ${LOG}
   echo " NO /etc/lsnrtab FOUND on this host!" >> ${LOG} ; echo "" >> ${LOG}
   echo "" >> ${LOG}
fi
}

status_status()
{
if [[ -f $OUTPUT_DIRECTORY/pre_"$why"_"$what".log ]]; then
        if [[ "$(cat $OUTPUT_DIRECTORY/pre_"$why"_"$what".log | wc -l)" -gt 0 ]]; then
             echo "yes" > $OUTPUT_DIRECTORY/"$why"_"$what".log
        else
             echo "no" > $OUTPUT_DIRECTORY/"$why"_"$what".log
        fi
fi
}

# Remove the temporary log file
        rm -f $OUTPUT_DIRECTORY/status.log

# Assign a new log file
        LOG=$OUTPUT_DIRECTORY/status.log;                                      echo "" >> ${LOG};

#ASSIGNING THE OUTPUT VARIABLES

assign_log()
{
if [ -s $OUTPUT_DIRECTORY/pre_status_crs.log ]
then
        crs_output=`cat $OUTPUT_DIRECTORY/pre_status_crs.log`
else
        crs_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_has.log ]
then
        crs_output=`cat $OUTPUT_DIRECTORY/pre_status_has.log`
else
        crs_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_asm.log ]
then
        asm_output=`cat $OUTPUT_DIRECTORY/pre_status_asm.log`
else
        asm_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_esm.log ]
then
        esm_agent_output=`cat $OUTPUT_DIRECTORY/pre_status_esm.log`
else
        esm_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_dma.log ]
then
        dma_agent_output=`cat $OUTPUT_DIRECTORY/pre_status_dma.log`
else
        dma_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_lsnr.log ]
then
        listener_output=`cat $OUTPUT_DIRECTORY/pre_status_lsnr.log`
else
        listener_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/db:inst ]
then
        db_instance_output=`cat $OUTPUT_DIRECTORY/db:inst`
else
        db_instance_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/dbopen:info.log ]
then
        db_open_output=`cat $OUTPUT_DIRECTORY/dbopen:info.log`
else
        db_open_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/unidb:inst.log ]
then
        db_unique_output=`cat $OUTPUT_DIRECTORY/unidb:inst.log`
else
        db_unique_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_dbmount.log ]
then
        db_mount_output=`cat $OUTPUT_DIRECTORY/pre_status_dbmount.log`
else
        db_mount_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_dbservices.log ]
then
        service_alignment_output=`cat $OUTPUT_DIRECTORY/pre_status_dbservices.log`
else
        service_alignment_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_mrp.log ]
then
        mrp_output=`cat $OUTPUT_DIRECTORY/pre_status_mrp.log`
else
        mrp_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_em.log ]
then
        oem_agent_output=`cat $OUTPUT_DIRECTORY/pre_status_em.log`
else
        oem_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_portutil.log ]
then
        port_utility_output=`cat $OUTPUT_DIRECTORY/pre_status_portutil.log`
else
        port_utility_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_fgl.log ]
then
        foglight_output=`cat $OUTPUT_DIRECTORY/pre_status_fgl.log`
else
        foglight_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_osw.log ]
then
        os_watcher_output=`cat $OUTPUT_DIRECTORY/pre_status_osw.log`
else
        os_watcher_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/pre_status_usb.log ]
then
        usb_output=`cat $OUTPUT_DIRECTORY/pre_status_usb.log`
else
        usb_output="no_status"
fi

if [ -s /oracle/dba/foglight/fgl_5/bin/fglam ]
then
        fglam_output=`/oracle/dba/foglight/fgl_5/bin/fglam --check-connection`
else
        fglam_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/server_type.log ]
then
                instance_type=`cat $OUTPUT_DIRECTORY/server_type.log`
else
                instance_type="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/version_executed_status.log ]
then
                script_version=`cat $OUTPUT_DIRECTORY/version_executed_status.log`
else
                script_version="no_status"
fi
}

insert_repdb()
{       why=status;
        for what in fgl osw agent portutil lsnr mrp db asm has em dma esm
                do
                        status_status;
        done
        for what in fgl osw agent portutil lsnr mrp db asm has em
                do
                        if [ -s $OUTPUT_DIRECTORY/status_$what.log ]
                        then
                          eval var_$what=`cat $OUTPUT_DIRECTORY/status_$what.log`
                        else
                          eval var_$what="no_status"
                        fi
                done
        var_esm=na;
        var_dma=na;

#PREPARING THE INSERT STATEMENT

if [ $(cat /etc/oratab | grep oracle | grep -v -i asm | grep -v -i crs | grep -v -i oem | grep -v "#" | awk 'BEGIN{FS=":"}{print $1}' | head -1 | wc -l) = 1 ]
then
export ORACLE_SID=`cat /etc/oratab | grep oracle | grep -v -i asm | grep -v -i crs | grep -v -i oem | grep -v "#" | awk 'BEGIN{FS=":"}{print $1}' | head -1`
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
        $ORACLE_HOME/bin/sqlplus -s OSH_SEH/dbaas_operations1@SUNDVD94 << EOFSTATUS
                set echo off;
                set head off;
                set feedback off;
insert into OSH_SEH.dbss_log (DBSS_ID,
SCRIPT_VERSION,
INSTANCE_TYPE,
STOP_OR_START,
CRS_OR_DB,
SERVER_NAME,
SERVER_TIMESTAMP,
CRS,
ASM,
LISTENER,
DB_INSTANCE,
MRP_PROCESS,
ESM_AGENT,
DMA_AGENT,
OEM_AGENT,
PORT_UTILITY,
FOGLIGHT,
OS_WATCHER,
SENT_MAIL,
CRS_OUTPUT,
ASM_OUTPUT,
LISTENER_OUTPUT,
DB_INSTANCE_OUTPUT,
DB_OPEN_OUTPUT,
DB_OPENRO_OUTPUT,
DB_MOUNT_OUTPUT,
SERVICE_ALIGNMENT_OUTPUT,
MRP_OUTPUT,
ESM_AGENT_OUTPUT,
DMA_AGENT_OUTPUT,
OEM_AGENT_OUTPUT,
PORT_UTILITY_OUTPUT,
FOGLIGHT_OUTPUT,
OS_WATCHER_OUTPUT,
USB_OUTPUT,
FGLAM_OUTPUT,
DB_UNIQUE_OUTPUT)
values (DBSS_LOG_SEQ.nextval,
'$script_version',
'$instance_type',
'status',
'db',
'$(hostname -f)',
'$timevalue',
'$var_has',
'$var_asm',
'$var_lsnr',
'$var_db',
'$var_mrp',
'$var_esm',
'$var_dma',
'$var_em',
'$var_portutil',
'$var_fgl',
'$var_osw',
0,
'$crs_output',
'$asm_output',
'$listener_output',
'$db_instance_output',
'$db_open_output',
'$db_openro_output',
'$db_mount_output',
'$service_alignment_output',
'$mrp_output',
'$esm_agent_output',
'$dma_agent_output',
'$oem_agent_output',
'$port_utility_output',
'$foglight_output',
'$os_watcher_output',
'$usb_output',
'$fglam_output',
'$db_unique_output');
commit;
EOFSTATUS
fi
}

echo "************************* START TIME : $(date) ************************"  >> ${LOG}; echo "" >> ${LOG}

case $server_type in
        "rac_12c")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 12c CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};

                why=status; when=pre;

                for what in has asm db mrp lsnr dbfs gg em fgl osw portutil fs disk tfa ora_homes bda
                do

                   status_$what;

                done
                assign_log
                insert_repdb

                ;;
        "rac_11g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 11g CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};

                why=status; when=pre;

                for what in has asm db mrp lsnr dbfs gg em fgl osw portutil fs disk tfa ora_homes bda
                do

                        status_$what;
                done
                assign_log
                insert_repdb
                ;;
        "rac_10g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 10g CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};

                why=status; when=pre;

                for what in crs asm db mrp lsnr gg em fgl osw portutil fs disk ora_homes bda
                do

                        status_$what;
                done
                assign_log
                insert_repdb
                ;;
        "norac_asm12c")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 12c <----------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};

                why=status; when=pre;

                for what in asm db mrp lsnr dbfs gg em fgl osw portutil fs disk tfa ora_homes bda
                do

                        status_$what;
                done
                assign_log
                insert_repdb
                ;;
        "norac_asm11g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 11g <----------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};

                why=status; when=pre;

                for what in asm db mrp lsnr dbfs gg em fgl osw portutil fs disk tfa ora_homes bda
                do

                        status_$what;
                done
                assign_log
                insert_repdb
                ;;
        "norac_asm10g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 10g <----------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};

                why=status; when=pre;

                for what in asm db mrp lsnr gg em fgl osw portutil fs disk tfa ora_homes bda
                do

                        status_$what;
                done
                assign_log
                insert_repdb
                ;;
        "norac_noasm")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "--------------------------> THIS IS A NON-RAC & NON-ASM SYSTEM <----------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};

                why=status; when=pre;

                for what in db mrp lsnr gg em fgl osw portutil fs disk ora_homes bda standalone_autostart
                do

                        status_$what;
                done
                assign_log
                insert_repdb
                ;;
        *)
                echo "Invalid Selection"
esac

filename=$(echo $(hostname) | cut -d. -f1)_$(date '+%m%d%Y_%H%M%S')
mv ${LOG} $OUTPUT_DIRECTORY/status_$filename.log


echo "" >> ${LOG};
echo "" >> ${LOG};

echo "******************************************************************************************************";
echo "Please check the detailed STATUS report at $OUTPUT_DIRECTORY/status_$filename.log"
echo "******************************************************************************************************";
echo "" >> ${LOG};







#################################################################
#                                                               #
#################################################################
#                                                               #
# Modified by EMEA OracleDBA Team for enhancements & automation #
# APRIL 2016                                                    #
#                                                               #
#################################################################
#                                                               #
# USAGE : To be executed as root user                           #
#         (pbrun to oracle or pboracle)                         #
#                                                               #
# Manual execution                                              #
#       sh bl_start_crs.ksh                                     #
#                                                               #
# Via job scheduler tools and by-passing the prompt             #
#       sh bl_start_crs.ksh y                                   #
#                                                               #
#---------------------------------------------------------------#
#                                                               #
# //Generic information about the batch of scripts developed//  #
#       bl_status.ksh                                           #
#       bl_stop.ksh                                             #
#       bl_stop_crs.ksh                                         #
#       bl_start_crs.ksh                                        #
#       bl_start.ksh                                            #
#                                                               #
# Versions/Combinations Supported                               #
#       Clustware 11g                                           #
#       Clustware 10g                                           #
#       NON-RAC with ASM 11g                                    #
#       NON-RAC with ASM 10g                                    #
#       NON-RAC & NON-ASM                                       #
#                                                               #
# Components in scope                                           #
#       Clusterware                                             #
#       ASM Instance                                            #
#       Database Instance                                       #
#       Cluster Listener                                        #
#       Local Listener                                          #
#       Manager Recovery Process                                #
#       GoldenGate Replication                                  #
#       Port Utility                                            #
#       Enterprise Manager Agent                                #
#       OSWatcher Utility                                       #
#       Foglight Monitoring Agent                               #
#       Filesystem                                              #
#       Rawdisk                                                 #
#                                                               #
#################################################################
export OS=`uname -a | awk '{ print $1 }'`
eval timevalue=`date '+%m%d%Y_%H%M%S'`
eval filename=$(echo $(hostname) | cut -d. -f1)_$timevalue

export PATH=$PATH:/usr/local/bin
if [[ -f /etc/redhat-release ]]; then
   export RH_VER=`cat /etc/redhat-release | grep "Linux Server release" | sed -n 's/.*\(Linux Server release.*\).*/\1/p' |                                                awk '{ print $4 }'`
else
   export RH_VER=0
fi

if [ "$(ps -ef | grep -i mysql | grep -v grep | wc -l)" -ge 1 ]
then
        echo "This is a MySQL Database Server"
        exit 0
fi



# CHECK IF THE USER IS ROOT

echo " "
if [ $(whoami) != "root" ]
then
        echo "ATTENTION : Please execute this script as root user"
        exit 0;
fi


# SCRIPT AND OUTPUT DIRECTORIES INITIALIZATION

SCRIPT_DIRECTORY=/efs/dist/gmrtdba/dbascripts/scripts/common
if [[ -d /oracle/dba/output/generic ]]; then
   OUTPUT_DIRECTORY=/oracle/dba/output/generic
else
   OUTPUT_DIRECTORY=/var/bl_ora/log
   if [[ ! -d $OUTPUT_DIRECTORY ]]; then
      echo "OUTPUT_DIRECTORY: $OUTPUT_DIRECTORY was not found on this server ... Exiting"
      exit 0
   fi
fi

# Check if user really wants to START the services
if [ $# -eq 0 ]
    then
        read -r -p "Are you sure you want to START the Clusterware services ? [y/n] " response
                if [ $response = y ]
                        then
                            echo "";   echo "Please wait while the services are started up... ";      echo ""
                else
                    exit; >/dev/null
                fi
elif [ $1 == y ]
    then
                            echo "";   echo "Please wait while the services are started up... ";      echo ""
else
                    exit; >/dev/null
fi


export server_type=$(cat $OUTPUT_DIRECTORY/server_type.log)

collect_esm()
{
        if [ $when = pre ]
        then
                if [ ! -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
                then
                        touch $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        ps -ef | grep -i esm | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                elif [ $(( (`date +%s` - `stat -L --format %Y $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log`) > (2880*60) )                                               ) = 1 ]
                then
                        rm -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        ps -ef | grep -i esm | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                else
                        if [ $(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log) -gt 0 ]
                        then
                                sleep 1
                        else
                                ps -ef | grep -i esm | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        fi
                fi
        elif [ $when = post ]
        then
                ps -ef | grep -i esm | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        else
                sleep 0
        fi
}

collect_dma()
{
        if [ $when = pre ]
        then
                if [ ! -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
                then
                        touch $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        ps -ef | grep opsware | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                elif [ $(( (`date +%s` - `stat -L --format %Y $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log`) > (2880*60) )                                               ) = 1 ]
                then
                        rm -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        ps -ef | grep opsware | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                else
                        if [ $(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log) -gt 0 ]
                        then
                                sleep 1
                        else
                                ps -ef | grep opsware | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".lo                                               g
                        fi
                fi
        elif [ $when = post ]
        then
                ps -ef | grep opsware | grep -v grep | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        else
                sleep 0
        fi
}

collect_lsnr()
{
   if [ $when = pre ]
   then
        if [ ! -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
        then
                touch $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                ps -ef | grep lsnr |grep -v grep | sed -n 's/.*\(tnslsnr.*\).*/\1/p' | awk '{ print $2 }' | sed '/^\s*$/d'                                                >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        #elif [ $(( (`date +%s` - `stat -L --format %Y $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log`) > (2880*60) )) -eq 1                                                ]
        #then
                #rm -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                #ps -ef | grep lsnr |grep -v grep | sed -n 's/.*\(tnslsnr.*\).*/\1/p' | awk '{ print $2 }' | sed '/^\s*$/d                                               ' >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        else
                for LSNR in `ps -ef | grep lsnr |grep -v grep | sed -n 's/.*\(tnslsnr.*\).*/\1/p' | awk '{ print $2 }' | s                                               ed '/^\s*$/d'`
                do
                        if [ $(grep -w "$LSNR" $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log | wc -l) -eq 1 ]
                        then
                                sleep 0
                        else
                                echo $LSNR >> $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        fi
                done
        fi
   elif [ $when = post ]
        then
                ps -ef | grep lsnr |grep -v grep | sed -n 's/.*\(tnslsnr.*\).*/\1/p' | awk '{ print $2 }' | sed '/^\s*$/d'                                                >$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        else
                sleep 0
        fi
}

collect_asm()
{
   if [ $when = pre ]
   then
        if [ ! -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
        then
                touch $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                ps -ef | grep pmon | sort -k9 | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF                                               }'>$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        #elif [ $(( (`date +%s` - `stat -L --format %Y $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log`) > (2880*60) )) -eq 1                                                ]
        #then
                #rm -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                #ps -ef | grep pmon | sort -k9 | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $N                                               F}'>$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        else
        for ASM in `ps -ef | grep pmon | sort -k9 | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print                                                $NF}'`
                do
                        if [ $(grep -w "$ASM" $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log | wc -l) -eq 1 ]
                        then
                                sleep 1
                        else
                                echo $ASM >> $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        fi
                done
        fi
        elif [ $when = post ]
        then
                ps -ef | grep pmon | sort -k9 | grep -v grep | grep "+ASM" | grep -v onitor | awk 'BEGIN{FS="_"}{print $NF                                               }'>$OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        else
                sleep 0
        fi
}

collect_crs()
{
        if [ $when = pre ]
        then
                if [ ! -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
                then
                        touch $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        ps -ef | grep crs | grep -v grep | grep -v tfa | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".                                               log
                #elif [ $(( (`date +%s` - `stat -L --format %Y $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log`) > (2880*60)                                                )) -eq 1 ]
                #then
                        #rm -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        #ps -ef | grep crs | grep -v grep | grep -v tfa | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what"                                               .log
                else
                        if [ $(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log) -gt 0 ]
                        then
                                sleep 1
                        else
                                ps -ef | grep crs | grep -v grep | grep -v tfa | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_                                               "$what".log
                        fi
                fi
        elif [ $when = post ]
        then
                ps -ef | grep crs | grep -v grep | grep -v tfa | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
        else
                sleep 0
        fi
}

#Portdaemon detection
collect_portutil()
{
        if [ $when = pre ]
        then
                if [ ! -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log ]
                then
                        touch $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        ps -ef | grep "portdaemon.pl" | grep -v grep | grep port | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why                                               "_"$what".log
                #elif [ $(( (`date +%s` - `stat -L --format %Y $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log`) > (2880*60)                                                )) -eq 1 ]
                #then
                        #rm -f $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log
                        #ps -ef | grep "portdaemon.pl" | grep -v grep | grep port | wc -l > $OUTPUT_DIRECTORY/"$when"_"$wh                                               y"_"$what".log
                else
                        if [ $(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log) -gt 0 ]
                        then
                                sleep 1
                        else
                                ps -ef | grep "portdaemon.pl" | grep -v grep | grep port | wc -l > $OUTPUT_DIRECTORY/"$whe                                               n"_"$why"_"$what".log
                        fi
                fi
        elif [ $when = post ]
        then
                ps -ef | grep "portdaemon.pl" | grep -v grep | grep port | wc -l > $OUTPUT_DIRECTORY/"$when"_"$why"_"$what                                               ".log
        else
                sleep 0
        fi
}

display_pre_post()
{
if [ $when = pre ]
     then
          if [ $what = asm ] || [ $what = lsnr ] || [ $what = portutil ]
          then
               if [ "$(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log)" = 0 ] || [ ! -s $OUTPUT_DIRECTORY/"$when"_"$why"                                               _"$what".log ]
               then
                    echo "PRE stop" $what "running " ":" "NO"                                | tee -a ${LOG}
               else
                    echo "PRE stop" $what "running " ":" $(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log) | tee -a ${LO                                               G}
               fi
          elif [ $what = crs ]
          then
               if [ "$(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log)" -lt 3 ]
               then
                    echo "PRE stop" $what "running " ":" "NO"                                | tee -a ${LOG}
               else
                    echo "PRE stop" $what "running " ":" "YES"                               | tee -a ${LOG}
               fi
          fi
elif [ $when = post ]
     then
          if [ $what = asm ] || [ $what = lsnr ] || [ $what = portutil ]
          then
               if [ "$(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log)" = 0 ] || [ ! -s $OUTPUT_DIRECTORY/"$when"_"$why"                                               _"$what".log ]
               then
                    echo "POST start" $what "running " ":" "NO"                                | tee -a ${LOG}
               else
                    echo "POST start" $what "running " ":" $(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log) | tee -a ${                                               LOG}
               fi
          elif [ $what = crs ]
          then
               if [ "$(cat $OUTPUT_DIRECTORY/"$when"_"$why"_"$what".log)" -lt 3 ]
               then
                    echo "POST start" $what "running " ":" "NO"                                | tee -a ${LOG}
               else
                    echo "POST start" $what "running " ":" "YES"                               | tee -a ${LOG}
               fi
          fi
fi
}

started_status()
{
    if [ $what = asm ] || [ $what = lsnr ] || [ $what = portutil ]
    then

        rm -f $OUTPUT_DIRECTORY/diff_file;         rm -f $OUTPUT_DIRECTORY/diff_1;         rm -f $OUTPUT_DIRECTORY/diff_2
        cat $OUTPUT_DIRECTORY/pre_stop_$what.log | sort > $OUTPUT_DIRECTORY/diff_1;
        cat  $OUTPUT_DIRECTORY/post_start_$what.log | sort > $OUTPUT_DIRECTORY/diff_2;
        diff -b -i -w $OUTPUT_DIRECTORY/diff_1 $OUTPUT_DIRECTORY/diff_2 > $OUTPUT_DIRECTORY/diff_file
        #chown oracle:dba $OUTPUT_DIRECTORY/diff_file
        chmod 777 $OUTPUT_DIRECTORY/diff_file

        if [ ! -s $OUTPUT_DIRECTORY/diff_file ]
        then
                echo "yes" > $OUTPUT_DIRECTORY/started_$what.log                        | tee -a ${LOG}
                echo "OK : pre-post status matches for $what"
        else
                echo "no" > $OUTPUT_DIRECTORY/started_$what.log                        | tee -a ${LOG}
                echo "ATTENTION : $what didn't start. Please check"
        fi
    elif [ $what = crs ]
    then
        if [ "$(cat $OUTPUT_DIRECTORY/post_start_"$what".log)" -gt 5 ] || [ ! -s $OUTPUT_DIRECTORY/post_start_"$what".log                                                ]
        then
                echo "yes" > $OUTPUT_DIRECTORY/started_$what.log
                echo "OK : pre-post status matches for $what"
        else
                echo "no" > $OUTPUT_DIRECTORY/started_$what.log
                echo "ATTENTION : $what didn't start. Please check"
        fi
    fi
}


start_esm()
{
        if [ "$(cat $OUTPUT_DIRECTORY/pre_stop_esm.log)" = 0 ]
        then
                echo "ESM Agent was down even before the activity, so didn't bring it up"        >> ${LOG}; echo -e "\n" >                                               > ${LOG}
        elif [ "$(ps -ef | grep esm | grep -v grep | wc -l)" != 0 ]
        then
                echo "ESM Agent is already running"                                               >> ${LOG}; echo -e "\n"                                                >> ${LOG}
        else
                /etc/init.d/esmrc start                                  >/dev/null;
                sleep 2
        fi
}

start_dma()
{
        if [ "$(cat $OUTPUT_DIRECTORY/pre_stop_dma.log)" = 0 ]
        then
                echo "DMA Agent was down even before the activity, so didn't bring it up"        >> ${LOG}; echo -e "\n" >                                               > ${LOG}
        elif [ "$(ps -ef | grep opsware | grep -v grep | wc -l)" != 0 ]
        then
                echo "DMA Agent is already running"                                               >> ${LOG}; echo -e "\n"                                                >> ${LOG}
        else
                /etc/init.d/opsware-agent start                                  >/dev/null;
                sleep 15
        fi
}

start_has()
{
                ORACLE_SID=`cat /etc/oratab | awk 'BEGIN{FS=":"}{print $1}' | grep ASM | grep -v "#"`
                export ORAENV_ASK=NO                                                    >/dev/null;
                . oraenv                                                                >/dev/null
                        crsctl start has                                                        >>  ${LOG} ; echo "" >> ${                                               LOG}

        sleep 10
                if [ "$(crsctl check has | grep online | wc -l)" -ne 0 ]
                then
                        echo "Clusterware Services started"               >> ${LOG}; echo "" >> ${LOG}
                        crsctl enable has                                       >/dev/null
                        crs_en_dis=`cat /etc/oracle/scls_scr/$(echo $(hostname) | cut -d. -f1)/root/crsstart | awk 'BEGIN{                                               FS=":"}{print $1}'`
                        echo "HAS status : $crs_en_dis"                                         >> ${LOG}; echo "" >> ${LO                                               G}
                        echo "HAS is now enabled"                                              >> ${LOG}
                else
                        echo "ATTENTION : Clusterware services do not appear to have started properly" >>  ${LOG} ; echo "                                               " >> ${LOG}
                        echo "ATTENTION : CRS not enabled"                                     >>  ${LOG} ; echo "" >> ${L                                               OG}
                fi
}


start_crs()
{
                ORACLE_SID=`cat /etc/oratab | awk 'BEGIN{FS=":"}{print $1}' | grep CRS | grep -v "#"`
                export ORAENV_ASK=NO                                                    >/dev/null;
                . oraenv                                                                >/dev/null
                        crsctl start crs                                                        >>  ${LOG} ; echo "" >> ${                                               LOG}

        sleep 10
                if [ "$(crsctl check crs | grep online || crsctl check crs | grep healthy | wc -l)" -ne 0 ]
                then
                        echo "Clusterware Services started"               >> ${LOG}; echo "" >> ${LOG}
                        crsctl enable crs
                        crs_en_dis=`cat /etc/oracle/scls_scr/$(echo $(hostname) | cut -d. -f1)/root/crsstart | awk 'BEGIN{                                               FS=":"}{print $1}'`
                        echo "CRS status : $crs_en_dis"                                         >> ${LOG}; echo "" >> ${LO                                               G}
                        echo "CRS is now enabled"                                              >> ${LOG}
                else
                        echo "ATTENTION : Clusterware services do not appear to have started properly" >>  ${LOG} ; echo "                                               " >> ${LOG}
                        echo "ATTENTION : CRS not enabled"                                     >>  ${LOG} ; echo "" >> ${L                                               OG}
        fi
}

start_portutil()
{
# Initialise any previous Portdaemon start files
if [[ -f $OUTPUT_DIRECTORY/Portdaemon_start.sh ]]; then
   rm $OUTPUT_DIRECTORY/Portdaemon_start.sh
fi

if [[ -f $OUTPUT_DIRECTORY/Portdaemon_config.txt ]]; then

  cat $OUTPUT_DIRECTORY/Portdaemon_config.txt | while read PORT_CONFIG
  do
           PORT_USER=`echo $PORT_CONFIG | cut -d":" -f1 -s`
           PORT_PROC=`echo $PORT_CONFIG | cut -d":" -f2 -s`
           PORT_DIR=`dirname $PORT_PROC`
           PORT_NUMB=`echo $PORT_CONFIG | cut -d":" -f3 -s`

           # Gen Command for starting Portdaemon for this POrt ..
           echo "su - $PORT_USER -c 'sh ${PORT_DIR}/start_port_daemon ${PORT_NUMB}'" >> $OUTPUT_DIRECTORY/Portdaemon_start                                               .sh
  done

  # Loop through and stop all detected Portdaemon(s)
  if [[ -f $OUTPUT_DIRECTORY/Portdaemon_start.sh ]]; then
     chmod 744 $OUTPUT_DIRECTORY/Portdaemon_start.sh
     sh $OUTPUT_DIRECTORY/Portdaemon_start.sh > /dev/null 2>&1
  fi

else
    echo "Portdaemon services not detected on this host"               >> ${LOG}; echo "" >> ${LOG}
fi
}

enable_standalone_autostart()
{
DDMMYY=`date '+%m%d%y_%H:%M:%S'`
if [[ -f /etc/oratab_bl_backup ]]; then
   if [[ -f /etc/oratab ]]; then
      oracred=`ls -l /etc/oratab | awk '{ print $3":"$4 }'`
      mv /etc/oratab $OUTPUT_DIRECTORY/oratab_no_autostart_${DDMMYY}
   fi
   mv /etc/oratab_bl_backup /etc/oratab
   chown $oracred /etc/oratab
fi

if [[ -f /etc/lsnrtab_bl_backup ]]; then
   if [[ -f /etc/lsnrtab ]]; then
      oracred=`ls -l /etc/lsnrtab | awk '{ print $3":"$4 }'`
      mv /etc/lsnrtab $OUTPUT_DIRECTORY/lsnrtab_no_autostart_${DDMMYY}
   fi
   mv /etc/lsnrtab_bl_backup /etc/lsnrtab
   chown $oracred /etc/lsnrtab
fi
}

start_rh7_dbserv()
{
   if [[ -f /etc/redhat-release ]] && [[ "$RH_VER" == 7.* ]]; then
         export RH7_ORASTR=`systemctl status oracle_db.service | grep "Active: " | awk '{ print $1,$2,$3 }'`
         if [[ "${RH7_ORASTR}" != "Active: active (running)" ]]; then
            echo "" >> $LOG
            echo "########################################################################" >> $LOG
            echo "Note: RedHat7 service: oracle_db.service will be started here ... " >> $LOG
            echo "" >> $LOG
            echo "PRE Startup Status: " >> $LOG
            systemctl status oracle_db.service | grep "Active: "   >> $LOG
            echo "" >> $LOG
            echo "    => Attempting to Start it ..." >> $LOG
            echo "" >> $LOG
            systemctl start oracle_db.service >> $LOG
            sleep 2
            echo "POST Startup Status: " >> $LOG
            systemctl status oracle_db.service | grep "Active: "   >> $LOG
            echo "########################################################################" >> $LOG
            echo "" >> $LOG
         else
            echo "" >> $LOG
            echo "########################################################################" >> $LOG
            echo "NO ACTION TAKEN: RedHat7 service: oracle_db.service was already found to be in ACTIVE state " >> $LOG
            systemctl status oracle_db.service | grep "Active: "   >> $LOG
            echo "########################################################################" >> $LOG
            echo "" >> $LOG
         fi
   fi
}

# Remove the temporary log file
        rm -f $OUTPUT_DIRECTORY/start_crs.log

# Assign a new log file
        LOG=$OUTPUT_DIRECTORY/start_crs.log;                                      echo "" >> ${LOG};

#INSERT INTO REPOSITORY DATABASE


#ASSIGNING THE OUTPUT VARIABLES
assign_log()
{
if [ -s $OUTPUT_DIRECTORY/post_start_crs.log ]
then
        crs_output=`cat $OUTPUT_DIRECTORY/post_start_crs.log`
else
        crs_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_asm.log ]
then
        asm_output=`cat $OUTPUT_DIRECTORY/post_start_asm.log`
else
        asm_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_esm.log ]
then
        esm_agent_output=`cat $OUTPUT_DIRECTORY/post_start_esm.log`
else
        esm_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dma.log ]
then
        dma_agent_output=`cat $OUTPUT_DIRECTORY/post_start_dma.log`
else
        dma_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_lsnr.log ]
then
        listener_output=`cat $OUTPUT_DIRECTORY/post_start_lsnr.log`
else
        listener_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbinst.log ]
then
        db_instance_output=`cat $OUTPUT_DIRECTORY/post_start_dbinst.log`
else
        db_instance_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbopen.log ]
then
        db_open_output=`cat $OUTPUT_DIRECTORY/post_start_dbopen.log`
else
        db_open_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbopenro.log ]
then
        db_openro_output=`cat $OUTPUT_DIRECTORY/post_start_dbopenro.log`
else
        db_openro_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbmount.log ]
then
        db_mount_output=`cat $OUTPUT_DIRECTORY/post_start_dbmount.log`
else
        db_mount_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_dbservices.log ]
then
        service_alignment_output=`cat $OUTPUT_DIRECTORY/post_start_dbservices.log`
else
        service_alignment_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_mrp.log ]
then
        mrp_output=`cat $OUTPUT_DIRECTORY/post_start_mrp.log`
else
        mrp_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_agent.log ]
then
        oem_agent_output=`cat $OUTPUT_DIRECTORY/post_start_agent.log`
else
        oem_agent_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_portutil.log ]
then
        port_utility_output=`cat $OUTPUT_DIRECTORY/post_start_portutil.log`
else
        port_utility_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_fgl.log ]
then
        foglight_output=`cat $OUTPUT_DIRECTORY/post_start_fgl.log`
else
        foglight_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_osw.log ]
then
        os_watcher_output=`cat $OUTPUT_DIRECTORY/post_start_osw.log`
else
        os_watcher_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/post_start_usb.log ]
then
        usb_output=`cat $OUTPUT_DIRECTORY/post_start_usb.log`
else
        usb_output="no_status"
fi

if [ -s /oracle/dba/foglight/fgl_5/bin/fglam ]
then
        fglam_output=`/oracle/dba/foglight/fgl_5/bin/fglam --check-connection`
else
        fglam_output="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/server_type.log ]
then
                instance_type=`cat $OUTPUT_DIRECTORY/server_type.log`
else
                instance_type="no_status"
fi

if [ -s $OUTPUT_DIRECTORY/version_executed_status.log ]
then
                script_version=`cat $OUTPUT_DIRECTORY/version_executed_status.log`
else
                script_version="no_status"
fi
}


insert_repdb()
{
        for what in dma esm lsnr asm crs
                do
                        if [ -f $OUTPUT_DIRECTORY/stopped_$what.log ]
                        then
                                if [ "$(cat $OUTPUT_DIRECTORY/stopped_$what.log)" = yes ]
                                then
                                        eval var_$what="success"
                                fi
                                if [ "$(cat $OUTPUT_DIRECTORY/stopped_$what.log)" = no ]
                                then
                                        eval var_$what="failure"
                                fi
                        else
                                        eval var_$what="no_status"
                        fi
                done


        if [[ $server_type = "rac_10g" ]]
        then
                var_lsnr="na"
                var_asm="na"
        elif [[ $server_type = "norac_asm10" ]] || [[ $server_type = "norac_noasm" ]]
        then
                var_dma="na"
                var_esm="na"
                var_lsnr="na"
                var_asm="na"
                var_crs="na"

        fi

        for what in fgl osw agent portutil mrp dbinst
                do
                    eval var_$what="na"
                done




#PREPARING THE INSERT STATEMENT

if [ $(cat /etc/oratab | grep oracle | grep -v -i asm | grep -v -i crs | grep -v -i oem | grep -v "#" | awk 'BEGIN{FS=":"}                                               {print $1}' | head -1 | wc -l) = 1 ]
then
export ORACLE_SID=`cat /etc/oratab | grep oracle | grep -v -i asm | grep -v -i crs | grep -v -i oem | grep -v "#" | awk 'B                                               EGIN{FS=":"}{print $1}' | head -1`
        export ORAENV_ASK=NO                                                    >/dev/null
        . oraenv                                                                >/dev/null
        $ORACLE_HOME/bin/sqlplus -s OSH_SEH/dbaas_operations1@SUNDVD94 << EOFSTATUS
                set echo off;
                set head off;
                set feedback off;
insert into OSH_SEH.dbss_log (DBSS_ID,
SCRIPT_VERSION,
INSTANCE_TYPE,
STOP_OR_START,
CRS_OR_DB,
SERVER_NAME,
SERVER_TIMESTAMP,
CRS,
ASM,
LISTENER,
DB_INSTANCE,
MRP_PROCESS,
ESM_AGENT,
DMA_AGENT,
OEM_AGENT,
PORT_UTILITY,
FOGLIGHT,
OS_WATCHER,
SENT_MAIL,
CRS_OUTPUT,
ASM_OUTPUT,
LISTENER_OUTPUT,
DB_INSTANCE_OUTPUT,
DB_OPEN_OUTPUT,
DB_OPENRO_OUTPUT,
DB_MOUNT_OUTPUT,
SERVICE_ALIGNMENT_OUTPUT,
MRP_OUTPUT,
ESM_AGENT_OUTPUT,
DMA_AGENT_OUTPUT,
OEM_AGENT_OUTPUT,
PORT_UTILITY_OUTPUT,
FOGLIGHT_OUTPUT,
OS_WATCHER_OUTPUT,
USB_OUTPUT,
FGLAM_OUTPUT)
values (DBSS_LOG_SEQ.nextval,
'$script_version',
'$instance_type',
'start',
'crs',
'$(hostname -f)',
'$timevalue',
'$var_crs',
'$var_asm',
'$var_lsnr',
'$var_dbinst',
'$var_mrp',
'$var_esm',
'$var_dma',
'$var_agent',
'$var_portutil',
'$var_fgl',
'$var_osw',
0,
'$crs_output',
'$asm_output',
'$listener_output',
'$db_instance_output',
'$db_open_output',
'$db_openro_output',
'$db_mount_output',
'$service_alignment_output',
'$mrp_output',
'$esm_agent_output',
'$dma_agent_output',
'$oem_agent_output',
'$port_utility_output',
'$foglight_output',
'$os_watcher_output',
'$usb_output',
'$fglam_output');
commit;
EOFSTATUS
fi

}


case $server_type in
        "rac_12c")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 12c CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo ""                                                >> ${LOG}

                if [ "$(ps -ef | grep pmon | grep -v grep |grep -v "+ASM" |grep -v "\-MGMTDB" | grep -v onitor |  wc -l)"                                                -eq 0 ]
                then
                        why=stop;
                        for what in esm dma asm lsnr crs portutil
                        do
                                when=pre; collect_$what; display_pre_post
                        done

                                echo "";
                                echo "Starting HAS"; echo "";
                                start_has
                                echo " "
                                echo "Starting Any Portdaemon Services if any "; echo "";
                                start_portutil



                             if [[ $OS != "AIX" ]]; then
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                for i in {1..4}
                                do
                                        echo -n -e '  '
                                        for i in {1..60}
                                        do
                                                echo -n ".";sleep 1;
                                        done
                                        echo "";
                                done
                             else
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                i=1
                                while [[ $i -le 120 ]] ; do
                                      echo ".\c";sleep 1;
                                      i=$(expr $i + 1)
                                done

                                echo ""

                                i=1
                                while [[ $i -le 120 ]] ; do
                                echo ".\c";sleep 1;
                                i=$(expr $i + 1)
                                done
                             fi

                        start_esm
                        start_dma

                        why=start;
                        for what in esm dma asm lsnr crs portutil
                        do
                                when=post; collect_$what; display_pre_post
                        done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                        for what in esm dma lsnr asm crs portutil
                        do
                                started_status
                        done

                        echo ""

                        #Avoid error for SCAN lsnr
                        if [[ ! -f $OUTPUT_DIRECTORY/started_lsnr.log ]]; then
                           touch $OUTPUT_DIRECTORY/started_lsnr.log
                        fi

                        if [ "$(cat $OUTPUT_DIRECTORY/started_asm.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_lsnr                                               .log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_crs.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_portutil.log)                                               " = yes ]
                        then
                                echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                                echo ""
                        # Deal with lsnr check seperately due to SCAN lsnr
                        elif [ "$(cat $OUTPUT_DIRECTORY/started_asm.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_ls                                               nr.log)" != yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_crs.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_portutil.l                                               og)" = yes ]
                        then
                                echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                                echo ""

                        else
                                echo "0" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "ATTENTION : Some services didn't start. Please check"    | tee -a ${LOG}
                                echo ""
                        fi

                else
                        echo "ATTENTION : CRS appears to be running already. Please check."       | tee -a ${LOG}
                        echo ""                                                                    | tee -a ${LOG}
                fi
                        assign_log
                        insert_repdb
                echo "**************************************************"

                ;;
        "rac_11g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 11g CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo ""                                                >> ${LOG}

                if [ "$(ps -ef | grep pmon | grep -v grep |grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor |  wc -l)"                                                -eq 0 ]
                then
                        why=stop;
                        for what in esm dma asm lsnr crs portutil
                        do
                                when=pre; collect_$what; display_pre_post
                        done

                                echo "";
                                echo "Starting HAS"; echo "";
                                start_has
                                echo " "
                                echo "Starting Any Portdaemon Services if any "; echo "";
                                start_portutil



                             if [[ $OS != "AIX" ]]; then
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                for i in {1..4}
                                do
                                        echo -n -e '  '
                                        for i in {1..60}
                                        do
                                                echo -n ".";sleep 1;
                                        done
                                        echo "";
                                done
                             else
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                i=1
                                while [[ $i -le 120 ]] ; do
                                      echo ".\c";sleep 1;
                                      i=$(expr $i + 1)
                                done

                                echo ""

                                i=1
                                while [[ $i -le 120 ]] ; do
                                echo ".\c";sleep 1;
                                i=$(expr $i + 1)
                                done
                             fi

                        start_esm
                        start_dma

                        why=start;
                        for what in esm dma asm lsnr crs portutil
                        do
                                when=post; collect_$what; display_pre_post
                        done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                        for what in esm dma asm crs portutil
                        do
                                started_status
                        done

                        #Avoid error for SCAN lsnr
                        if [[ ! -f $OUTPUT_DIRECTORY/started_lsnr.log ]]; then
                           touch $OUTPUT_DIRECTORY/started_lsnr.log
                        fi

                        echo ""
                        if [ "$(cat $OUTPUT_DIRECTORY/started_asm.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_lsnr                                               .log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_crs.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_portutil.log)                                               " = yes ]
                        then
                                echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                                echo ""
                        # Deal with lsnr check seperately due to 11g SCAN
                        elif [ "$(cat $OUTPUT_DIRECTORY/started_asm.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_ls                                               nr.log)" != yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_crs.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_portutil.l                                               og)" = yes ]
                        then
                                echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                                echo ""

                        else
                                echo "0" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "ATTENTION : Some services didn't start. Please check"    | tee -a ${LOG}
                                echo ""
                        fi

                else
                        echo "ATTENTION : CRS appears to be running already. Please check."       | tee -a ${LOG}
                        echo ""                                                                         | tee -a ${LOG}

                fi
                        assign_log
                        insert_repdb
                echo "**************************************************"

                ;;
        "rac_10g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "---------------------------> THIS IS A 10g CLUSTERWARE SYSTEM <------------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo ""                                                >> ${LOG}
                if [ "$(ps -ef | grep pmon | grep -v grep |grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor |  wc -l)"                                                -eq 0 ]
                then
                        why=stop;
                        for what in esm dma crs portutil
                        do
                                when=pre; collect_$what; display_pre_post
                        done

                                echo "";
                                echo "Starting CRS"; echo "";
                                start_crs
                                echo " "
                                echo "Starting Any Portdaemon Services if any "; echo "";
                                start_portutil



                             if [[ $OS != "AIX" ]]; then
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                for i in {1..4}
                                do
                                        echo -n -e '  '
                                        for i in {1..60}
                                        do
                                                echo -n ".";sleep 1;
                                        done
                                        echo "";
                                done
                             else
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                i=1
                                while [[ $i -le 120 ]] ; do
                                      echo ".\c";sleep 1;
                                      i=$(expr $i + 1)
                                done

                                echo ""

                                i=1
                                while [[ $i -le 120 ]] ; do
                                echo ".\c";sleep 1;
                                i=$(expr $i + 1)
                                done
                             fi

                        start_esm
                        start_dma

                        why=start;
                        for what in esm dma crs portutil
                        do
                                when=post; collect_$what; display_pre_post
                        done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                        for what in esm dma crs portutil
                        do
                                started_status
                        done

                        echo ""
                        if [ "$(cat $OUTPUT_DIRECTORY/started_crs.log)" = yes ]
                        then
                                echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                                echo ""
                        else
                                echo "0" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "ATTENTION : Some services didn't start. Please check"    | tee -a ${LOG}
                                echo ""
                        fi
                else
                echo "ATTENTION : CRS appears to be running already. Please check."       | tee -a ${LOG}
                        echo ""                                                                    | tee -a ${LOG}
                fi
                        assign_log
                        insert_repdb
                echo "**************************************************"
                ;;
        "norac_asm12c")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 12c <----------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo ""                                                >> ${LOG}
                if [ "$(ps -ef | grep pmon | grep -v grep |grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor |  wc -l)"                                                -eq 0 ]
                then
                        why=stop;
                        for what in esm dma asm lsnr crs portutil
                        do
                                when=pre; collect_$what; display_pre_post
                        done

                                echo "";
                                echo "Starting HAS"; echo "";
                                start_has
                                echo " "
                                echo "Starting Any Portdaemon Services if any "; echo "";
                                start_portutil



                             if [[ $OS != "AIX" ]]; then
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                for i in {1..4}
                                do
                                        echo -n -e '  '
                                        for i in {1..60}
                                        do
                                                echo -n ".";sleep 1;
                                        done
                                        echo "";
                                done
                             else
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                i=1
                                while [[ $i -le 120 ]] ; do
                                      echo ".\c";sleep 1;
                                      i=$(expr $i + 1)
                                done

                                echo ""

                                i=1
                                while [[ $i -le 120 ]] ; do
                                echo ".\c";sleep 1;
                                i=$(expr $i + 1)
                                done
                             fi

                        start_esm
                        start_dma

                        why=start;
                        for what in esm dma asm lsnr crs portutil
                        do
                                when=post; collect_$what; display_pre_post
                        done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                        for what in esm dma asm lsnr crs portutil
                        do
                                started_status
                        done

                        echo ""
                        if [ "$(cat $OUTPUT_DIRECTORY/started_asm.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_lsnr                                               .log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_crs.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_portutil.log)                                               " = yes ]
                        then
                                echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                                echo ""
                        else
                                echo "0" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "ATTENTION : Some services didn't start. Please check"    | tee -a ${LOG}
                                echo ""
                        fi
                else
                        echo "ATTENTION : CRS appears to be running already. Please check."       | tee -a ${LOG}
                        echo ""                                                                    | tee -a ${LOG}

                fi
                        assign_log
                        insert_repdb
                echo "**************************************************"
                ;;
        "norac_asm11g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 11g <----------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo ""                                                >> ${LOG}
                if [ "$(ps -ef | grep pmon | grep -v grep |grep -v "+ASM" | grep -v "\-MGMTDB" | grep -v onitor |  wc -l)"                                                -eq 0 ]
                then
                        why=stop;
                        for what in esm dma asm lsnr crs portutil
                        do
                                when=pre; collect_$what; display_pre_post
                        done

                                echo "";
                                echo "Starting HAS"; echo "";
                                start_has
                                echo " "
                                echo "Starting Any Portdaemon Services if any "; echo "";
                                start_portutil



                             if [[ $OS != "AIX" ]]; then
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                for i in {1..4}
                                do
                                        echo -n -e '  '
                                        for i in {1..60}
                                        do
                                                echo -n ".";sleep 1;
                                        done
                                        echo "";
                                done
                             else
                                echo "Waiting for 4 minutes to allow all the CRS processes to come up"
                                i=1
                                while [[ $i -le 120 ]] ; do
                                      echo ".\c";sleep 1;
                                      i=$(expr $i + 1)
                                done

                                echo ""

                                i=1
                                while [[ $i -le 120 ]] ; do
                                echo ".\c";sleep 1;
                                i=$(expr $i + 1)
                                done
                             fi

                        start_esm
                        start_dma

                        why=start;
                        for what in esm dma asm lsnr crs portutil
                        do
                                when=post; collect_$what; display_pre_post
                        done

                echo "      "

                echo "******************** SUMMARY ********************"
                echo ""

                        for what in esm dma asm lsnr crs portutil
                        do
                                started_status
                        done

                        echo ""
                        if [ "$(cat $OUTPUT_DIRECTORY/started_asm.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_lsnr                                               .log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_crs.log)" = yes ] && [ "$(cat $OUTPUT_DIRECTORY/started_portutil.log)                                               " = yes ]
                        then
                                echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                                echo ""
                        else
                                echo "0" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                                echo ""
                                echo "ATTENTION : Some services didn't start. Please check"    | tee -a ${LOG}
                                echo ""
                        fi
                else
                        echo "ATTENTION : CRS appears to be running already. Please check."       | tee -a ${LOG}
                        echo ""                                                                    | tee -a ${LOG}
                fi
                        assign_log
                        insert_repdb
                echo "**************************************************"
                ;;
        "norac_asm10g")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "-------------------------> THIS IS A NON-RAC SYSTEM BUT WITH ASM 10g <---------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo ""                                                >> ${LOG}
               echo " Checking the status of ESM & DMA agents"                   | tee -a ${LOG}; echo -e "\n" | tee -a ${                                               LOG}

                why=stop;
                for what in esm dma portutil
                do
                        when=pre; collect_$what; display_pre_post
                done

                        start_esm
                        start_dma
                        echo " "
                        echo "Starting Any Portdaemon Services if any "; echo "";
                        start_portutil

                why=start;
                for what in esm dma portutil
                do
                        when=post; collect_$what; display_pre_post
                done


                        echo -e ' \t ' "******************** SUMMARY ********************"
                        echo -e "\n"

                        for what in esm dma
                        do
                                started_status
                        done

                        echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                        echo -e "\n"
                        echo -e ' \t ' "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                        echo -e "\n"
                        assign_log
                        insert_repdb

                ;;
        "norac_noasm")
        echo "" ;
        echo "---------------------------------------------------------------------------------------"  >> ${LOG};
        echo "--------------------------> THIS IS A NON-RAC & NON-ASM SYSTEM <----------------------- "  >> ${LOG};
        echo "---------------------------------------------------------------------------------------"  >> ${LOG}; echo ""                                                >> ${LOG}
        echo " This script will check/start any Port daemons  and Enable Autostart, If RH7 System it will strat Oracle Ser                                               vice - otherwise it has no relevance to this server "               | tee -a ${LOG}; echo "" | tee -a ${LOG}

                        why=stop;
                        for what in esm dma portutil
                        do
                                when=pre; collect_$what; display_pre_post
                        done

                                echo " "
                                echo "";

                        start_esm
                        start_dma
                        echo " "
                        echo "Starting Any Portdaemon Services if any "; echo "";
                        start_portutil


                        why=start;
                        for what in esm dma portutil
                        do
                                when=post; collect_$what; display_pre_post
                        done

                        for what in esm dma
                        do
                                started_status
                        done

                        echo "";
                        echo "Enabling Auto-start for this standalone host  "; echo "";
                        enable_standalone_autostart
                        echo "Content of ORATAB on this host : "; echo "";
                        if [[ -f /etc/oratab ]]; then
                           echo "`cat /etc/oratab | grep -v "^#" | sort -u `"
                        fi
                        echo "";
                        echo "Content of LSNRTAB on this host : "; echo "";
                        if [[ -f /etc/lsnrtab ]]; then
                           echo "`cat /etc/lsnrtab | grep -v "^#" | sort -u `"
                        fi

                        if [[ "$RH_VER" == 7.* ]]; then
                           start_rh7_dbserv
                        fi
                        echo "";
                        echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                        echo ""
                        echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                        echo ""
                        assign_log
                        insert_repdb
                ;;
        *)
                echo "Invalid Selection"
esac

chmod 777 $OUTPUT_DIRECTORY/pre_stop*.log 1> /dev/null 2>&1
chmod 777 $OUTPUT_DIRECTORY/post_start*.log 1> /dev/null 2>&1
chmod 777 $OUTPUT_DIRECTORY/started*.log 1> /dev/null 2>&1
chmod 777 $OUTPUT_DIRECTORY/start_crs*.log 1> /dev/null 2>&1
chmod 777 $OUTPUT_DIRECTORY/bl_start*.log 1> /dev/null 2>&1

#chown oracle:dba $OUTPUT_DIRECTORY/pre_stop*.log 1> /dev/null 2>&1
#chown oracle:dba $OUTPUT_DIRECTORY/post_start*.log 1> /dev/null 2>&1
#chown oracle:dba $OUTPUT_DIRECTORY/started*.log 1> /dev/null 2>&1
#chown oracle:dba $OUTPUT_DIRECTORY/start_crs*.log 1> /dev/null 2>&1
#chown oracle:dba $OUTPUT_DIRECTORY/bl_start*.log 1> /dev/null 2>&1

if ls $OUTPUT_DIRECTORY/Portdaemon* 1> /dev/null 2>&1; then
   chmod 777 $OUTPUT_DIRECTORY/Portdaemon*
   #chown oracle:dba $OUTPUT_DIRECTORY/Portdaemon*
fi

filename=$(echo $(hostname) | cut -d. -f1)_$(date '+%m%d%Y_%H%M%S')
mv ${LOG} $OUTPUT_DIRECTORY/start_crs_$filename.log


echo "************************************************************************************************************";
echo "Please check the detailed CRS START report at $OUTPUT_DIRECTORY/start_crs_$filename.log"
echo "************************************************************************************************************";
echo ""
echo ""
                                                                                                        1419,1        Bot
                        echo "Content of LSNRTAB on this host : "; echo "";
                        if [[ -f /etc/lsnrtab ]]; then
                           echo "`cat /etc/lsnrtab | grep -v "^#" | sort -u `"
                        fi

                        if [[ "$RH_VER" == 7.* ]]; then
                           start_rh7_dbserv
                        fi
                        echo "";
                        echo "1" > $OUTPUT_DIRECTORY/bl_start_crs_flag.log
                        echo ""
                        echo "SUCCESS : Ready to move to next step"                   | tee -a ${LOG}
                        echo ""
                        assign_log
                        insert_repdb
                ;;
        *)
                echo "Invalid Selection"
esac

chmod 777 $OUTPUT_DIRECTORY/pre_stop*.log 1> /dev/null 2>&1
chmod 777 $OUTPUT_DIRECTORY/post_start*.log 1> /dev/null 2>&1
chmod 777 $OUTPUT_DIRECTORY/started*.log 1> /dev/null 2>&1
chmod 777 $OUTPUT_DIRECTORY/start_crs*.log 1> /dev/null 2>&1
chmod 777 $OUTPUT_DIRECTORY/bl_start*.log 1> /dev/null 2>&1

#chown oracle:dba $OUTPUT_DIRECTORY/pre_stop*.log 1> /dev/null 2>&1
#chown oracle:dba $OUTPUT_DIRECTORY/post_start*.log 1> /dev/null 2>&1
#chown oracle:dba $OUTPUT_DIRECTORY/started*.log 1> /dev/null 2>&1
#chown oracle:dba $OUTPUT_DIRECTORY/start_crs*.log 1> /dev/null 2>&1
#chown oracle:dba $OUTPUT_DIRECTORY/bl_start*.log 1> /dev/null 2>&1

if ls $OUTPUT_DIRECTORY/Portdaemon* 1> /dev/null 2>&1; then
   chmod 777 $OUTPUT_DIRECTORY/Portdaemon*
   #chown oracle:dba $OUTPUT_DIRECTORY/Portdaemon*
fi

filename=$(echo $(hostname) | cut -d. -f1)_$(date '+%m%d%Y_%H%M%S')
mv ${LOG} $OUTPUT_DIRECTORY/start_crs_$filename.log


echo "************************************************************************************************************";
echo "Please check the detailed CRS START report at $OUTPUT_DIRECTORY/start_crs_$filename.log"
echo "************************************************************************************************************";
echo ""
echo ""

Data Guard Internals

 

Meeting link

Oracle ACS Priority Support Webinar

Oracle Database release 18c New features

AUDIENCE
Exclusively, Oracle ACS Priority Support customers are invited to attend.

Upcoming Priority Support Webinar
On Friday June 29th, 2018 the Priority Support program office will host a Priority Support webinar on Oracle Database release 18c New features.

Conference details
Date: June 29, 2018
Time: 7:00 AM PT /10:00 AM ET
Audio dial in: +1-866-682-4770
Conference Code:  3547314
Pass code: 12345

If you need Global access numbers, please contact your TAM at least 24 hours in advance.

Use the above call details for the webinar session.  Please ignore any pop-ups you get with call details when you join the webinar.

-------------------------------------------------------
To join the online meeting click following link:
-------------------------------------------------------

When it's time, join the meeting

Meeting number:  592 086 160

"high watermark"

The database doesn't know what is on a block unless and until......

It goes to the block.

So, when you delete the information, the block is still "a block", it is just a block that once had active rows - but no longer does.

And when you full scan the table - we have to read all blocks that at any time contained data - because - they could contain data now. We won't know what is there until we read it.

Suppose you deleted all but ONE row - we have to look in every block (unless of course we use an index) to see if that row is on a given block.

<quote src=expert oracle database architecture>

High-water Mark

This is a term used with table segments stored in the database. If you envision a table, for example, as a 'flat' structure or as a series of blocks laid one after the other in a line from left to right, the high-water mark (HWM) would be the rightmost block that ever contained data, as illustrated in Figure 10-1.

+---- high water mark of newly created table
|
V
+--------------------------------------------------------+
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

      high water mark after inserting 10,000 rows
                                    |
                                    v
+--------------------------------------------------------+
|x |x |x |x |x |x |x |x |x |x |x |x |  |  |  |  |  |  |  |
|x |x |x |x |x |x |x |x |x |x |x |x |  |  |  |  |  |  |  |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+


      high water mark after inserting 10,000 rows
                                    |
                                    v
+--------------------------------------------------------+
|x |x |x |x |x |x |x |  |  |  |  |  |  |  |  |  |  |  |  |
|x |x |x |x |x |x |x |  |  |  |  |  |  |  |  |  |  |  |  |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

Figure 10-1. Depiction of an HWM

Figure 10-1 shows that the HWM starts at the first block of a newly created table. As data is placed into the table over time and more blocks get used, the HWM rises. If we delete some (or even all) of the rows in the table, we might have many blocks that no longer contain data, but they are still under the HWM, and they will remain under the HWM until the object is rebuilt, truncated, or shrunk (shrinking of a segment is a new Oracle 10g feature that is supported only if the segment is in an ASSM tablespace).

The HWM is relevant since Oracle will scan all blocks under the HWM, even when they contain no data, during a full scan. This will impact the performance of a full scan¿especially if most of the blocks under the HWM are empty. To see this, just create a table with 1,000,000 rows (or create any table with a large number of rows), and then execute a SELECT COUNT(*) from this table. Now, DELETE every row in it and you will find that the SELECT COUNT(*) takes just as long (or longer, if you need to clean out the block! Refer to the 'Block Cleanout' section of Chapter 9) to count 0 rows as it did to count 1,000,000. This is because Oracle is busy reading all of the blocks below the HWM to see if they contain data. You should compare this to what happens if you used TRUNCATE on the table instead of deleting each individual row. TRUNCATE will reset the HWM of a table back to 'zero' and will truncate the associated indexes on the table as well. If you plan on deleting every row in a table, TRUNCATE¿if it can be used¿would be the method of choice for this reason.

In an MSSM tablespace, segments have a definite HWM. In an ASSM tablespace, however, there is an HWM and a low HWM. In MSSM, when the HWM is advanced (e.g., as rows are inserted), all of the blocks are formatted and valid, and Oracle can read them safely. With ASSM, however, when the HWM is advanced Oracle doesn¿t format all of the blocks immediately¿they are only formatted and made safe to read upon their first use. So, when full scanning a segment, we have to know if the blocks to be read are 'safe' or unformatted (meaning they contain nothing of interest and we do not process them). To make it so that not every block in the table need go through this safe/not safe check, Oracle maintains a low HWM and a HWM. Oracle will full scan the table up to the HWM¿and for all of the blocks below the low HWM, it will just read and process them. For blocks between the 'low HWM' and the HWM, it must be more careful and refer to the ASSM bitmap information used to manage these blocks in order to see which of them it should read and which it should just ignore.

GoldenGate Notes Doc

Links for drive space look

Drive Space

Maximum Performance  This protection mode provides the highest level of data protection that is possible without affecting the performance of a primary database. This is accomplished by allowing transactions to commit as soon as all redo data generated by those transactions has been written to the online log. Redo data is also written to one or more standby databases, but this is done asynchronously with respect to transaction commitment, so primary database performance is unaffected by delays in writing redo data to the standby database(s).  This protection mode offers slightly less data protection than maximum availability mode and has minimal impact on primary database performance.  This is the default protection mode.

This content is password protected. To view it please enter your password below:

Ready for Action?

LET'S GO!
Copyright 2024 IT Remote dot com
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram