#################################################################
# 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.