Wednesday, December 28, 2022

Goldengate 19c Switchover shell script

 #######################################################
#!/bin/ksh
#  Purpose          : This Script will do Actual GG Failover to another DC
#  NOTE            : Always SHOULD run from OLD Primary
#  Hard Coded   : Target server, Target DB
#  ASSUMING   : SSH works from Source to Target servers
#                          :  DB Switchover already completed
#  AUTHOR       : CB
########################################################
# Changes :
# CB - Aug 2018   - version 1 - Initial Draft
 
echo -e "\n*************************************"
echo  "DATE = `date`"
echo  "HOSTNAME = " `hostname`
echo -e "*************************************\n"

if [ "$2" = "" ]; then
  echo " "
  echo -e "Syntax: $0 <DB name>  <New Prod Server (node 1 ONLY)> \n"
  exit 1
fi

DBTGT=`echo $1 | tr "[:upper:]" "[:lower:]"`
export GG_HOME=/goldengate/home
export GG_DBA_DIR=/goldengate/SCRITPS/
TRG_DB=<TARGET_DB_NAME>
TARGET_SERVER=`$GG_DBA_DIR/GET_HOST.sh $TRG_DB`
SWITCH_TO=`echo $2 | tr "[:upper:]" "[:lower:]"`
#DBTAIL=`echo $DBTGT |awk '{print substr($0,3)}'`
#echo "DBTAIL :" $DBTAIL
#echo "DBTGT : " $DBTGT
SOURCE_SERVER=`hostname`
TODAY=`date '+%b%d%y'`
#END_MOD="\e[0m"
# Checking logic for NODE1 input because my mgr always runs on node1
if [[ "${SWITCH_TO:0:6}" == "server_name" || "${SWITCH_TO:0:6}" == "server_name" ]]; then
echo -e "\n Starting Switchover of  ${DBTGT} to ${SWITCH_TO}  ..........  \n"
else
echo -e "\n Entered Server name is NOT a PROD NODE 1 RAC server \n"
exit 1
fi

ORAENV_ASK=NO ; export ORAENV_ASK; export ORACLE_SID=$DBTGT
. oraenv $ORACLE_SID
 
check_prompt_3()
{
while true
do
  # (1) prompt and read command line argument
  read -p "Do you want to proceed ...?? " answer3
  # (2) handle the input we were given
  case $answer3 in
   [yY]* )
           echo -e "\nEntered YES, Continuing script........\n"
           break;;
   [nN]* ) echo -e "\nEntered NO ........"
           echo -e "\nexiting script ........\n"
           exit;;
   * )     echo "Dude, just enter Y or N, please.";;
  esac
done
}
GG_INFO () {
$GG_HOME/ggsci -s <<EOF
info all
exit
EOF
}
GG_PROCESS () {
$GG_HOME/ggsci -s <<EOF
info ${PROCESS_NAME}
exit
EOF
}
STOP_EXTRACT () {
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/spool_EXT.log
info all
exit
EOF
cat ${GG_DBA_DIR}/spool_EXT.log | egrep 'EXTRACT' | grep -i E$DBTGT| tr ":" " " | while read LINE
do
  case $LINE in
    *)
    PROCESS_TYPE=`echo $LINE | awk -F" " '{print $1}'`
    PROCESS_STATUS=`echo $LINE | awk -F" " '{print $2}'`
    PROCESS_NAME=`echo $LINE | awk -F" " '{print $3}'`
if [ "$PROCESS_TYPE" != "MANAGER" ]
  then
    if [ "$PROCESS_STATUS" == "RUNNING" ]
       then
#Making sure Only Extracts should be STOPPED NOT PUMP
PUMP_CHAR=`echo $PROCESS_NAME |awk '{print substr($0,1,1)}'`
#echo -e "\nPUMP_CHAR = " $PUMP_CHAR
      if [[ "$PUMP_CHAR" != "P" ]]; then
        echo -e "\n  *******************************************"
        echo -e "  Executing for $PROCESS_TYPE :  $PROCESS_NAME "
        echo -e "  ********************************************\n"
        echo -e "STOPPING EXTRACT $PROCESS_NAME ........\n"
$GG_HOME/ggsci <<EOF
STOP $PROCESS_NAME
sh sleep 15
info $PROCESS_NAME
sh echo -e "\ninfo ${PROCESS_NAME} SHOWCH"
info ${PROCESS_NAME} SHOWCH
EOF
       fi
  else
     echo -e "\n   *******************************************"
     echo  "    EXTRACT ${PROCESS_NAME} NOT RUNNING......."
     echo -e "   *******************************************\n"
     GG_PROCESS;
    fi
if [[ -f ${GG_DBA_DIR}/EXT_SHOWCH.txt ]]; then
rm ${GG_DBA_DIR}/EXT_SHOWCH.txt
fi
touch ${GG_DBA_DIR}/EXT_SHOWCH.txt
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/EXT_SHOWCH.txt
info ${PROCESS_NAME} SHOWCH
exit
EOF
EXT_SEQ_NO=`grep -i "Sequence #" ${GG_DBA_DIR}/EXT_SHOWCH.txt|awk -F" " '{print $3}'`
EXT_RBA_NO=`grep -i "RBA" ${GG_DBA_DIR}/EXT_SHOWCH.txt|awk -F" " '{print $2}'`
   echo -e "\n\n          *************************************************"
   echo -e "           Extract STOPPED at SEQ No. =" ${EXT_SEQ_NO} ", RBA No. ="  ${EXT_RBA_NO}
   echo -e "          **************************************************\n"
