################################################################# # 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 ""
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.
Links for drive space look
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.