EBS 12.2.15 Cloning with Oracle 19c (19.29) Using Rapid Clone (Multitenant CDB/PDB)

In this guide, we will perform Oracle E-Business Suite (EBS) 12.2.15 cloning using Rapid Clone with an Oracle Database 19c (19.29) multitenant architecture. This cloning method is commonly used for EBS refresh, DR setup, test environment creation, and production-to-nonproduction cloning.

This document covers a complete end-to-end procedure including adpreclone, RMAN hot backup, RMAN duplicate, PDB rename, UTL_FILE_DIR configuration, and appsTier configuration.


Environment Details

Source Instance Details

ORACLE_SID=EBSCDB
CDB Name     : EBSCDB
PDB Name     : EBSDB
EBS Version  : 12.2.15
AD/TXK       : Delta 17
DB Version   : 19.29
OS           : OEL 8.10

Target Instance Details

ORACLE_SID=PERPCDB
CDB Name     : PERPCDB
PDB Name     : PERP
EBS Version  : 12.2.15
AD/TXK       : Delta 17
DB Version   : 19.29
OS           : OEL 8.10

Target Directory Structure Used

DB ORACLE_HOME   : /u01/db/PERP/19.0.0
DB DATA_TOP      : /u01/db/PERP/oradata
APPS BASE        : /u01/apps/PERP
RUN FS (fs2)     : /u01/apps/PERP/fs2
PATCH FS (fs1)   : /u01/apps/PERP/fs1
FS_NE            : /u01/apps/PERP/fs_ne
RMAN BACKUP DIR  : /u02/backups/RMAN

Pre-Requisite Tasks (Target Server)

Install Required RPM Packages

dnf install -y bc binutils compat-libcap1 compat-libstdc++-33 \
gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel \
libgcc libstdc++ libstdc++-devel libX11 libXau libXi libXtst \
libxcb make sysstat unixODBC unixODBC-devel

Create Oracle and applmgr Users

groupadd oinstall
groupadd dba
useradd -g oinstall -G dba oracle
useradd -g oinstall applmgr

Create Required Directories

mkdir -p /u01/db/PERP
mkdir -p /u01/apps/PERP

chown -R oracle:oinstall /u01/db/PERP
chown -R applmgr:oinstall /u01/apps/PERP

Step 1: Run ADPRECLONE on Source Database Node

export ORACLE_HOME=/u01/db/GOLD/19.0.0
cd $ORACLE_HOME

. EBSCDB_foalabsrv.env

sqlplus / as sysdba <<EOF
select name, open_mode from v\$database;
show pdbs;
exit;
EOF

mkdir -p /u01/db/GOLD/19.0.0/appsutil/etcc
chmod 755 /u01/db/GOLD/19.0.0/appsutil/etcc/checkDBpatch.sh

cd $ORACLE_HOME/appsutil/scripts/$CONTEXT_NAME
perl adpreclone.pl dbTier

Step 2: Run ADPRECLONE on Source Application Node (RUN File System)

. EBSapps.env run

cd $ADMIN_SCRIPTS_HOME
perl adpreclone.pl appsTier

Step 3: Take RMAN Hot Backup (CDB Backup + Archive + Controlfile + SPFILE)

This step is critical for Oracle EBS cloning with RMAN duplicate. We take full backup along with archived logs, controlfile, and spfile.

export ORACLE_HOME=/u01/db/GOLD/19.0.0
cd $ORACLE_HOME
. EBSCDB_foalabsrv.env

mkdir -p /u02/backups/RMAN

rman target / <<EOF
run {
 allocate channel c1 type disk;
 allocate channel c2 type disk;

 BACKUP as compressed backupset FULL FILESPERSET 10
 FORMAT '/u02/backups/RMAN/EBSDB_D_%s_%p_%t.bak' DATABASE;

 BACKUP as compressed backupset FILESPERSET 10
 FORMAT '/u02/backups/RMAN/EBSDB_A_%s_%p_%t.bak' ARCHIVELOG ALL skip inaccessible;

 BACKUP FORMAT '/u02/backups/RMAN/EBSDB_C_%s_%p_%t.bak' CURRENT CONTROLFILE;

 BACKUP FORMAT '/u02/backups/RMAN/EBSDB_S_%s_%p_%t.bak' SPFILE;

 RELEASE CHANNEL c1;
 RELEASE CHANNEL c2;
}
EOF

