ZDM vs Traditional Rapid Clone — Which to Use
For the database tier, you have two options when moving EBS 12.2 to OCI:
ZDM (Zero Downtime Migration): Best for databases over 2TB or when the maintenance window is under 4 hours. ZDM automates Data Guard setup, redo transport, and the switchover. It requires a dedicated ZDM service host, OCI CLI configured on both source and target, and a more complex setup that takes a day to prepare.
RMAN to Object Storage: Right for databases under 500GB, for teams doing their first OCI migration, or when you have a 6–12 hour maintenance window. Full control, no extra software, same process as any RMAN restore.
For the application tier, use rapid clone (adpreclone + adcfgclone) in both cases. ZDM handles the database only.
OCI Prerequisites Specific to EBS
VCN and Subnet Design
EBS on OCI requires three subnets at minimum:
| Subnet | Type | Key Inbound Ports |
|--------|------|-------------------|
| DB subnet | Private | 1521 (listener), 1526 (RAC secondary) |
| App tier subnet | Private | 7001–7002 (WLS), 8000–8021 (EBS HTTP), 1647 (apps listener), 6701 (OPMN) |
| Load balancer subnet | Public | 443, 80 |
Security list rules must allow the app tier subnet to reach the DB subnet on port 1521. A common mistake is creating the DB system first and adding the security list rule only after the app tier is already deployed and failing to connect.
Shape Selection
- DB tier:
VM.Standard2.8(16 OCPU, 120GB RAM) as a minimum for databases under 1TB. For I/O-heavy OLTP,VM.DenseIO2.8provides local NVMe with lower latency. - App tier:
VM.Standard2.8minimum for EBS 12.2. WebLogic heap alone needs 8–16GB; with OHS, OPMN, Forms, and the concurrent tier all on one node, 120GB RAM fills up quickly.
Object Storage Bucket
Create the bucket before starting the RMAN backup:
# Create bucket in the correct compartment
oci os bucket create --compartment-id <compartment_ocid> --name ebs-migration-rman --namespace <namespace>
DB Tier Migration — RMAN to Object Storage
Install and Configure OCI CLI on Source
# Install OCI CLI
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
Configure credentials
oci setup config
Enter: user OCID, tenancy OCID, region, path to API signing key
Run RMAN Backup and Upload
# Take a compressed backup to local staging area
rman target / << RMAN
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO COMPRESSED BACKUPSET;
BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG
FORMAT '/backup/rman/ebs_%U.bkp';
RMAN
Upload to Object Storage (parallel, 10 concurrent uploads)
oci os object bulk-upload --bucket-name ebs-migration-rman --src-dir /backup/rman --parallel-upload-count 10 --namespace <namespace>
Restore on the OCI DB System
# Download backup from Object Storage to OCI DB System
oci os object bulk-download --bucket-name ebs-migration-rman --dest-dir /backup/rman --parallel-download-count 10 --namespace <namespace>
Restore and recover
rman target / << RMAN
RESTORE DATABASE FROM '/backup/rman/';
RECOVER DATABASE;
ALTER DATABASE OPEN RESETLOGS;
RMAN
-- Verify the restored database
SELECT name, db_unique_name, open_mode, database_role FROM v$database;
-- open_mode should be READ WRITE
App Tier Migration
Prepare Source App Tier for Clone
# On source DB tier (as oracle user)
export ORACLE_SID=EBSPROD
perl $ORACLE_HOME/appsutil/scripts/${ORACLE_SID}_$(hostname)/adpreclone.pl dbTier
On source app tier (as applmgr user)
source /u01/install/APPS/EBSapps.env run
perl $AD_TOP/bin/adpreclone.pl appsTier
Archive and Transfer to OCI
# Create archive (skip logs and temp files to reduce size)
tar -czf /backup/apps_$(date +%Y%m%d).tar.gz --exclude='.log' --exclude='.out' --exclude='$APPL_TOP/*/log' $APPL_TOP $INST_TOP $COMMON_TOP
Upload to Object Storage
oci os object put --bucket-name ebs-migration-rman --file /backup/apps_$(date +%Y%m%d).tar.gz --name apps_$(date +%Y%m%d).tar.gz
On OCI compute: download and extract
oci os object get --bucket-name ebs-migration-rman --name apps_$(date +%Y%m%d).tar.gz --file /backup/apps.tar.gz
tar -xzf /backup/apps.tar.gz -C /
Run adcfgclone on OCI Compute
cd $COMMON_TOP/clone/bin
perl adcfgclone.pl appsTier
Runs 30–60 minutes
Prompts for new app tier hostname, DB connection string, ports
Post-Clone Autoconfig for OCI Hostnames
Every EBS service uses hostnames pulled from the context file. After a clone to OCI, all the old source hostnames need to be replaced.
Update the Context File
Open $CONTEXT_FILE (found by running echo $CONTEXT_FILE as applmgr) and update:
s_webentryhost: the OCI compute public IP or load balancer hostnames_webentryurlport: 443 for SSL, 8000 for non-SSLs_login_page: full URL to the EBS login pages_dbhost: the OCI DB system private IP or hostname
perl $AD_TOP/bin/adautocfg.pl
Update FND_NODES
-- Check what node names are registered
SELECT node_name, server_address, support_cp, support_web, support_admin
FROM fnd_nodes ORDER BY node_name;
-- Update app tier node to the new OCI compute hostname
UPDATE fnd_nodes
SET node_name = UPPER('<new_oci_compute_hostname>'),
server_address = '<new_oci_private_ip>'
WHERE node_name = UPPER('<old_source_hostname>');
COMMIT;
Bounce All Services and Verify
$ADMIN_SCRIPTS_HOME/adstopall.sh
$ADMIN_SCRIPTS_HOME/adstartall.sh
Verify EBS login page responds
curl -sk https://<new_hostname>/OA_HTML/AppsLocalLogin.jsp | grep -i "login|oracle"
Common Post-Clone Failures on OCI
SSL Certificate Errors in OHS
The old SSL wallet references the source hostname. After cloning, regenerate the wallet using Oracle Wallet Manager (owm), or set s_ssl_enabled to false in the context file and re-run autoconfig for a plain HTTP test environment.
FNDSM Not Starting
FNDSM startup failure after autoconfig almost always means the apps listener hostname in tnsnames.ora still references the old hostname. Check:
grep -i $(hostname) $TNS_ADMIN/tnsnames.ora
Should show the new OCI hostname; if not, re-run autoconfig after
verifying s_dbhost and s_appservnode in the context file
Reports Servlet 404
Check s_reportsserver in the context file — it must match the new OCI compute hostname. Update it, re-run autoconfig, and bounce the Reports Server in the WebLogic console.
WebLogic Managed Servers Not Starting
OCI Security Lists block all inbound ports by default. After migration, verify that the following ports are open within the app tier Security List: 7001 (AdminServer), 7201–7210 (managed servers), 5556 (Node Manager). Without Node Manager connectivity, the AdminServer cannot start managed servers remotely.