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
- EBS is at a clean state — no active ADOP patch cycles, no pending concurrent requests that must complete
- Both DB and apps services are running normally
- Autoconfig ran successfully in the last 24 hours (check $APPL_TOP/admin/logs)
- No FS corruption issues on either tier
Target Environment
- Target OS is the same version as source (same Linux release, same kernel family)
- Oracle DB software installed to same ORACLE_HOME path as source (for rapidclone to work cleanly)
- EBS software will be cloned — do not pre-install EBS on target
- Sufficient disk space: DB tier needs space for all datafiles + archive logs; apps tier needs space for all EBS application files (typically 100–300GB)
- Target hostnames have forward and reverse DNS resolution
Network
- Source and target can communicate on Oracle listener port (1521 or your custom port)
- Target apps host can reach target DB host on 1521
- Both hosts have internet or proxy access for any post-clone patches (if needed)
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:
- Creates a clone template directory under
$ORACLE_HOME/appsutil/clone/ - Captures the current Oracle home configuration
- Does NOT stop the database — source stays live
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:
- Removes environment-specific configuration from the scripts (replaces paths with tokens)
- Creates the clone template in
$INST_TOP/admin/scripts/ - Compresses the JAVA_TOP and other large directories for transfer
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:
- Updates the DB context file with new hostnames and parameters
- Relinks Oracle binaries for the new environment
- Runs autoconfig on the DB tier
- Creates new listener and tnsnames configuration
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:
- Updates all context file variables with new hostnames and paths
- Runs autoconfig on the applications tier
- Regenerates all startup/shutdown scripts
- Reconfigures the WebLogic domain
- Updates tnsnames.ora and listener.ora
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.