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

-- 

Saturday, December 3, 2022

Set OEM page to NOT Timeout


OEM page login session expires to the time what ever you have set in OEM properties and if we want to change to the time depending on your Organization policies then please follow below step

Here i'm trying to set it to NOT expire / Unlimited to do so 

Check the current value from OMS server 

[oracle@OMSHOSTSRVR bin]$ ./emctl get property -name oracle.sysman.eml.maxInactiveTime
Oracle Enterprise Manager Cloud Control 13c Release 2
Copyright (c) 1996, 2016 Oracle Corporation.  All rights reserved.
SYSMAN password:
Value for property oracle.sysman.eml.maxInactiveTime for oms All Management Servers is null

Set the property value with "-1" which is unlimited

[oracle@OMSHOSTSRVR bin]$ ./emctl set property -name oracle.sysman.eml.maxInactiveTime -value -1
Oracle Enterprise Manager Cloud Control 13c Release 2
Copyright (c) 1996, 2016 Oracle Corporation.  All rights reserved.
SYSMAN password:
Property oracle.sysman.eml.maxInactiveTime has been set to value -1 for all Management Servers
OMS restart is not required to reflect the new property value

[oracle@OMSHOSTSRVR bin]$ ./emctl get property -name oracle.sysman.eml.maxInactiveTime
Oracle Enterprise Manager Cloud Control 13c Release 2
Copyright (c) 1996, 2016 Oracle Corporation.  All rights reserved.
SYSMAN password:
Value for property oracle.sysman.eml.maxInactiveTime at Global level is -1

BOUNCE the OMS to take affect the changes made

$ emctl stop oms -all
$ emctl start oms 

Referrence:
EM 12c : How to Change the Timeout Window of an emcli Session (Doc ID 1589497.1)
How to Change the Default Login (Idle) Timeout Value for the Enterprise Manager Cloud Console Connections? (Doc ID 1385996.1)

Wednesday, July 6, 2022

OEM 13c New feature - SYSTEM BROADCAST

 

There are times where OEM admin wants to inform and send notification banner to all the users or particular user who are connected to the OEM due to some maintenance/Downtime .

 So OEM 13c has one new feature introduced – “SYSTEM BROADCAST” , where you can send a broadcast message (upto 200 Char) using EMCLI command


Login to OMS server

 Cd $OMS/bin

 Syntax :

emcli publish_message -toOption="ALL|SPECIFIC"
           [-to="comma separated user names"]
           [-messageType="INFO|CONF|WARN|ERROR|WARNING" (default is INFO)]
          -message="message details" 
           [ ]  indicates that the parameter is optional.

 

 

[oracle@omssrvr bin]$ ./emcli send_system_broadcast -toOption="ALL" -messageType="INFO" -message="OEM is going down for Maintenance this Friday 10AM CST”

Status:Unauthorized 401

 

To send system broadcast to ALL users connected to OEM

[oracle@omssrvr bin]$ ./emcli login -username=sysman
 
Enter password :

 Login successful


 [oracle@omssrvr  bin]$ ./emcli send_system_broadcast -toOption="ALL" -messageType="INFO" -message= "OEM is going down for Maintenance this Friday 10AM CST”

Successfully requested to send System Broadcast to users.

 

To send system broadcast to Specific user connected to OEM 

./emcli send_system_broadcast  -toOption="SPECIFIC" -to="USERNAME" -messageType="WARN" -message="OEM is going down for Maintenance this Friday 10AM CST”

 

https://docs.oracle.com/en/enterprise-manager/cloud-control/enterprise-manager-cloud-control/13.5/emcli/send_system_broadcast.html

 

 


Tuesday, June 14, 2022

PL/SQL package DBNAME.DBMS_RCVCAT version 19.06.00.00. in RCVCAT database is not current

 
 
 
When trying to connect to catalog database from rman I am getting below error
 
 
HOSTNAME:dbname:/home/oracle $ rman target /
 
Recovery Manager: Release 19.0.0.0.0 - Production on Tue Jun 14 11:50:16 2022
Version 19.9.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
connected to target database: DBNAME (DBID=3401445687)
 
 
RMAN> connect catalog user/pass@catalogdb
 
connected to recovery catalog database
PL/SQL package DBNAME_EXA_RMAN.DBMS_RCVCAT version 19.06.00.00. in RCVCAT database is not current
PL/SQL package DBNAME_EXA_RMAN.DBMS_RCVMAN version 19.06.00.00 in RCVCAT database is not current
 
 

Reason :

 There is a version mismatch between the RMAN-executable and the RMAN-catalog SCHEMA


Solution :
 
HOSTNAME:dbname:/home/oracle $ rman target /
 
Recovery Manager: Release 19.0.0.0.0 - Production on Tue Jun 14 11:50:16 2022
Version 19.9.0.0.0
 
Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.
 
connected to target database: DBNAME (DBID=3401445687)
 
 
RMAN> connect catalog user/pass@catalogdb
 
connected to recovery catalog database
PL/SQL package DBNAME_EXA_RMAN.DBMS_RCVCAT version 19.06.00.00. in RCVCAT database is not current
PL/SQL package DBNAME_EXA_RMAN.DBMS_RCVMAN version 19.06.00.00 in RCVCAT database is not current
 
RMAN>
 
RMAN> upgrade catalog;
 
recovery catalog owner is DBNAME_EXA_RMAN
enter UPGRADE CATALOG command again to confirm catalog upgrade
 
-- give same command again
 
RMAN> upgrade catalog;
 
recovery catalog upgraded to version 19.09.00.00.00
DBMS_RCVMAN package upgraded to version 19.09.00.00
DBMS_RCVCAT package upgraded to version 19.09.00.00.
 