if [[ -f ${GG_DBA_DIR}/EXT_SHOWCH.txt ]]; then
rm ${GG_DBA_DIR}/EXT_SHOWCH.txt
fi
 fi
esac
done
if [[ -f ${GG_DBA_DIR}/spool_EXT.log ]]; then
rm ${GG_DBA_DIR}/spool_EXT.log
fi
}


STOP_PUMP () {
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/spool_PUMP.log
info all
exit
EOF
#DB_TYPE=$DBTGT
DB_TYPE=`echo ${DBTGT} |awk '{print substr($0,1,2)}'`
echo -e "\nDB_TYPE = " $DB_TYPE
cat ${GG_DBA_DIR}/spool_PUMP.log | egrep 'EXTRACT' | grep -i P${DBTGT}| tr ":" " " | while read LINE2
do
  case $LINE2 in
    *)
    PROCESS_TYPE=`echo $LINE2 | awk -F" " '{print $1}'`
    PROCESS_STATUS=`echo $LINE2 | awk -F" " '{print $2}'`
    PROCESS_NAME=`echo $LINE2 | awk -F" " '{print $3}'`
if [ "$PROCESS_TYPE" != "MANAGER" ]
  then
    if [ "$PROCESS_STATUS" == "RUNNING" ]
       then
#Making sure Only Extracts should be STOPPED NOT PUMP
PUMP_CHAR=`echo $PROCESS_NAME |awk '{print substr($0,1,1)}'`
#echo -e "\nPUMP_CHAR = " $PUMP_CHAR
      if [[ "$PUMP_CHAR" == "P" ]]; then
echo -e "\nChecking .......SEND ${PROCESS_NAME} LOGEND"
send_pump_fn ()
{
$GG_HOME/ggsci <<EOF
SEND P${DB_TYPE}* LOGEND
EXIT
EOF
}
if [[ -f ${GG_DBA_DIR}/READ_SEND_PUMP ]]; then
rm ${GG_DBA_DIR}/READ_SEND_PUMP
fi
if [[ -f ${GG_DBA_DIR}/send_pump.tmp ]]; then
rm ${GG_DBA_DIR}/send_pump.tmp
fi
touch ${GG_DBA_DIR}/READ_SEND_PUMP
touch ${GG_DBA_DIR}/send_pump.tmp
until [ -s ${GG_DBA_DIR}/READ_SEND_PUMP ]
  do
      send_pump_fn > ${GG_DBA_DIR}/send_pump.tmp
      grep -i YES ${GG_DBA_DIR}/send_pump.tmp > ${GG_DBA_DIR}/READ_SEND_PUMP
         sleep 5
      echo -e "\nWaiting for Pump to get .......YES"
  done
echo -e "\n ******    SEND Pump STATUS ==>  YES and it processed all trail records  ******"
echo -e "\n  ---------- [ SEND PUMP Output  ] ------------"
echo -e "  *********************************************\n"
cat ${GG_DBA_DIR}/send_pump.tmp
echo -e "\n  ********************************************\n"
echo -e "\nSTOPPING PUMP $PROCESS_NAME Process ............\n"
$GG_HOME/ggsci <<EOF
SEND $PROCESS_NAME STATUS
STOP $PROCESS_NAME
sh sleep 5
info $PROCESS_NAME
EOF
fi
   else
   echo -e "\n  ****************************"
   echo -e "  PUMP $PROCESS_NAME NOT running"
   echo -e "  *****************************\n"
    fi
fi
esac
done
if [[ -f ${GG_DBA_DIR}/spool_PUMP.log ]]; then
rm ${GG_DBA_DIR}/spool_PUMP.log
fi
}
###   MAIN    ####
GG_INFO;
STOP_EXTRACT;
GG_INFO;
#check_prompt_3
STOP_PUMP;
GG_INFO;
#check_prompt_3
$GG_HOME/ggsci <<EOF > EXT_TRAIL
info EXTTRAIL *${DBTGT}*
EXIT
EOF

EXT_TRAIL_PATH=`grep -i "SRC" EXT_TRAIL |awk -F" " '{print $3}' `
echo "   EXT_TRAIL_PATH=" $EXT_TRAIL_PATH
PUMP_TRAIL_PATH=`grep -i TRG EXT_TRAIL |awk -F" " '{print $3}'`
echo "   PUMP_TRAIL_PATH =" $PUMP_TRAIL_PATH
OLD_REP_SEQNO=`grep  "Seqno:" EXT_TRAIL |awk -F" " '{print $2}' |tail -1`
if [[ -f ${GG_DBA_DIR}/READ_SEND_PUMP ]]; then
rm ${GG_DBA_DIR}/READ_SEND_PUMP
fi
if [[ -f ${GG_DBA_DIR}/send_pump.tmp ]]; then
rm ${GG_DBA_DIR}/send_pump.tmp
fi
if [[ -f ${GG_DBA_DIR}/EXT_TRAIL ]]; then
rm ${GG_DBA_DIR}/EXT_TRAIL
fi
echo -e "\nChecking manager........\n"
$GG_HOME/ggsci <<EOF
sh echo "info mgr"
info Mgr
EXIT
EOF
echo -e "\n\n    ================[   Current SOURCE `hostname -s` Trail files  ]================== "
ls -lrth ${EXT_TRAIL_PATH}* | tail
## TARGET REPLICAT Activities
#echo -e "\n##### ---------------------------[ START NEW SSH ]------------------------########"
echo -e "###############################################################################################"
#echo -e "\n First :  ssh oracle@${TARGET_SERVER} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TRG_DB=${TRG_DB} PUMP_TRAIL_PATH=${PUMP_TRAIL_PATH}  'bash -ls' <<'ENDSSH' \n"
#ssh oracle@${TARGET_SERVER} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TRG_DB=${TRG_DB} PUMP_TRAIL_PATH=${PUMP_TRAIL_PATH}  'bash -ls' <<'ENDSSH'
echo -e "\n  ************************************"
echo -e "  Logged into Target server : `hostname -s`"
echo -e "  ************************************\n"
$GG_HOME/ggsci -s <<EOF
info all
exit
EOF
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/spool_targetDB.log
info all
exit
EOF
cat ${GG_DBA_DIR}/spool_targetDB.log | egrep 'REPLICAT' | egrep -i $DB_TYPE| egrep -i ${DBTGT} | tr ":" " " | while read LINE
do
  case $LINE in
    *)
    PROCESS_TYPE=`echo $LINE | awk -F" " '{print $1}'`
    PROCESS_STATUS=`echo $LINE | awk -F" " '{print $2}'`
    PROCESS_NAME=`echo $LINE | awk -F" " '{print $3}'`
