Thursday, 26 March 2026

Oracle EBS 12.1.3 Clone

 

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.

 


No comments: