Why EBS Cloning Is Not Like Standard Oracle Cloning

Cloning an Oracle E-Business Suite 12.2 instance is significantly more involved than cloning a regular Oracle database. EBS has two distinct tiers — the database tier and the applications tier — and each has its own clone procedure. The two tiers must be cloned in coordination, and the post-clone configuration steps are mandatory and non-trivial.

The procedure documented here is based on EBS 12.2.x using the standard rapidclone/adcfgclone approach. This is the Oracle-supported method and the one you should use for any production clone.

Pre-Clone Checklist

Before you run any preclone scripts, verify:

Source Environment


Target Environment

Network

Step 1: Run adpreclone on Source DB Tier

Log in to the source database server as the oracle OS user (not as applmgr):

export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
export ORACLE_SID=EBSDEV

# The preclone script is generated by autoconfig and lives in appsutil
# Find your context name first
ls $ORACLE_HOME/appsutil/scripts/

# Run preclone — this creates the RDBMS clone template
perl $ORACLE_HOME/appsutil/scripts/EBSDEV_sourcehost/adpreclone.pl dbTier

# Expected output ends with:
# Completed adpreclone.pl for dbTier

This script does several things:


Check the log for errors:

ls -lrt $ORACLE_HOME/appsutil/log/EBSDEV_sourcehost/
# Review the most recent adpreclone log

Step 2: Run adpreclone on Source Apps Tier

Log in to the source applications server as the applmgr OS user:

# Source the EBS environment
source /u01/install/APPS/EBSapps.env run

# Run preclone on the apps tier
perl $AD_TOP/bin/adpreclone.pl appsTier

# You will be prompted for the APPS password
# Enter it and wait — this takes 10–20 minutes

# Expected output:
# adpreclone.pl: Completed preclone for appsTier.

The apps tier preclone:


Step 3: Shut Down Source (for Clean Clone) or Use Hot Backup

For a development clone where a brief outage is acceptable:

# Stop apps services
$ADMIN_SCRIPTS_HOME/adstopall.sh

# Take an RMAN backup of the DB
rman target /
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;
RMAN> EXIT;

# Or if you want an offline consistent backup
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE;
RMAN> ALTER DATABASE OPEN;
RMAN> EXIT;

For a production-equivalent clone that cannot afford downtime, use an RMAN online backup while the apps preclone scripts handle the apps tier files.

Step 4: Transfer Files to Target

# Transfer DB files via tar + rsync — faster than cp for many small files
# On source DB tier:
cd $ORACLE_HOME/appsutil
tar czf /backup/staging/appsutil_clone.tar.gz clone/

# Transfer to target DB host
rsync -avz --progress /backup/staging/ oracle@targetdbhost:/backup/staging/

# Transfer RMAN backup files
rsync -avz --progress /backup/rman/ oracle@targetdbhost:/backup/rman/

# On source apps tier — the apps files are large; use rsync with compression
# This is the bulk of the transfer time (100–300GB typical)
rsync -avz --progress --exclude='*.log' \
  /u01/install/APPS/ applmgr@targetappshost:/u01/install/APPS/

If source and target are on the same SAN or NFS, you can use consistent snapshots instead of file transfer — significantly faster for large environments.

Step 5: Restore and Configure Target DB Tier

On the target database server, as the oracle OS user:

# Extract the appsutil clone template
cd $ORACLE_HOME
tar xzf /backup/staging/appsutil_clone.tar.gz

# Restore RMAN backup
rman target /
RMAN> RESTORE DATABASE FROM '/backup/rman/';
RMAN> RECOVER DATABASE;
RMAN> ALTER DATABASE OPEN RESETLOGS;
RMAN> EXIT;

# Change the DB name (if cloning to a different SID)
# Use nid for DBID change if needed
nid target=/ dbname=EBSCLONE

# Export ORACLE_SID pointing to new SID
export ORACLE_SID=EBSCLONE

# Run adcfgclone for the DB tier
# This updates all the configuration to the new hostname, SID, and paths
perl $ORACLE_HOME/appsutil/clone/bin/adcfgclone.pl dbTier

# You will be prompted for:
# - New DB SID
# - New target hostname (short hostname, not FQDN)
# - New ORACLE_HOME path (press Enter to keep same)
# - New domain name
# - APPS password

The adcfgclone.pl dbTier script:


Check the log carefully:

ls -lrt $ORACLE_HOME/appsutil/log/
# Any errors in adcfgclone.txt need to be resolved before proceeding

Step 6: Configure Target Apps Tier

On the target applications server, as the applmgr OS user:

# The apps files were already rsync'd to the target
# Run adcfgclone for the apps tier
cd $COMMON_TOP/clone/bin  # or wherever adcfgclone.pl was transferred

perl adcfgclone.pl appsTier

# You will be prompted for all the configuration:
# - Target apps server hostname
# - Target DB hostname
# - Target DB SID
# - Target DB port (typically 1521)
# - APPS password
# - Weblogic admin password
# - JDK home path
# - etc.