if [ "$PROCESS_TYPE" != "MANAGER" ]
  then
    if [ "$PROCESS_TYPE" == "REPLICAT" ]
      then
echo -e "\n  *******************************************"
echo -e "   Executing for $PROCESS_TYPE :  $PROCESS_NAME"
echo -e "  ********************************************\n"
        if [ "$PROCESS_STATUS" == "RUNNING" ]
          then
echo -e "DB_TYPE =" $DB_TYPE
echo  "DBTGT = " $DBTGT
#REP_PROCESS_NAME=R${DB_TYPE}*D2
echo "REP_PROCESS_NAME =" $PROCESS_NAME
#echo -e "\ninfo ${PROCESS_NAME}"
$GG_HOME/ggsci -s <<EOF
sh echo "info ${PROCESS_NAME}"
info ${PROCESS_NAME}
exit
EOF

send_replicat_fn ()
{
$GG_HOME/ggsci <<EOF
SEND ${PROCESS_NAME} LOGEND
EXIT
EOF
}
if [[ -f ${GG_DBA_DIR}/READ_SEND_REPLICAT ]]; then
rm ${GG_DBA_DIR}/READ_SEND_REPLICAT
fi
if [[ -f ${GG_DBA_DIR}/send_replicat.tmp ]]; then
rm ${GG_DBA_DIR}/send_replicat.tmp
fi
touch ${GG_DBA_DIR}/READ_SEND_REPLICAT
touch ${GG_DBA_DIR}/send_replicat.tmp
until [ -s ${GG_DBA_DIR}/READ_SEND_REPLICAT ]
  do
     send_replicat_fn > ${GG_DBA_DIR}/send_replicat.tmp
     grep -i YES ${GG_DBA_DIR}/send_replicat.tmp > ${GG_DBA_DIR}/READ_SEND_REPLICAT
     echo -e "\nWaiting for Replicat to get .......YES"
      sleep 5
  done
echo -e "\nSEND REPLICAT STATUS ==>  is YES and it processed all trail records"
echo -e "\n*********** [ SEND REPLICAT status OUTPUT ] *********"
  cat ${GG_DBA_DIR}/send_replicat.tmp
echo -e "\n********************************************\n"
echo -e "\n  STOPPING $PROCESS_NAME Process ............\n"
$GG_HOME/ggsci -s <<EOF
sh echo "SEND ${PROCESS_NAME} STATUS"
SEND ${PROCESS_NAME} STATUS
STOP ${PROCESS_NAME}
sh sleep 5
info ${PROCESS_NAME}
exit
EOF
     else
     echo -e "\n   ********************************"
     echo -e "    Replicat ${PROCESS_NAME} NOT RUNNING........"
     echo -e "   *********************************\n"
$GG_HOME/ggsci -s <<EOF
info ${PROCESS_NAME}
exit
EOF
        fi
fi
fi
ORAENV_ASK=NO ; export ORAENV_ASK; export ORACLE_SID=${TRG_DB}
. oraenv
GETPW=<password>
#echo "Password -> "${GETPW}
echo " ORACLE_SID = " $ORACLE_SID
echo " ORACLE_HOME = " $ORACLE_HOME
DB_SEQNO=`${ORACLE_HOME}/bin/sqlplus -s /nolog << EOF
connect system/$GETPW@${TRG_DB}
set verify off trimspool on feed off echo off termout off head off
select seqno from ggadmin.checkpoint_target where group_name='${PROCESS_NAME}';
exit
EOF
`
DB_RBANO=`${ORACLE_HOME}/bin/sqlplus -s /nolog << EOF
connect system/$GETPW@${TRG_DB}
set verify off trimspool on feed off echo off termout off head off
select RBA from ggadmin.checkpoint_target where group_name='${PROCESS_NAME}';
exit
EOF
`
     echo -e "\n      *************************************************************"
     echo -e "      Replicat ${PROCESS_NAME} Last Applied SEQ No. = " ${DB_SEQNO} ", RBA No. =" ${DB_RBANO}
     echo -e "      **************************************************************\n"
