Skip to content

Commit

Permalink
Dba 847 (#515)
Browse files Browse the repository at this point in the history
* Add source legacy option

* Adapt to handle restore, recover and open from legacy

* Use source legacy workflow input value

* Remove development target environments

* Remove unwanted character

* Run post or build ha jobs if required

* Debugging

* Uncomment debug

* Uncomment

* Require db_unique_name for legacy restore

* Misplaced double quote

* Correct variable name

* Append to pfile

* Add db_unique_name option

* Do not perform asm diskgroup deletion for legacy recover/open condition

* Modify database resources

* Spelling correction
  • Loading branch information
ranbeersingh1 authored Feb 3, 2025
1 parent c0a32c6 commit f6bbb79
Showing 1 changed file with 45 additions and 34 deletions.
79 changes: 45 additions & 34 deletions playbooks/oracle_duplicate/rman_duplicate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -422,8 +422,10 @@ EOF
echo " recover database;" >> $RMANDUPLICATECMDFILE
if [[ "${LEGACY_OPTION}" = "open" ]]
then
echo ' sql "alter database active standby database";' >> $RMANDUPLICATECMDFILE
echo ' sql "alter database activate standby database";' >> $RMANDUPLICATECMDFILE
echo ' sql "alter database open";' >> $RMANDUPLICATECMDFILE
echo " host 'srvctl modify database -d ${TARGET_DB} -startoption OPEN';" >> $RMANDUPLICATECMDFILE
echo " host 'srvctl modify database -d ${TARGET_DB} -role PRIMARY';" >> $RMANDUPLICATECMDFILE
fi
for (( i=1; i<=${CPU_COUNT}; i++ ))
do
Expand All @@ -447,6 +449,7 @@ EOF
echo " set db_file_name_convert='+DATA/${SOURCE_DB}','+DATA/${TARGET_DB}'" >> $RMANDUPLICATECMDFILE
echo " set log_file_name_convert='+DATA/${SOURCE_DB}','+DATA/${TARGET_DB}','+FLASH/${SOURCE_DB}','+FLASH/${TARGET_DB}'" >> $RMANDUPLICATECMDFILE
fi
[[ "${LEGACY_OPTION}" == "restore" ]] && echo " set db_unique_name='${TARGET_DB}'" >> $RMANDUPLICATECMDFILE
echo " set fal_server=''" >> $RMANDUPLICATECMDFILE
echo " set log_archive_config=''" >> $RMANDUPLICATECMDFILE
echo " set log_archive_dest_2=''" >> $RMANDUPLICATECMDFILE
Expand All @@ -469,7 +472,11 @@ EOF
else
echo " until scn ${SCN};" >> $RMANDUPLICATECMDFILE
fi

if [[ "${LEGACY_OPTION}" == "restore" ]]
then
echo " host 'srvctl modify database -d ${TARGET_DB} -startoption MOUNT';" >> $RMANDUPLICATECMDFILE
echo " host 'srvctl modify database -d ${TARGET_DB} -role PHYSICAL_STANDBY';" >> $RMANDUPLICATECMDFILE
fi
echo "}" >>$RMANDUPLICATECMDFILE
echo "exit" >>$RMANDUPLICATECMDFILE
}
Expand Down Expand Up @@ -759,6 +766,7 @@ if [[ ! -z "$JSON_INPUTS" ]]; then
JSON_INPUTS=$(echo $JSON_INPUTS | base64 --decode )
fi


if [ "${SPFILE_PARAMETERS}" != "UNSPECIFIED" ]
then
for PARAM in ${SPFILE_PARAMETERS[@]}
Expand All @@ -770,47 +778,50 @@ then
done
fi

info "Shutdown ${TARGET_DB}"
sqlplus -s / as sysdba <<EOF
shutdown abort;
if [[ ! "${LEGACY_OPTION}" =~ ^(recover|open)$ ]]
then
info "Shutdown ${TARGET_DB}"
sqlplus -s / as sysdba <<EOF
shutdown abort;
EOF

info "Modify database using Server Control with correct spfile location"
srvctl modify database -d ${TARGET_DB} -p "+DATA/${TARGET_DB}/spfile${TARGET_DB}.ora"
info "Modify database using Server Control with correct spfile location"
srvctl modify database -d ${TARGET_DB} -p "+DATA/${TARGET_DB}/spfile${TARGET_DB}.ora"

if [[ "${NOOP_MODE}" != "TRUE" ]];
then
remove_asm_directory DATA ${TARGET_DB}
remove_asm_directory FLASH ${TARGET_DB}
if [[ "${NOOP_MODE}" != "TRUE" ]];
then
remove_asm_directory DATA ${TARGET_DB}
remove_asm_directory FLASH ${TARGET_DB}

info "Create ${TARGET_DB} in +DATA in readiness for duplicate"
asmcmd mkdir +DATA/${TARGET_DB}
info "Create ${TARGET_DB} in +DATA in readiness for duplicate"
asmcmd mkdir +DATA/${TARGET_DB}

info "Set environment for ${TARGET_DB}"
set_ora_env ${TARGET_DB}
info "Set environment for ${TARGET_DB}"
set_ora_env ${TARGET_DB}

INI_FILES=(${ORACLE_HOME}/dbs/*${TARGET_DB}*.ora)
if [[ -f ${INI_FILES[0]} ]]
then
info "Remove all references to all ${TARGET_DB} initialization files to start fresh"
rm ${ORACLE_HOME}/dbs/*${TARGET_DB}*.ora || error "Removing ${TARGET_DB} initialization files"
fi
else
info "Skipping deleting data files in noop mode"
fi
INI_FILES=(${ORACLE_HOME}/dbs/*${TARGET_DB}*.ora)
if [[ -f ${INI_FILES[0]} ]]
then
info "Remove all references to all ${TARGET_DB} initialization files to start fresh"
rm ${ORACLE_HOME}/dbs/*${TARGET_DB}*.ora || error "Removing ${TARGET_DB} initialization files"
fi
else
info "Skipping deleting data files in noop mode"
fi

DUPLICATEPFILE=${ORACLE_HOME}/dbs/init${TARGET_DB}_duplicate.ora
info "Create ${DUPLICATEPFILE} pfile"
echo "db_name=${TARGET_DB}" > ${DUPLICATEPFILE}
echo "${COMPATIBLE}" >> ${DUPLICATEPFILE}
DUPLICATEPFILE=${ORACLE_HOME}/dbs/init${TARGET_DB}_duplicate.ora
info "Create ${DUPLICATEPFILE} pfile"
echo "db_name=${TARGET_DB}" > ${DUPLICATEPFILE}
echo "${COMPATIBLE}" >> ${DUPLICATEPFILE}

info "Place ${TARGET_DB} in nomount mode"
if ! sqlplus -s / as sysdba << EOF
whenever sqlerror exit failure
startup force nomount pfile=${DUPLICATEPFILE}
info "Place ${TARGET_DB} in nomount mode"
if ! sqlplus -s / as sysdba << EOF
whenever sqlerror exit failure
startup force nomount pfile=${DUPLICATEPFILE}
EOF
then
error "Placing ${TARGET_DB} in nomount mode"
then
error "Placing ${TARGET_DB} in nomount mode"
fi
fi

info "Generating rman command file"
Expand Down

0 comments on commit f6bbb79

Please sign in to comment.