Step 4: Copy Source Binaries and Stage Files to Target

Source DB Node (Oracle Home + RMAN Backup)

cd /u01/db/GOLD
tar -zcvf /u02/backups/19.0.0.tar.gz 19.0.0

cd /u02/backups
tar -zcvf RMAN.tar.gz RMAN

Source Apps Node (RUN FS Only)

cd /u01/apps/GOLD/fs2
tar -zcvf /u02/backups/EBSapps_fs2_run.tar.gz EBSapps

Copy to Target Server

scp /u02/backups/19.0.0.tar.gz oracle@<TARGET_HOST>:/u02/backups/
scp /u02/backups/RMAN.tar.gz oracle@<TARGET_HOST>:/u02/backups/
scp /u02/backups/EBSapps_fs2_run.tar.gz applmgr@<TARGET_HOST>:/u02/backups/

Step 5: Prepare Target Server and Untar Binaries

Target DB Node

mkdir -p /u01/db/PERP
cd /u01/db/PERP

cp /u02/backups/19.0.0.tar.gz .
tar -zxvf 19.0.0.tar.gz
rm -rf 19.0.0.tar.gz

mkdir -p /u02/backups/RMAN
cd /u02/backups
tar -zxvf RMAN.tar.gz
rm -rf RMAN.tar.gz

chown -R oracle:oinstall /u01/db/PERP

Target Apps Node

mkdir -p /u01/apps/PERP
cd /u01/apps/PERP
mkdir -p fs1 fs2 fs_ne

cd /u01/apps/PERP/fs2
cp /u02/backups/EBSapps_fs2_run.tar.gz .
tar -zxvf EBSapps_fs2_run.tar.gz
rm -rf EBSapps_fs2_run.tar.gz

chown -R applmgr:oinstall /u01/apps/PERP

Step 6: Configure Target DB Techstack (adcfgclone dbTechStack)

export ORACLE_HOME=/u01/db/PERP/19.0.0
export PATH=$ORACLE_HOME/bin:$PATH

cd $ORACLE_HOME/appsutil/clone/bin
perl adcfgclone.pl dbTechStack

Step 7: Generate listener.ora and tnsnames.ora for Target CDB

export ORACLE_HOME=/u01/db/PERP/19.0.0
export PATH=$ORACLE_HOME/perl/bin:$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME:$ORACLE_HOME/lib
export PERL5LIB=$ORACLE_HOME/perl/lib/5.28.1:$ORACLE_HOME/perl/site_perl/5.28.1:$ORACLE_HOME/appsutil/perl
export PATH=$ORACLE_HOME/perl:$ORACLE_HOME/perl/lib:$ORACLE_HOME/perl/bin:$PATH

cd $ORACLE_HOME/appsutil
chmod 755 txkSetCfgCDB.env
./txkSetCfgCDB.env -dboraclehome=/u01/db/PERP/19.0.0

cd $ORACLE_HOME/appsutil/bin
perl txkGenCDBTnsAdmin.pl \
-dboraclehome=/u01/db/PERP/19.0.0 \
-cdbname=PERPCDB \
-cdbsid=PERPCDB \
-dbport=1521 \
-outdir=$ORACLE_HOME/appsutil/log \
-israc=no

Step 8: Start Target Listener

cd $ORACLE_HOME/appsutil/scripts/$CONTEXT_NAME
./addlnctl.sh start PERPCDB

Step 9: Prepare initPERPCDB.ora for RMAN Duplicate

mkdir -p /u02/backups/RMAN/aux
mkdir -p /u01/db/PERP/oradata

cat > /u02/backups/RMAN/initPERPCDB.ora <<EOF
db_name='PERPCDB'
enable_pluggable_database=TRUE
DB_FILE_NAME_CONVERT=('/u01/db/GOLD/EBSCDB','/u01/db/PERP/oradata')
LOG_FILE_NAME_CONVERT=('/u01/db/GOLD/EBSCDB','/u01/db/PERP/oradata')
EOF

Step 10: Start Auxiliary Instance in NOMOUNT

export ORACLE_HOME=/u01/db/PERP/19.0.0
export ORACLE_SID=PERPCDB
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus / as sysdba <<EOF
startup nomount pfile='/u02/backups/RMAN/initPERPCDB.ora';
exit;
EOF