esac
done
echo -e "\n  -------------[  List of Trail Files on TARGET `hostname -s` Server ]-------------"
echo -e "ls -lrth ${PUMP_TRAIL_PATH}*| tail"
ls -lrth ${PUMP_TRAIL_PATH}*| tail
if [[ -f ${GG_DBA_DIR}/READ_SEND_REPLICAT ]]; then
rm ${GG_DBA_DIR}/READ_SEND_REPLICAT
fi
if [[ -f ${GG_DBA_DIR}/send_replicat.tmp ]]; then
rm ${GG_DBA_DIR}/send_replicat.tmp
fi
#ENDSSH
#if [ $? != 0 ]
#then
#echo -e "\n  *********************************************"
#    echo -e "\n  Found errors on Target SSH script .......Check the Error\n"
#    echo -e "  *******************************************\n"
#exit 1
#fi
echo -e "\n##### ---------------------------[ END SSH ]------------------------########"
###check_prompt_3;
#####################  NEW PRIMARY  (Was Standby)  #############
##### ---------------------------[ START NEW SSH ]------------------------########
## Checking just EXTRACT info and Cleaning OLD files
echo -e "\nSecond:  ssh ${SWITCH_TO} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} EXT_TRAIL_PATH=${EXT_TRAIL_PATH} TRG_DB=${TRG_DB} 'bash -ls' <<'ENDSSH' \n"
ssh ${SWITCH_TO} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} EXT_TRAIL_PATH=${EXT_TRAIL_PATH} TRG_DB=${TRG_DB}  'bash -ls' <<'ENDSSH'
sleep 5
echo -e "\n\n  ---------[ List of checkpoint files... ]--------"
ls -lcrth $GG_HOME/dirchk | tail
echo -e "\n  ---------[ List of param files... ]--------"
ls -lcrth $GG_HOME/dirprm | tail -5
echo -e "\n        ************************************"
echo -e "\n           Logged into `hostname -s` Server\n"
echo -e "         ************************************\n"
$GG_HOME/ggsci -s <<EOF
sh echo "Starting Manager ......."
info mgr
start mgr
sh sleep 5
info mgr
exit
EOF


SOURCE_SERVER=`hostname -s`
TODAY=`date '+%b%d%y'`
ORAENV_ASK=NO ; export ORAENV_ASK; export ORACLE_SID=$DBTGT
. dbaenv $ORACLE_SID
 
GG_INFO_DETAIL () {
$GG_HOME/ggsci -s <<EOF
sh echo "dblogin useridalias ggadmin_prod"
dblogin useridalias ggadmin_prod
info E${DBTGT^^}* DETAIL
exit
EOF
}
GG_INFO_DETAIL;
if [[ -f ${GG_DBA_DIR}/EXT_SHOWCH.txt ]]; then
rm ${GG_DBA_DIR}/EXT_SHOWCH.txt
fi
touch ${GG_DBA_DIR}/EXT_SHOWCH.txt
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/EXT_SHOWCH.txt
info E${DBTGT^^}* SHOWCH
exit
EOF
EXT_SEQ_NO=`grep -i "Sequence #" ${GG_DBA_DIR}/EXT_SHOWCH.txt|awk -F" " '{print $3}'`
EXT_RBA_NO=`grep -i "RBA" ${GG_DBA_DIR}/EXT_SHOWCH.txt|awk -F" " '{print $2}'`
   echo -e "\n\n          *************************************************"
   echo -e "         OLD Extract CURRENT SEQ No. =" ${EXT_SEQ_NO} ", RBA No. ="  ${EXT_RBA_NO}
   echo -e "          **************************************************\n"
if [[ -f ${GG_DBA_DIR}/EXT_SHOWCH.txt ]]; then
rm ${GG_DBA_DIR}/EXT_SHOWCH.txt
fi
echo -e "\n ##################################"
echo -e " Cleaning OLD Files ............."
echo -e " ##################################\n"
echo -e " EXTRACT Cleanup ...........\n"
mkdir -p ${GG_HOME}/dirprm/Switchover_$TODAY
mkdir -p ${GG_HOME}/dirchk/Switchover_$TODAY
mkdir -p ${GG_HOME}/dirrpt/Switchover_$TODAY
echo -e "\nBacking up Existing param files "
echo "mv ${GG_HOME}/dirprm/e$DBTGT*.prm ${GG_HOME}/dirprm/p$DBTGT*.prm ${GG_HOME}/dirprm/Switchover_$TODAY"
mv ${GG_HOME}/dirprm/e$DBTGT*.prm ${GG_HOME}/dirprm/p$DBTGT*.prm ${GG_HOME}/dirprm/Switchover_$TODAY
ls -lrth ${GG_HOME}/dirprm | tail -5
echo -e "\nBacking up Existing DIRCHK directory "
echo "mv ${GG_HOME}/dirchk/*${DBTGT^^}*.cpb ${GG_HOME}/dirchk/*${DBTGT^^}*.cpe  ${GG_HOME}/dirchk/Switchover_$TODAY"
mv ${GG_HOME}/dirchk/*${DBTGT^^}*.cpb ${GG_HOME}/dirchk/*${DBTGT^^}*.cpe  ${GG_HOME}/dirchk/Switchover_$TODAY
ls -lrth ${GG_HOME}/dirchk
mv ${GG_HOME}/dirrpt/E*${DBTGT^^}* ${GG_HOME}/dirrpt/e*${DBTGT}* ${GG_HOME}/dirrpt/Switchover_$TODAY
mv ${GG_HOME}/dirrpt/P*${DBTGT^^}* ${GG_HOME}/dirrpt/p*${DBTGT}* ${GG_HOME}/dirrpt/Switchover_$TODAY
echo -e "\nBacking up Existing Trail Files...."
mkdir -p ${GG_HOME}/dirdat/SRC/${DBTGT}/${TRG_DB}/Switchover_$TODAY
echo "mv ${GG_HOME}/dirdat/SRC/${DBTGT}/${TRG_DB}/${DB_TYPE}* ${GG_HOME}/dirdat/SRC/${DBTGT}/${TRG_DB}/Switchover_$TODAY"
mv ${GG_HOME}/dirdat/SRC/${DBTGT}/${TRG_DB}/${DB_TYPE}* ${GG_HOME}/dirdat/SRC/${DBTGT}/${TRG_DB}/Switchover_$TODAY
#if [[ "$DO_EXT" == "Y" ]]; then
echo -e "\n REPLICAT Cleanup ...........\n"
#### Below are for Replicat
echo -e "\nBacking up Existing param files "
echo "mv ${GG_HOME}/dirprm/r$DBTGT*.prm ${GG_HOME}/dirprm/Switchover_$TODAY"
mv ${GG_HOME}/dirprm/r$DBTGT*.prm  ${GG_HOME}/dirprm/Switchover_$TODAY
ls -lrth ${GG_HOME}/dirprm | tail -5
echo -e "\nBacking up Existing DIRCHK directory "
echo "mv ${GG_HOME}/dirchk/*${DBTGT^^}*.cpr ${GG_HOME}/dirchk/Switchover_$TODAY"
mv ${GG_HOME}/dirchk/*${DBTGT^^}*.cpr ${GG_HOME}/dirchk/Switchover_$TODAY
ls -lrth ${GG_HOME}/dirchk
mv ${GG_HOME}/dirrpt/R*${DBTGT^^}* ${GG_HOME}/dirrpt/r*${DBTGT}* ${GG_HOME}/dirrpt/Switchover_$TODAY
echo -e "\nBacking up Existing Trail Files...."
mkdir -p ${GG_HOME}/dirdat/TRG/${DBTGT}/${TRG_DB}/Switchover_$TODAY
echo "mv ${GG_HOME}/dirdat/TRG/${DBTGT}/${TRG_DB}/${DB_TYPE^^}* ${GG_HOME}/dirdat/TRG/${DBTGT}/${TRG_DB}/Switchover_$TODAY"
mv ${GG_HOME}/dirdat/TRG/${DBTGT}/${TRG_DB}/${DB_TYPE^^}* ${GG_HOME}/dirdat/TRG/${DBTGT}/${TRG_DB}/Switchover_$TODAY
#fi

echo "ORACLE_SID=" $ORACLE_SID
$GG_HOME/ggsci -s <<EOF
info all
exit
EOF
echo -e "\n\n ---------[ List of Latest trail files on NEW PRIMARY ]--------- "
#echo -e "\nls -lrth ${EXT_TRAIL_PATH}* | tail"
ls -lrth ${EXT_TRAIL_PATH}* | tail
ENDSSH
##### ---------------------------[ END SSH ]------------------------########
###check_prompt_3;
echo -e "  ########################## SCP files to NEW PRIMARY : ${SWITCH_TO} ##############"
sleep 5
echo "scp -r ${GG_HOME}/dirchk/E${DBTGT^^}*  $GG_HOME/dirchk/P${DBTGT^^}* oracle@${SWITCH_TO}:$GG_HOME/dirchk "
scp -r ${GG_HOME}/dirchk/E${DBTGT^^}*.* $GG_HOME/dirchk/P${DBTGT^^}*.* oracle@${SWITCH_TO}:$GG_HOME/dirchk
scp -r ${GG_HOME}/dirprm/e${DBTGT}*.prm $GG_HOME/dirprm/p${DBTGT}*.prm oracle@${SWITCH_TO}:$GG_HOME/dirprm
echo "scp -r ${GG_HOME}/dirchk/R${DBTGT^^}*   oracle@${SWITCH_TO}:$GG_HOME/dirchk "
scp -r  ${GG_HOME}/dirchk/R${DBTGT^^}* oracle@${SWITCH_TO}:$GG_HOME/dirchk
scp -r ${GG_HOME}/dirprm/r${DBTGT}*.prm  oracle@${SWITCH_TO}:$GG_HOME/dirprm
if [ $? != 0 ]
then
    echo -e "\n    **********************************************"
    echo -e "\n     SCP to ${SWITCH_TO} Failed.......Check the Error\n"
    echo -e "     **********************************************\n"
  exit 1
else
echo -e "\n    *************************************"
    echo -e "    SCP to ${SWITCH_TO} ............SUCCESS"
    echo -e "   **************************************\n"
fi
###check_prompt_3;
##### ---------------------------[ START NEW SSH ]------------------------########
# EXTRACT Activities on NEW Primary
echo -e "\n3rd : ssh ${SWITCH_TO} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TARGET_SERVER=${TARGET_SERVER} EXT_TRAIL_PATH=${EXT_TRAIL_PATH} EXT_SEQ_NO=${EXT_SEQ_NO} EXT_RBA_NO=${EXT_RBA_NO}  'bash -ls' <<'ENDSSH' \n"
ssh ${SWITCH_TO} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TARGET_SERVER=${TARGET_SERVER} EXT_TRAIL_PATH=${EXT_TRAIL_PATH} EXT_SEQ_NO=${EXT_SEQ_NO} EXT_RBA_NO=${EXT_RBA_NO}  'bash -ls' <<'ENDSSH'
echo -e "\n  ************************************"
echo -e "\n  Logged into `hostname -s` Server\n"
echo -e "  ************************************\n"
ls -lcrth $GG_HOME/dirchk | tail
echo -e "\n  Updating RMTHOST in p${DBTGT}p paramfile ......."
RMT_HOST_NAME=`grep RMTHOST ${GG_HOME}/dirprm/p${DBTGT}*.prm  | awk '{print $2}'`
RMT_HOST_NAME=${RMT_HOST_NAME%%?}
echo -e "\nOLD RMTHOST = " $RMT_HOST_NAME
echo "s/${RMT_HOST_NAME}/${TARGET_SERVER}/g"
eval sed -i 's/${RMT_HOST_NAME}/${TARGET_SERVER}/g' ${GG_HOME}/dirprm/p${DBTGT}*.prm
cat ${GG_HOME}/dirprm/p${DBTGT}*.prm
RMT_HOST_NAME=`grep RMTHOST ${GG_HOME}/dirprm/p${DBTGT}*.prm  | awk '{print $2}'`
RMT_HOST_NAME=${RMT_HOST_NAME%%?}
#echo -e  "\nNEW RMTHOST = " $RMT_HOST_NAME
if [[  ${RMT_HOST_NAME} == ${TARGET_SERVER} ]]; then
 echo -e  "\nNEW RMTHOST = " $RMT_HOST_NAME
else
 echo -e  "\nNEW RMTHOST = " $RMT_HOST_NAME
 echo -e " WRONG HOSTNAME in pump param file ..... Modify to ${TARGET_SERVER} name and continue. "
 exit 1
fi
SOURCE_SERVER=`hostname -s`
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/INFO_EXT
info all
exit
EOF
#INFO_EXT_VAR= `cat ${GG_DBA_DIR}/INFO_EXT | egrep 'EXTRACT' | grep -i E${DB_TYPE}|grep -i ${DBTGT}| tr ":" " "`
EXTRACT_NAME=`cat ${GG_DBA_DIR}/INFO_EXT | egrep 'EXTRACT' | grep -i E${DB_TYPE}|grep -i ${DBTGT}| tr ":" " " | awk -F" " '{print $3}'`
echo "EXTRACT_NAME =" $EXTRACT_NAME
if [[ -f ${GG_DBA_DIR}/EXT_SHOWCH_BEFORE.txt ]]; then
rm ${GG_DBA_DIR}/EXT_SHOWCH_BEFORE.txt
fi
touch ${GG_DBA_DIR}/EXT_SHOWCH_BEFORE.txt
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/EXT_SHOWCH_BEFORE.txt
info ${EXTRACT_NAME} SHOWCH
exit
EOF
SEQ_NO_BEFORE=`grep -i "Sequence #" ${GG_DBA_DIR}/EXT_SHOWCH_BEFORE.txt|awk -F" " '{print $3}'`
RBA_NO_BEFORE=`grep -i "RBA" ${GG_DBA_DIR}/EXT_SHOWCH_BEFORE.txt|awk -F" " '{print $2}'`



ORAENV_ASK=NO ; export ORAENV_ASK; export ORACLE_SID=$DBTGT
. dbaenv $ORACLE_SID
 
echo "ORACLE_SID=" $ORACLE_SID
$GG_HOME/ggsci -s <<EOF
dblogin useridalias ggadmin_prod
info all
info ${EXTRACT_NAME} DETAIL
sh echo "ALTER EXTRACT ${EXTRACT_NAME} ETROLLOVER"
ALTER EXTRACT ${EXTRACT_NAME} ETROLLOVER
info ${EXTRACT_NAME} DETAIL
sh echo "start ${EXTRACT_NAME}"
start ${EXTRACT_NAME}
sh sleep 5
info ${EXTRACT_NAME} showch
sh sleep 5
send ${EXTRACT_NAME} status
info all
exit
EOF
echo -e "\n\n  ------------[ Extract Trail file after ALTER  ]----------"
echo "ls -lrth ${EXT_TRAIL_PATH}* | tail"
ls -lrth ${EXT_TRAIL_PATH}* | tail
if [[ -f ${GG_DBA_DIR}/EXT_SHOWCH.txt ]]; then
rm ${GG_DBA_DIR}/EXT_SHOWCH.txt
fi
touch ${GG_DBA_DIR}/EXT_SHOWCH.txt
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/EXT_SHOWCH.txt
info ${EXTRACT_NAME} SHOWCH
exit
EOF
SEQ_NO=`grep -i "Sequence #" ${GG_DBA_DIR}/EXT_SHOWCH.txt|awk -F" " '{print $3}'`
echo -e "\n        ***************************************************"
echo -e "        EXTRACT ${EXTRACT_NAME} Latest SEQ no. After ETROLLOVER : " $SEQ_NO
echo -e "        ***************************************************\n"
ENDSSH
##### ---------------------------[ END 3rd SSH ]------------------------########
check_prompt_3;
##### ---------------------------[ START NEW SSH for PUMP ]------------------------########
#PUMP Activities
echo -e "\n -------[ Starting PUMP Activities ]-------- \n"
sleep 5
echo -e "\n4th : ssh ${SWITCH_TO} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TARGET_SERVER=${TARGET_SERVER} EXT_TRAIL_PATH=${EXT_TRAIL_PATH} PUMP_TRAIL_PATH=${PUMP_TRAIL_PATH} 'bash -ls' <<'ENDSSH' \n"
ssh ${SWITCH_TO} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TARGET_SERVER=${TARGET_SERVER} EXT_TRAIL_PATH=${EXT_TRAIL_PATH} PUMP_TRAIL_PATH=${PUMP_TRAIL_PATH} 'bash -ls' <<'ENDSSH'
echo -e "\n  ************************************"
echo -e "\n  Logged into `hostname -s` Server\n"
echo -e "  ************************************\n"

$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/INFO_EXT_PUMP
info all
exit
EOF
# USE "P" in below Grep for PUMP
EXTRACT_NAME=`cat ${GG_DBA_DIR}/INFO_EXT_PUMP | egrep 'EXTRACT' | grep -i P${DB_TYPE}|grep -i ${DBTGT}| tr ":" " " | awk -F" " '{print $3}'`
echo -e "\nEXTRACT_NAME =" $EXTRACT_NAME

SEQ_NO=`grep -i "Sequence #" ${GG_DBA_DIR}/EXT_SHOWCH.txt|awk -F" " '{print $3}'`
echo "Extract SEQ_NO : " ${SEQ_NO}
#EXTRACT_NAME=P${DB_TYPE}*D2
#EXT_EXTRACT_NAME=E${DB_TYPE}*D2
$GG_HOME/ggsci -s <<EOF
info ${EXTRACT_NAME}
sh echo "ALTER EXTRACT ${EXTRACT_NAME} extseqno ${SEQ_NO} , EXTRBA 00"
ALTER EXTRACT ${EXTRACT_NAME} extseqno ${SEQ_NO} , EXTRBA 00
info ${EXTRACT_NAME}
sh echo "ALTER EXTRACT ${EXTRACT_NAME} ETROLLOVER"
ALTER EXTRACT ${EXTRACT_NAME} ETROLLOVER
sh echo "start ${EXTRACT_NAME}"
start ${EXTRACT_NAME}
EOF
echo -e "\n "
echo -e "\n -------------[ Pump SOURCE Latest Trail file after alter PUMP  ]------------"
echo -e "\nls -lrth ${EXT_TRAIL_PATH}* | tail"
ls -lrth ${EXT_TRAIL_PATH}* | tail
echo -e "\n -------------[  List of new REPLICAT Trail file on ${TARGET_SERVER} After PUMP ALTER SEQ  ]------------"
echo -e "\nssh oracle@${TARGET_SERVER} ls -lrth ${PUMP_TRAIL_PATH}* | tail"
ssh oracle@${TARGET_SERVER} ls -lrth ${PUMP_TRAIL_PATH}* | tail
if [[ -f ${GG_DBA_DIR}/EXT_SHOWCH.txt ]]; then
rm ${GG_DBA_DIR}/EXT_SHOWCH.txt
fi
if [[ -f ${GG_DBA_DIR}/INFO_EXT_PUMP ]]; then
rm ${GG_DBA_DIR}/INFO_EXT_PUMP
fi
ENDSSH
echo -e "\n ##### ---------------------------[ END SSH ]------------------------########\n"
###check_prompt_3;
echo -e "\n ##### ---------------------------[ START NEW SSH for REPLICAT ]------------------------########"
#REPLICAT Activities
sleep 5
echo -e "\n 5th :  ssh ${TARGET_SERVER} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TRG_DB=${TRG_DB} PUMP_TRAIL_PATH=${PUMP_TRAIL_PATH} OLD_REP_SEQNO=${OLD_REP_SEQNO} 'bash -ls' <<'ENDSSH' \n"
ssh ${TARGET_SERVER} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TRG_DB=${TRG_DB} PUMP_TRAIL_PATH=${PUMP_TRAIL_PATH} OLD_REP_SEQNO=${OLD_REP_SEQNO} 'bash -ls' <<'ENDSSH'
echo -e "\n  ************************************"
echo -e "\n  Logged into `hostname -s` Server\n"
echo -e "  ************************************\n"
echo -e "\n   -----------[ List of latest REPLICAT trail Files on TARGET `hostname -s`  server ]---------"
ls -lrth  ${PUMP_TRAIL_PATH}* | tail

GG_INFO (){
$GG_HOME/ggsci -s <<EOF
info all
exit
EOF
}
GG_INFO;
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/spool_targetDB.log
info all
exit
EOF
cat ${GG_DBA_DIR}/spool_targetDB.log | egrep 'REPLICAT' | egrep -i $DB_TYPE| egrep -i ${DBTGT}| tr ":" " " | while read LINE
do
  case $LINE in
    *)
    PROCESS_TYPE=`echo $LINE | awk -F" " '{print $1}'`
    PROCESS_STATUS=`echo $LINE | awk -F" " '{print $2}'`
    PROCESS_NAME=`echo $LINE | awk -F" " '{print $3}'`
if [ "$PROCESS_TYPE" != "MANAGER" ]
  then
    if [ "$PROCESS_TYPE" == "REPLICAT" ]
      then
#echo -e "DB_TYPE =" $DB_TYPE
#exit 1
echo -e "\n  *******************************************"
echo -e "   Executing for $PROCESS_TYPE :  $PROCESS_NAME"
echo -e "  ********************************************\n"

ORAENV_ASK=NO ; export ORAENV_ASK; export ORACLE_SID=${TRG_DB}
 
GETPW=<password>
#echo "Password -> "${GETPW}
echo " ORACLE_SID = " $ORACLE_SID
echo " ORACLE_HOME = " $ORACLE_HOME
DB_SEQNO=`$ORACLE_HOME/bin/sqlplus -s /nolog << EOF
connect system/$GETPW@${TRG_DB}
set verify off trimspool on feed off echo off termout off head off
select seqno from ggadmin.checkpoint_target where group_name='${PROCESS_NAME}';
exit
EOF
`
DB_RBA=`$ORACLE_HOME/bin/sqlplus -s /nolog << EOF
connect system/$GETPW@${TRG_DB}
set verify off trimspool on feed off echo off termout off head off
select rba from ggadmin.checkpoint_target where group_name='${PROCESS_NAME}';
exit
EOF
`
     echo -e "\n********************************************************"
     echo -e " Replicat ${PROCESS_NAME} Current OLD SEQ No. = " ${DB_SEQNO} , RBA No. = ${DB_RBA}
     echo -e "*********************************************************\n"
echo -e "OLD_REP_SEQNO =" ${OLD_REP_SEQNO}
echo -e "DB_SEQNO =" ${DB_SEQNO}
DB_SEQNO=`expr ${DB_SEQNO} + 1`
echo "        NEW REP DB_SEQNO need to set =  " ${DB_SEQNO}
if [[ "$DB_SEQNO" -eq 1 ]]; then
echo " **********************************************"
echo -e  "  ERROR ....... New REPLICAT Seq number is WRONG !!  \n"
echo -e " **********************************************\n"
exit 1
fi
$GG_HOME/ggsci -s <<EOF
sh echo "info ${PROCESS_NAME}"
info ${PROCESS_NAME}
sh echo "Alter REPLICAT ${PROCESS_NAME} extseqno $DB_SEQNO  extrba 00"
Alter REPLICAT ${PROCESS_NAME} extseqno $DB_SEQNO  extrba 00
info ${PROCESS_NAME}
exit
EOF
fi
fi
 
     echo -e "\n  **************************************************"
     echo -e "   Replicat ${PROCESS_NAME} SEQ No. After ALTER = " ${DB_SEQNO}
     echo -e "  ***************************************************\n"
esac
done
GG_INFO;
## ENDSSH
##### ---------------------------[ END SSH ]------------------------########
### check_prompt_3;
##### ---------------------------[ START NEW SSH for REPLICAT ]------------------------########
## REPLICAT Activities
##echo -e "\n 6th :  ssh ${TARGET_SERVER} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TRG_DB=${TRG_DB} PUMP_TRAIL_PATH=${PUMP_TRAIL_PATH}  'bash -ls' <<'ENDSSH' \n"
### ssh ${TARGET_SERVER} GG_HOME=${GG_HOME} GG_DBA_DIR=${GG_DBA_DIR} DB_TYPE=${DB_TYPE} DBTGT=${DBTGT} TRG_DB=${TRG_DB} PUMP_TRAIL_PATH=${PUMP_TRAIL_PATH} 'bash -ls' <<'ENDSSH'
## echo -e "\n  ************************************"
## echo -e "\n   Logged into `hostname -s` Server"
## echo -e "  ************************************\n"
echo -e "\n List of Latest trail files for ${DBTGT}"
ls -lrth ${PUMP_TRAIL_PATH}* | tail -5
#GG_INFO (){
#$GG_HOME/ggsci -s <<EOF
#info all
#exit
#EOF
#}
GG_INFO;
$GG_HOME/ggsci -s <<EOF > ${GG_DBA_DIR}/spool_targetDB.log
info all
exit
EOF
cat ${GG_DBA_DIR}/spool_targetDB.log | egrep 'REPLICAT' | egrep -i $DB_TYPE| egrep -i ${DBTGT}| tr ":" " " | while read LINE
do
  case $LINE in
    *)
    PROCESS_TYPE=`echo $LINE | awk -F" " '{print $1}'`
    PROCESS_STATUS=`echo $LINE | awk -F" " '{print $2}'`
    PROCESS_NAME=`echo $LINE | awk -F" " '{print $3}'`
if [ "$PROCESS_TYPE" != "MANAGER" ]
  then
    if [ "$PROCESS_TYPE" == "REPLICAT" ]
      then
#echo -e "DB_TYPE =" $DB_TYPE
#exit 1
echo -e "\n  *******************************************"
echo -e "  Executing for $PROCESS_TYPE :  $PROCESS_NAME"
echo -e "  ********************************************\n"
$GG_HOME/ggsci -s <<EOF
sh echo "info ${PROCESS_NAME}"
info ${PROCESS_NAME}
sh echo " START REPLICAT ${PROCESS_NAME}"
START REPLICAT ${PROCESS_NAME}
sh sleep 5
exit
EOF
GG_INFO;
fi
fi

$GG_HOME/ggsci -s <<EOF > REP_STATUS
sh echo " SEND REPLICAT ${PROCESS_NAME} STATUS"
SEND REPLICAT ${PROCESS_NAME} status
exit
EOF
DB_SEQNO=`grep -i "Sequence #" REP_STATUS |awk -F" " '{print $3}'`
     echo -e "\n  **************************************************"
     echo -e "   Replicat ${PROCESS_NAME} New CURRENT SEQ No. = " ${DB_SEQNO}
     echo -e "  ***************************************************\n"
esac
done
ENDSSH
##### ---------------------------[ END 6th SSH ]------------------------########
################################################
echo -e "\n       Shell Script COMPLETED : `date`"
exit 0

-- 

0 comments:

Post a Comment

Auto Scroll Stop Scroll