This script runs for 30–60 minutes. It:


Step 7: Post-Clone Configuration

After adcfgclone completes successfully on both tiers:

Unlock APPS and APPLSYS Accounts

-- On target DB, as SYSDBA
ALTER USER APPS IDENTIFIED BY <newpassword> ACCOUNT UNLOCK;
ALTER USER APPLSYS IDENTIFIED BY <newpassword> ACCOUNT UNLOCK;

-- If the password was changed, update context file and run autoconfig again
-- OR update the .env files manually

Reset Application-Level Passwords

-- Oracle EBS sysadmin password reset
BEGIN
    FND_USER_PKG.UpdateUser(
        x_user_name     => 'SYSADMIN',
        x_owner         => 'CUST',
        x_unencrypted_password => '<newpassword>',
        x_password_date => SYSDATE
    );
    COMMIT;
END;
/

Verify Autoconfig Ran Clean

# Check latest autoconfig log on both tiers
# DB tier
ls -lrt $ORACLE_HOME/appsutil/log/*/autoconfig.txt

# Apps tier
ls -lrt $APPL_TOP/admin/EBSCLONE_targetappshost/log/
# Last file should be adconfig.txt with no errors

Update Context File if Needed

If any parameters were entered incorrectly during adcfgclone, edit the context file and re-run autoconfig:

# DB context file location
vi $ORACLE_HOME/appsutil/EBSCLONE_targetdbhost.xml

# Apps context file
vi $APPL_TOP/admin/EBSCLONE_targetappshost.xml

# Re-run autoconfig after any context file change
$ADMIN_SCRIPTS_HOME/adautocfg.sh

Step 8: Services Validation

# Start database
$ORACLE_HOME/bin/dbstart $ORACLE_HOME

# Start listener
lsnrctl start

# Verify tnsping works from apps tier to DB tier
tnsping EBSCLONE

# Start apps services
$ADMIN_SCRIPTS_HOME/adstartall.sh

# Check all services came up
$ADMIN_SCRIPTS_HOME/adstrtal.sh

# Verify WebLogic Admin Server
$FMW_HOME/user_projects/domains/EBS_domain/bin/startWebLogic.sh &

Post-Clone Validation Checklist

Run these SQL checks before declaring the clone usable:

-- 1. Verify DB is open and APPS schema is accessible
SELECT GLOBAL_NAME FROM GLOBAL_NAME;
SELECT COUNT(*) FROM APPS.FND_USER;

-- 2. Check for invalid objects
SELECT OWNER, COUNT(*) CNT FROM DBA_OBJECTS
WHERE STATUS = 'INVALID'
GROUP BY OWNER ORDER BY 2 DESC;
-- If APPS or APPLSYS have invalids, run utlrp.sql
-- @?/rdbms/admin/utlrp.sql

-- 3. Check profile options for new hostname
SELECT PROFILE_OPTION_NAME, PROFILE_OPTION_VALUE
FROM FND_PROFILE_OPTION_VALUES v, FND_PROFILE_OPTIONS o
WHERE o.PROFILE_OPTION_ID = v.PROFILE_OPTION_ID
  AND PROFILE_OPTION_NAME LIKE '%HOST%'
  AND LEVEL_ID = 10001;

-- 4. Verify Concurrent Manager can connect
-- Try starting ICM and checking FND_CONCURRENT_PROCESSES
SELECT INSTANCE_NUMBER, STATUS_CODE, RUNNING_PROCESSES
FROM FND_CONCURRENT_QUEUES
WHERE CONCURRENT_QUEUE_NAME = 'STANDARD';

Common Clone Failures

adcfgclone Fails at Relink

Usually a missing library or wrong ORACLE_HOME path. Check:
ls $ORACLE_HOME/lib/libclntsh.so.*
# If missing, the Oracle home was not transferred correctly

tnsping Works but Apps Cannot Connect to DB

Check that the DB listener is using the correct protocol address and that the apps tier tnsnames.ora has the correct entry. Also verify the connection test from the apps tier OS user:
sqlplus apps/<pwd>@EBSCLONE

WebLogic Admin Server Not Starting

Usually due to a hostname mismatch in the WebLogic domain configuration. Check:
grep -r "listen-address" $FMW_HOME/user_projects/domains/EBS_domain/config/config.xml
# Ensure all addresses match the new target hostname

Context File Variables Not Updated Correctly

If autoconfig ran but some files still have old hostnames:
grep -r "oldhost" $APPL_TOP/admin/ | grep -v ".log" | head -20
# Edit context file and re-run adautocfg.sh

TuneVault and Cloned Environments

After an EBS clone, the target environment inherits whatever health issues the source had — plus potentially new ones introduced during the clone. TuneVault's post-clone health check verifies invalid objects, listener configuration, tablespace status, Concurrent Manager accessibility, and EBS-specific configuration checks that confirm the clone is fully functional before developers or QA teams start using it.