Step 11: RMAN Duplicate CDB Database from Backup Location

export ORACLE_HOME=/u01/db/PERP/19.0.0
export ORACLE_SID=PERPCDB
export PATH=$ORACLE_HOME/bin:$PATH

rman auxiliary / <<EOF
run {
 allocate auxiliary channel c1 device type disk;
 allocate auxiliary channel c2 device type disk;

 duplicate database to 'PERPCDB'
 backup location '/u02/backups/RMAN'
 nofilenamecheck;

 release channel c1;
 release channel c2;
}
EOF

Step 12: Rename PDB (EBSDB to PERP)

export ORACLE_HOME=/u01/db/PERP/19.0.0
export ORACLE_SID=PERPCDB
export PATH=$ORACLE_HOME/bin:$PATH

sqlplus / as sysdba <<EOF
alter pluggable database "EBSDB" close;
alter pluggable database "EBSDB" unplug into '$ORACLE_HOME/dbs/EBSDB_PDB_info.xml';
drop pluggable database "EBSDB";

create pluggable database "PERP"
using '$ORACLE_HOME/dbs/EBSDB_PDB_info.xml'
NOCOPY
SERVICE_NAME_CONVERT=('ebs_EBSDB','ebs_PERP','EBSDB_ebs_patch','PERP_ebs_patch');

alter pluggable database "PERP" open read write;

alter pluggable database all open;
alter pluggable database all save state instances=all;

exit;
EOF

Step 13: Run adupdlib.sql

cd $ORACLE_HOME/appsutil/install/$CONTEXT_NAME

sqlplus / as sysdba <<EOF
@adupdlib.sql so
exit;
EOF

Step 14: Run txkPostPDBCreationTasks.pl

cd $ORACLE_HOME/appsutil
. ./txkSetCfgCDB.env -dboraclehome=/u01/db/PERP/19.0.0

perl $ORACLE_HOME/appsutil/bin/txkPostPDBCreationTasks.pl \
-dboraclehome=/u01/db/PERP/19.0.0 \
-outdir=/u01/db/PERP/19.0.0/appsutil/log \
-cdbname=PERPCDB \
-dbuniquename=PERPCDB \
-cdbsid=PERPCDB \
-pdbsid=PERP \
-appsuser=apps \
-israc=no \
-dbport=1521 \
-servicetype=dbsystem

Step 15: Configure UTL_FILE_DIR Using txkCfgUtlfileDir.pl

cd $ORACLE_HOME/appsutil/bin

perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \
-contextfile=$ORACLE_HOME/appsutil/$CONTEXT_NAME.xml \
-oraclehome=$ORACLE_HOME \
-outdir=$ORACLE_HOME/appsutil/log \
-mode=getUtlFileDir

vi $ORACLE_HOME/dbs/PERP_utlfiledir.txt

mkdir -p /u01/db/PERP/temp/PERP
mkdir -p /u01/db/PERP/19.0.0/appsutil/outbound/PERP_<hostname>
mkdir -p /u01/db/PERP/temp/PERP

perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \
-contextfile=$ORACLE_HOME/appsutil/$CONTEXT_NAME.xml \
-oraclehome=$ORACLE_HOME \
-outdir=$ORACLE_HOME/appsutil/log \
-mode=setUtlFileDir

grep -i s_outbound_dir $ORACLE_HOME/appsutil/$CONTEXT_NAME.xml

perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \
-contextfile=$ORACLE_HOME/appsutil/$CONTEXT_NAME.xml \
-oraclehome=$ORACLE_HOME \
-outdir=$ORACLE_HOME/appsutil/log \
-mode=createDirObject

perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \
-contextfile=$ORACLE_HOME/appsutil/$CONTEXT_NAME.xml \
-oraclehome=$ORACLE_HOME \
-outdir=$ORACLE_HOME/appsutil/log \
-mode=syncUtlFileDir \
-skipautoconfig=yes

Step 16: Configure Target Application Node (appsTier dualfs)

cd /u01/apps/PERP/fs2/EBSapps/comn/clone/bin
perl ./adcfgclone.pl appsTier dualfs

Step 17: Start EBS Application Services

. /u01/apps/PERP/fs2/EBSapps.env run

cd $ADMIN_SCRIPTS_HOME
./adstrtal.sh



If this post helped you, please follow and support:

YouTube: https://www.youtube.com/@foalabs