Showing posts with label Oracle EBS 12.1.3 Clone. Show all posts
Showing posts with label Oracle EBS 12.1.3 Clone. Show all posts

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.