|
wizertech.com |
DBA Operations |
|
Oracle EBS
12.1.3 Clone |
|
Step-by-Step
Runbook |
|
19c Database (DBCS) →
Compute Instance | With TDE Wallet |
|
EBS Version |
Oracle
E-Business Suite 12.1.3 |
|
DB Version |
Oracle 19c
(19.24.0.0.0) |
|
Source
CDB/PDB |
PRODCDB / prod |
|
Target
CDB/PDB |
TESTCDB /
TESTPDB |
|
Target DB
Host |
ebsuatdb.wizertech.com |
|
Target App
Host |
ebsuatapp.wizertech.com |
|
Wallet
Location |
/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/ |
|
ORACLE_HOME |
/u01/app/oracle/product/19.0.0.0/dbhome_1 |
|
RMAN Backup |
/data/EBS_RMANBKP_2026-03-24/ |
|
Date |
March 2026 |
|
WARNING: Ensure target server has >= 16 GB swap space before
starting. Insufficient swap will cause adcfgclone.pl to fail. |
|
1 |
Verify Swap Space Minimum 16 GB
required |
Check swap on the
target server. Add a swapfile if less than 16 GB.
|
free -h # Swap total must show
>= 16G # Add swap if needed: dd if=/dev/zero
of=/swapfile bs=1G count=16 chmod 600 /swapfile
&& mkswap /swapfile && swapon /swapfile echo '/swapfile none swap
sw 0 0' >> /etc/fstab |
|
2 |
Create OS Groups and Users oracle/dba
group, oraeam & appleam users |
|
groupadd dba useradd -g dba oraeam useradd -g dba appleam usermod -g dba oraeam # Verify id oraeam && id
appleam |
|
3 |
Create Directory Structure & Set Permissions All paths
required by EBS 19c |
|
mkdir -p
/u01/app/oracle/product/19.0.0.0/dbhome_1 mkdir -p
/u01/app/oracle/db/temp/ mkdir -p
/u01/app/oracle/db/apps_st/data mkdir -p
/u01/app/oracle/db/admin/ mkdir -p
/u01/app/oracle/db/oradata/EBSCDB mkdir -p
/u01/app/oracle/temp/TESTPDB mkdir -p
/data/CDBPROD/datafiles mkdir -p
/data/Clone_Data mkdir -p
/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde chown -Rf
oracle:oinstall /u01/app/oracle chmod 775 /u01/app/oracle/temp/TESTPDB chmod -Rf 775
/u01/app/oracle/db chmod -Rf 777
/u01/app/oracle/tech_st/temp/ |
|
4 |
Extract DB Binary & Apps TAR Archives Unpack
prod.tar.gz and apps.tar.gz |
|
# Extract DB binary into
ORACLE_HOME cd
/u01/app/oracle/product/19.0.0.0/dbhome_1 tar -zxvf
/path/to/prod.tar.gz # Extract Apps archive cd /u01/app/oracle/db tar -zxvf
/path/to/apps.tar.gz # Verify ls
$ORACLE_HOME/bin/oracle |
|
PHASE 2 – DB
Context & TechStack Clone |
|
5 |
Run adpreclone.pl dbTier on SOURCE MANDATORY
first step – do not skip |
|
CORRECTION
C1: This step was missing from the original runbook. It is
mandatory per MOS 2560690.1 §4.1.1. |
|
# Run on SOURCE database
server export ORACLE_SID=prod cd
$ORACLE_HOME/appsutil/scripts/<CTX_NAME> perl adpreclone.pl
dbTier |
|
6 |
Generate Target DB Context File (adclonectx.pl) Creates
TESTPDB_ebsuatdb.xml |
|
Hostname |
ebsuatdb.wizertech.com |
|
Validate
inputs? |
n (no – remote system) |
|
Base
Directory |
/u01/app/oracle |
|
Target CDB
Name |
TESTCDB |
|
Target PDB
Name |
TESTPDB |
|
OS User /
Group |
oracle /
oinstall |
|
DATA_TOP
Dir |
/data/CDBPROD/datafiles |
|
ORACLE_HOME |
/u01/app/oracle/product/19.0.0.0/dbhome_1 |
|
cd
/u01/app/oracle/product/19.0.0.0/dbhome_1/appsutil/clone/bin perl adclonectx.pl \
contextfile=$ORACLE_HOME/appsutil/EBS_osdcebsdb.xml \
template=$ORACLE_HOME/appsutil/template/adxdbctx.tmp # Enter APPS password:
probook99 # Output:
/u01/app/oracle/product/19.0.0.0/appsutil/TESTPDB_ebsuatdb.xml |
|
|
7 |
Apply DB TechStack
(adcfgclone.pl dbTechStack) Reconfigures
ORACLE_HOME for target |
|
export
PATH=/u01/app/oracle/product/19.0.0.0/dbhome_1/perl/bin:$PATH cd
/u01/app/oracle/product/19.0.0.0/dbhome_1/appsutil/clone/bin perl adcfgclone.pl
dbTechStack \
/u01/app/oracle/product/19.0.0.0/dbhome_1/appsutil/TESTPDB_ebsuatdb.xml # Enter APPS password
when prompted # Log:
$ORACLE_HOME/appsutil/log/TESTPDB_ebsuatdb/ApplyDBTechStack_*.log |
|
PHASE 3 –
Listener, TNS & Wallet Setup |
|
8 |
Set Environment Variables Source CDB
environment for TESTCDB |
|
export
ORACLE_SID=TESTCDB export
ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1 export
PATH=$ORACLE_HOME/bin:$PATH export
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH cd $ORACLE_HOME/appsutil source
./txkSetCfgCDB.env -dboraclehome=$ORACLE_HOME |
|
9 |
Generate listener.ora and tnsnames.ora txkGenCDBTnsAdmin.pl |
|
cd
$ORACLE_HOME/appsutil/bin perl
txkGenCDBTnsAdmin.pl \ -dboraclehome=$ORACLE_HOME \ -cdbname=TESTCDB -cdbsid=TESTCDB
-dbport=1521 \ -outdir=$ORACLE_HOME/appsutil/log \ -israc=no cp
$ORACLE_HOME/appsutil/log/listener.ora
$ORACLE_HOME/network/admin/ cp
$ORACLE_HOME/appsutil/log/tnsnames.ora
$ORACLE_HOME/network/admin/ |
|
10 |
Start the CDB Listener TESTCDB
listener must be up for RMAN |
|
cd
$ORACLE_HOME/appsutil/scripts/ebsuatdb sh adcdblnctl.sh start
TESTCDB lsnrctl status TESTCDB |
|
11 |
Copy TDE Wallet Files from Source DBCS cwallet.sso
and ewallet.p12 |
|
scp
/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/cwallet.sso \
oracle@ebsuatdb.wizertech.com:/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/ scp
/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/ewallet.p12 \
oracle@ebsuatdb.wizertech.com:/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/ chmod 600
/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/*.sso chmod 600
/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/*.p12 |
|
12 |
Edit sqlnet.ora – Add ENCRYPTION_WALLET_LOCATION Required
before database startup |
|
# File:
$ORACLE_HOME/network/admin/sqlnet.ora # Add: ENCRYPTION_WALLET_LOCATION
= (SOURCE=(METHOD=FILE)(METHOD_DATA=
(DIRECTORY=/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/))) NAMES.DIRECTORY_PATH=(TNSNAMES,
ONAMES, HOSTNAME) SQLNET.EXPIRE_TIME=10 SQLNET.INBOUND_CONNECT_TIMEOUT=60 SQLNET.ALLOWED_LOGON_VERSION_SERVER=10 |
|
PHASE 4 –
RMAN Restore – Duplicate Database |
|
13 |
Edit pfile (initTESTCDB.ora) Set key
parameters before NOMOUNT startup |
|
vi
/data/initTESTCDB271225.ora # Required parameters: db_name=TESTCDB enable_pluggable_database=TRUE control_files=/data/CDBPROD/datafiles/control01.ctl db_recovery_file_dest=/data/CDBPROD/fast_recovery_area db_recovery_file_dest_size=50G audit_file_dest=/u01/app/oracle/db/admin/TESTCDB/adump mkdir -p
/u01/app/oracle/db/admin/TESTCDB/adump |
|
14 |
Start Database in NOMOUNT Mode Using pfile –
before RMAN duplicate |
|
sqlplus / as sysdba SQL> startup nomount
pfile='/data/initTESTCDB271225.ora'; -- Expected: ORACLE
instance started (NOT mounted) |
|
15 |
Run RMAN DUPLICATE (10 channels) Restores
TESTCDB from backup location |
|
WARNING: This is the longest step. Do NOT interrupt. Monitor the log
file. |
|
rman auxiliary /
log=/data/EBS_RMANBKP_2026-03-24/rman_output111.txt RMAN> run { allocate auxiliary channel C1 DEVICE TYPE DISK; allocate auxiliary channel C2 DEVICE TYPE DISK; allocate auxiliary channel C3 DEVICE TYPE DISK; allocate auxiliary channel C4 DEVICE TYPE DISK; allocate auxiliary channel C5 DEVICE TYPE DISK; allocate auxiliary channel C6 DEVICE TYPE DISK; allocate auxiliary channel C7 DEVICE TYPE DISK; allocate auxiliary channel C8 DEVICE TYPE DISK; allocate auxiliary channel C9 DEVICE TYPE DISK; allocate auxiliary channel C10 DEVICE TYPE
DISK; duplicate database to 'TESTCDB' backup location
'/data/EBS_RMANBKP_2026-03-24/' nofilenamecheck; release channel C1; release channel C2; release channel C3; release channel C4; release channel C5; release channel C6; release channel C7; release channel C8; release channel C9; release channel C10; } # Monitor: tail -f
/data/EBS_RMANBKP_2026-03-24/rman_output111.txt |
|
PHASE 5 –
Tempfile Cleanup |
|
16 |
Drop Old ASM Tempfiles from CDB$ROOT Source ASM
paths invalid on target |
|
sqlplus / as sysdba -- Check existing
tempfiles: SELECT tf.name,
tf.file#, ts.name AS tablespace_name FROM v$tempfile tf, v$tablespace ts WHERE tf.ts# = ts.ts# ORDER BY ts.name; -- Drop each ASM
tempfile: ALTER DATABASE TEMPFILE
'+DATA/CDBPROD_q7n_bom/tempfile_cdbprod_q7n_bom_1_1' DROP INCLUDING DATAFILES; -- Repeat for all ASM
tempfile rows shown |
|
17 |
Drop Old ASM Tempfiles from EBS PDB Switch to EBS
container and repeat |
|
ALTER SESSION SET
CONTAINER = EBS; ALTER DATABASE TEMPFILE
'+DATA/CDBPROD_q7n_bom/tempfile_cdbprod_q7n_bom_3_1' DROP INCLUDING DATAFILES; ALTER DATABASE TEMPFILE
'+DATA/CDBPROD_q7n_bom/tempfile_cdbprod_q7n_bom_3_2' DROP INCLUDING DATAFILES; |
|
18 |
Add New Tempfiles on Local Filesystem /data/CDBPROD/datafiles |
|
-- In EBS PDB: ALTER TABLESPACE TEMP1
ADD TEMPFILE '/data/CDBPROD/datafiles/CTEMP001.dbf' SIZE
5G AUTOEXTEND ON; -- Return to CDB$ROOT
and add CDB TEMP: ALTER SESSION SET
CONTAINER = CDB$ROOT; ALTER TABLESPACE TEMP
ADD TEMPFILE '/data/CDBPROD/datafiles/TEMP001.dbf' SIZE
2G AUTOEXTEND ON; |
|
PHASE 6 –
Wallet Export & PDB Unplug/Replug |
|
19 |
Export Encryption Keys from Source CDB & PDB Before unplug |
|
-- On SOURCE (PRODCDB) –
open wallet first ALTER SESSION SET
CONTAINER = EBS; ADMINISTER KEY
MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "WIpl##123"; -- Export PDB keys ADMINISTER KEY
MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "myPDBSecret" TO '/data/Clone_Data/PDB_EBS_Key.exp' IDENTIFIED BY "WIpl##123"; -- Export CDB root keys ALTER SESSION SET
CONTAINER = CDB$ROOT; ADMINISTER KEY
MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "mySecret" TO '/data/Clone_Data/CDB_Key.exp' IDENTIFIED BY "WIpl##123"; |
|
20 |
Unplug the EBS PDB Close, unplug,
and drop |
|
WARNING: Ensure RMAN backup is complete before unplugging the PDB. |
|
ALTER PLUGGABLE DATABASE
EBS CLOSE; ALTER PLUGGABLE DATABASE
EBS UNPLUG INTO '/data/Clone_Data/EBP_DB_XML.xml'; DROP PLUGGABLE DATABASE
EBS; SHOW PDBS; |
|
21 |
Create TESTPDB from the XML Manifest Plug EBS into
TESTCDB as TESTPDB |
|
CORRECTION
C3: The KEYSTORE IDENTIFIED BY clause is REQUIRED when
creating a TDE-encrypted PDB. Without it: ORA-28374. |
|
-- On TARGET (TESTCDB): CREATE PLUGGABLE
DATABASE "TESTPDB" USING '/data/Clone_Data/EBP_DB_XML.xml' NOCOPY KEYSTORE IDENTIFIED BY
"WIpl##123" DECRYPT USING "myPDBSecret"
SERVICE_NAME_CONVERT=('ebs_EBS','ebs_TESTPDB'); SHOW PDBS; -- Expected: TESTPDB MOUNTED |
|
PHASE 7 –
TDE Wallet Configuration on Target |
|
22 |
Set wallet_root in SPFILE Requires
database restart |
|
ALTER SYSTEM SET
wallet_root=
'/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom' SCOPE=SPFILE; SHUTDOWN IMMEDIATE; EXIT |
|
23 |
Startup & Set TDE_CONFIGURATION Activate TDE
File-based keystore |
|
sqlplus / as sysdba SQL> STARTUP; SHOW PARAMETER
wallet_root; -- VALUE:
/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom ALTER SYSTEM SET
TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=FILE' SCOPE=BOTH SID='*'; |
|
24 |
Open Keystore for All Containers CDB$ROOT,
PDB$SEED and TESTPDB |
|
-- Open CDB$ROOT +
PDB$SEED ADMINISTER KEY
MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "WIpl##123"
CONTAINER=ALL; -- Open TESTPDB
separately ALTER SESSION SET
CONTAINER = TESTPDB; ADMINISTER KEY
MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "WIpl##123"; |
|
25 |
Open TESTPDB & Create Auto-Login Keystore No password
needed on subsequent restarts |
|
ALTER SESSION SET
CONTAINER = CDB$ROOT; ALTER PLUGGABLE DATABASE
TESTPDB OPEN; ALTER PLUGGABLE DATABASE
TESTPDB SAVE STATE; -- Set new master
encryption key ADMINISTER KEY
MANAGEMENT SET KEY IDENTIFIED BY "WIpl##123" WITH
BACKUP CONTAINER=ALL; -- Create Local
Auto-Login keystore ADMINISTER KEY
MANAGEMENT CREATE LOCAL AUTO_LOGIN KEYSTORE FROM KEYSTORE
'/opt/oracle/dcs/commonstore/wallets/CDBPROD_q7n_bom/tde/' IDENTIFIED BY "WIpl##123"; SHUTDOWN IMMEDIATE; --
restart to test auto-login STARTUP; -- Verify: all CON_IDs
must show LOCAL_AUTOLOGIN SELECT CON_ID, WRL_TYPE,
STATUS, WALLET_TYPE FROM v$ENCRYPTION_WALLET; |
|
PHASE 8 –
Application Tier Clone |
|
26 |
Run adpreclone.pl appsTier on SOURCE MANDATORY –
prepare source app clone stage |
|
# Run on SOURCE
application server cd $ADMIN_SCRIPTS_HOME perl adpreclone.pl
appsTier |
|
27 |
Run adcfgclone.pl appsTier Reconfigures
the application layer |
|
Target App
Hostname |
ebsuatapp.wizertech.com |
|
Target DB
SID |
TESTPDB |
|
Target DB
Server Node |
ebsuatdb.wizertech.com |
|
Base
Directory |
/apps/install/APPS |
|
APPL_TOP |
/apps/install/APPS/apps_st/appl |
|
Instance
Home |
/apps/install/APPS/inst |
|
cd
/apps/install/APPS/apps_st/comn/clone/bin perl adcfgclone.pl
appsTier # Enter APPS password # At prompt: 'Start
Application Services? (y/n)': n # Log:
inst/apps/TESTPDB_ebsuatapp/admin/log/ApplyAppsTier_*.log |
|
|
PHASE 9 –
Post-Clone Database Tasks |
|
28 |
Run adupdlib.sql Updates shared
library links for the PDB |
|
cd
$ORACLE_HOME/appsutil/install/TESTPDB_ebsuatdb/ sqlplus / as sysdba
@adupdlib.sql so |
|
29 |
Recreate UTL_FILE_DIR get / set /
sync sequence |
|
export
PERL5LIB=$ORACLE_HOME/perl/lib/5.38.2:$ORACLE_HOME/appsutil/perl:$ORACLE_HOME/perl export
PATH=$ORACLE_HOME/perl/bin:$PATH perl
$ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ -contextfile=$CONTEXT_FILE
-oraclehome=$ORACLE_HOME \ -outdir=$ORACLE_HOME/appsutil/log \ -mode=getUtlFileDir -servicetype=onpremise perl
$ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ -mode=setUtlFileDir ...same params... perl
$ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ -mode=syncUtlFileDir ...same params... |
|
30 |
Reset User Accounts & Run SETUP_CLEAN Unlock system
accounts and clean clone state |
|
sqlplus / as sysdba ALTER USER system IDENTIFIED BY manager; ALTER USER ebs_system
IDENTIFIED BY manager ACCOUNT UNLOCK; CONNECT
apps/probook99@//ebsuatdb:1521/TESTPDB EXEC
FND_CONC_CLONE.SETUP_CLEAN; COMMIT; |
|
31 |
Update FND Profiles Site name, FS
prefix, colour scheme |
|
EXEC
FND_PROFILE.SAVE('SITENAME', 'TESTPDB (Data Till 24-DEC-25)', 'SITE'); EXEC
FND_PROFILE.SAVE('FS_SVC_PREFIX', 'FNDFS_TESTPDB_', 'SITE'); EXEC
FND_PROFILE.SAVE('FND_COLOR_SCHEME', 'PURPLE', 'SITE'); COMMIT; |
|
32 |
Clear Pending Concurrent Requests Cancel stale
requests from production |
|
UPDATE
fnd_concurrent_requests SET phase_code = 'C', status_code = 'X' WHERE phase_code = 'P' AND request_id NOT IN ( SELECT request_id FROM
fnd_conc_req_summary_v WHERE
program IN ( 'WIP Move Transaction Manager', 'Process transaction interface', 'Manager: Lot Move Transactions', 'Workflow Background Process','Cost
Manager') AND (phase_code='P' OR phase_code='R')); COMMIT; |
|
PHASE
10 –
Final Verification & Sign-Off |
|
33 |
Run AutoConfig on DB Tier Propagate
context file values |
|
cd
$ORACLE_HOME/appsutil/scripts/TESTPDB_ebsuatdb/ ./adautocfg.sh
apps/<apps_password> # Log:
$ORACLE_HOME/appsutil/log/TESTPDB_ebsuatdb/adconfig_*.log |
|
34 |
Verify FND_NODES & Change SYSADMIN Password Confirm nodes
and secure admin account |
|
-- Verify nodes SELECT node_name,
node_mode, support_cp, support_web, support_admin, support_forms FROM FND_NODES; -- Change SYSADMIN
password (run as applmgr with env sourced): .
/apps/install/APPS/inst/apps/TESTPDB_ebsuatapp/appl/admin/TESTPDB_ebsuatapp.env FNDCPASS
apps/<apps_pwd> 0 Y system/manager USER SYSADMIN
<NewSecurePassword> |
|
35 |
Start Application Services & Final Login Test Bring up all
EBS services |
|
cd
/apps/install/APPS/inst/apps/TESTPDB_ebsuatapp/admin/scripts ./adstrtal.sh
apps/<apps_password> # Verify services: ./adapcctl.sh status |
|
VERIFY: Log in via browser. Confirm: PURPLE colour scheme, correct
site name in banner, SYSADMIN login works. |