RMAN> exit
 
 
Refer:
 
Pl/Sql Package Rman.Dbms_rcvcat Version xxxxx In Rcvcat Database Is Not Current (Doc ID 1365435.1)

Thursday, June 9, 2022

How to find OEM Weblogic server and OEM Console URL 13c

 

During the Installation time of the OEM there is a file called "setupinfo.txt" will be created where we can fine the OEM url's


$ORACLE_HOME/oms/install/setupinfo.txt

(OR) 

we can find the ports from the below output too

$OMS_HOME/bin emctl status oms -details



Monday, March 21, 2022

EXTRACT Stuck in RECOVERY since long time in GG HUB

 

OGG : 19c Classic Architecture 

Source DB : 19C Oracle


Goldengate and Database are running on two different Servers , Hub Server (where OGG is installed) is running in UTC time zone but the database server is running in US Central Time zone.

 

GGSCI (ec2-devhostas ggadmin@DEVDB) 41> start EDEVDB

 

Sending START request to MANAGER ...

EXTRACT EDEVDB starting

 

GSCI (ec2-devhost as ggadmin@DEVDB) 45> info all

 

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

 

MANAGER     RUNNING

EXTRACT     RUNNING     EDEVDB     01:18:52      00:00:05

EXTRACT     STOPPED     PDEVDB     00:00:00      01:18:56

 

GGSCI (ec2-devhost as ggadmin@DEVDB) 47> send EDEVDB status

 

Sending STATUS request to EXTRACT EDEVDB ...

EXTRACT EDEVDB (PID 4790)

  Current status: In recovery[1]: Processing data

 

  Current read position:

  Redo thread #: 1

  Sequence #: 0

  RBA: 0

  Timestamp: 2021-06-19 16:11:01.000000

  SCN: 0.0 (0)

  Current write position:

  Sequence #: 4

  RBA: 1449

  Timestamp: 2021-06-19 17:30:04.008729

  Extract Trail: /u02/goldengate/home/dirdat/SRC/DEVDB/tgtdb/sc

 

 

GGSCI (ec2-devhost as ggadmin@DEVDB) 57> view params EDEVDB

 

EXTRACT EDEVDB

SETENV (ORACLE_HOME='/u01/app/oracle/product/19.0.0.0/dbhome_1')

SETENV (ORACLE_SID='DEVDB')

USERIDALIAS ggadmin_DEVDB

TRANLOGOPTIONS INTEGRATEDPARAMS (max_sga_size 1024)

GETUPDATEBEFORES

NOCOMPRESSDELETES

NOCOMPRESSUPDATES

REPORTCOUNT EVERY 1 HOUR, RATE

WARNLONGTRANS 1D, CHECKINTERVAL 10M, SKIPEMPTYTRANS

EXTTRAIL /u02/goldengate/home/dirdat/SRC/DEVDB/tgtdb/sc

TABLE SCOTT.CB_GG GETBEFORECOLS(ON UPDATE ALL, ON DELETE ALL) ;

 

Solution:

 

Source DB Time :

 

12:01:36 ADMIN@DEVDB > select systimestamp from dual;

 SYSTIMESTAMP

---------------------------------------------------------------------------

19-JUN-21 12.30.36.030634 PM -05:00

 

GG HUB Server/DB version :

 

[oracle@ec2-devhost home]$ date

Sat Jun 19 17:41:26 UTC 2021

 

 Add below parameter on source param: (introduced in OGG 12.3.0.1.2)

 TRANLOGOPTIONS SOURCE_OS_TIMEZONE GMT-5

 

GGSCI (ec2-devhost as ggadmin@DEVDB) 49> edit params EDEVDB

GGSCI (ec2-devhost as ggadmin@DEVDB) 50> start EDEVDB

 Sending START request to MANAGER ...

EXTRACT EDEVDB starting

 

 

GGSCI (ec2-devhost as ggadmin@DEVDB) 51> send EDEVDB status

 Sending STATUS request to EXTRACT EDEVDB ...

EXTRACT EDEVDB (PID 5013)

  Current status: Recovery complete: At EOF

 

  Current read position:

  Redo thread #: 0

  Sequence #: 0

  RBA: 0

  Timestamp: 2021-06-19 17:34:05.000000

  SCN: 0.20900639 (20900639)

  Current write position:

  Sequence #: 5

  RBA: 1449

  Timestamp: 2021-06-19 17:34:00.090907

  Extract Trail: /u02/goldengate/home/dirdat/SRC/DEVDB/tgtdb/sc

 

GGSCI (ec2-devhost as ggadmin@DEVDB) 57> view params EDEVDB

 EXTRACT EDEVDB

SETENV (ORACLE_HOME='/u01/app/oracle/product/19.0.0.0/dbhome_1')

SETENV (ORACLE_SID='DEVDB')

USERIDALIAS ggadmin_DEVDB

TRANLOGOPTIONS SOURCE_OS_TIMEZONE GMT-5

TRANLOGOPTIONS INTEGRATEDPARAMS (max_sga_size 1024)

GETUPDATEBEFORES

NOCOMPRESSDELETES

NOCOMPRESSUPDATES

REPORTCOUNT EVERY 1 HOUR, RATE

WARNLONGTRANS 1D, CHECKINTERVAL 10M, SKIPEMPTYTRANS

EXTTRAIL /u02/goldengate/home/dirdat/SRC/DEVDB/tgtdb/sc

TABLE SCOTT.CB_GG GETBEFORECOLS(ON UPDATE ALL, ON DELETE ALL) ;

 

 Reference :

OGG Newly created extract is stuck in recovery mode (Doc ID 2434196.1)

 

 

Auto Scroll Stop Scroll