A Practical .bash_profile for Zero Downtime Migration (ZDM) Hosts

A ZDM host tends to get used in short, frequent bursts — check if the service is up, check a job’s status, tail a log, confirm a wallet credential exists — usually while something else is waiting on the outcome. Typing full zdmcli/zdmservice invocations every time adds friction that’s easy to eliminate with a properly built .bash_profile. This one is built around three things: an always-visible service status in the prompt, one-word shortcuts for the commands used constantly, and functions for the ones used occasionally but painfully without them. ...

July 9, 2026 · 5 min · mardaff

Zero Downtime Migration (ZDM) Software Installation

Zero Downtime Migration (ZDM) is Oracle’s orchestration engine for physical and logical database migrations into OCI — it doesn’t move data itself so much as drive Data Guard, RMAN, Data Pump, and GoldenGate through a coordinated migration workflow. Before any of that, though, ZDM needs its own service host set up correctly. This walks through that installation end to end. Prerequisites ZDM host placement. The ZDM service can run on an OCI compute instance, an on-premises server, or a VM in another cloud — the only hard requirement is network reachability to both the source and target database hosts. It does not need to sit on either database server itself, and in most real deployments it shouldn’t. ...

July 9, 2026 · 3 min · mardaff

Zero Downtime Migration (ZDM) Software Patching

ZDM ships frequent one-off patches, and Oracle Support will generally ask for the current patch level before troubleshooting any migration issue — so keeping a ZDM host patched isn’t optional maintenance, it’s a prerequisite for getting help when something goes wrong mid-migration. This walks through patching an existing install from 21.6.0 to 21.6.3. Prerequisites At least 15 GB free storage — the patch process backs up the existing ZDM_HOME and ZDM_BASE before applying anything, and those backups land in the directory you run the patch from. The zdmuser account needs write access to the path passed as ziploc. No active migration jobs should be running against this ZDM host during the patch — check zdmcli query job first if you’re not sure. Step 1: Check the Current Version Always confirm the starting point before patching — it’s the only way to be certain the patch actually did something afterward: ...

July 9, 2026 · 3 min · mardaff

Zero Downtime Migration (ZDM) Wallet Setup for Passwordless Execution

Run a ZDM migration job interactively and it will stop repeatedly to ask for passwords — source admin, target admin, GoldenGate admin, TDE keystore, and more, depending on the migration type. That’s fine for a one-off manual run, but it breaks entirely once ZDM is kicked off from a scheduler, a CI/CD pipeline, or an unattended runbook. The fix is wallet-based credential storage: ZDM reads passwords from an Oracle wallet instead of prompting for them. ...

July 9, 2026 · 4 min · mardaff

Migrating On-Premises Oracle Databases to OCI: Tools, Strategies, and Pitfalls

Migrating an Oracle database to OCI involves more than moving data — it requires selecting the correct migration toolchain, designing for cutover, and managing risk. Oracle provides multiple migration paths, and choosing incorrectly leads to extended downtime or data integrity issues. This article compares the major approaches and provides decision criteria. Migration Approach Decision Tree Is downtime during migration acceptable? ├── YES (hours or more acceptable) │ ├── Database size < 1 TB → Data Pump (expdp/impdp) over network or pre-stage to Object Storage │ └── Database size > 1 TB → RMAN duplicate or backup/restore to OCI Object Storage └── NO (near-zero or zero downtime required) ├── Source is Oracle → Zero Downtime Migration (ZDM) with GoldenGate └── Source is non-Oracle → OCI Database Migration Service (DMS) Zero Downtime Migration (ZDM) Oracle ZDM is the recommended tool for migrating Oracle databases to OCI with minimal or zero downtime. It orchestrates a combination of RMAN (initial bulk copy) + GoldenGate (ongoing replication during migration) in an automated workflow. ...

March 1, 2026 · 5 min · mardaff

ZDM Migration: Exadata X8 On-Premises to Oracle Database@Azure (ADB-S) via GoldenGate

This article presents a complete, real-world migration playbook for moving an Oracle Database from an on-premises Exadata X8 to Oracle Database@Azure Autonomous Database Serverless (ADB-S). The two data centres are 70 km apart, connected via a dedicated Azure ExpressRoute circuit. We use Oracle Zero Downtime Migration (ZDM) with GoldenGate replication to achieve a sub-minute application downtime. Environment Diagram ┌─────────────────────────────────────────────────────────────────┐ │ ON-PREMISES DATA CENTRE (Frankfurt) │ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ EXADATA X8 FULL RACK │ │ │ │ │ │ │ │ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ x8db01 │ │ x8db02 │ Compute nodes │ │ │ │ │ (RAC inst1) │ │ (RAC inst2) │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ │ │ │ │ └──────── IB ─────────┘ │ │ │ │ ┌──────────────────┐ │ │ │ │ │ Storage Cells │ (8 cells) │ │ │ │ │ x8cel01–x8cel08 │ │ │ │ │ └──────────────────┘ │ │ │ │ │ │ │ │ Database: ORCL (CDB), PDB: PDB_ERPSYS │ │ │ │ Size: 3.2 TB (data) + 400 GB indexes │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ ZDM Service Host: zdmhost01.prod.example.com │ │ │ │ GoldenGate Extract: running on x8db01 (Integrated) │ │ │ └──────────────────────────────────────────────────────────┘ │ │ │ │ │ Azure ExpressRoute │ │ │ Dedicated, 10 Gbps, 70 km │ │ │ RTT: ~0.7 ms (measured) │ │ │ │ └─────────────────────┼──────────────────────────────────────────-─┘ │ ┌──────────────────────┼──────────────────────────────────────────┐ │ ORACLE DB@AZURE (West Europe — Amsterdam) │ │ │ │ │ ┌────────────────────▼──────────────────────────────────────┐ │ │ │ Oracle Database@Azure — ADB-S │ │ │ │ Display Name: adb-erpsys-prod │ │ │ │ DB Name: ADBERPSY │ │ │ │ Shape: 16 OCPUs, auto-scale │ │ │ │ Storage: 10 TB (elastic) │ │ │ │ TLS: mTLS (wallet-based) │ │ │ │ │ │ │ │ OCI GoldenGate (Managed Microservices deployment) │ │ │ │ GG Service: gg-erpsys-deployment │ │ │ │ Replicat: REP_ERPSYS (Integrated) │ │ │ └────────────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────┘ Network Architecture On-Premises Exadata Azure ExpressRoute Oracle DB@Azure (Frankfurt DC) (Dedicated, 10 Gbps) (Amsterdam) 10.10.0.0/16 ───────────────────────────────────────► 172.16.0.0/16 Key Network Points: x8db01 public IP: 10.10.1.101 x8db01 SCAN IP: 10.10.1.200 (for GoldenGate source connection) zdmhost01: 10.10.5.50 OCI GoldenGate GW: 172.16.10.10 (private endpoint) ADB-S private EP: 172.16.20.5 (private endpoint in Oracle DB@Azure VNet) ExpressRoute Circuit: Provider: equinix-frankfurt Bandwidth: 10 Gbps dedicated Measured RTT (Frankfurt → Amsterdam): 0.7 ms Throughput achieved (iperf3): 9.2 Gbps (92% of capacity) Reference Environment SOURCE (On-Premises Exadata X8): RAC node 1: x8db01.prod.example.com (oracle user) RAC node 2: x8db02.prod.example.com Storage cells: x8cel01–x8cel08.prod.example.com ZDM host: zdmhost01.prod.example.com (oracle user, ZDM installed here) DB unique name: ORCL PDB: PDB_ERPSYS Data size: 3.2 TB DB version: 19.18.0.0 TARGET (Oracle DB@Azure): Region: Azure West Europe (Amsterdam) Resource Group: rg-oracle-prod ADB name: adb-erpsys-prod ADB DB Name: ADBERPSY Service name: adberpsy_high (high priority service) mTLS wallet dir: /etc/oracle/adb_wallet/ (on zdmhost01) OCI GG deploy: gg-erpsys-deployment (Microservices, managed by Oracle) OCI GG version: 21c ADMIN JUMP HOST: admin01.prod.example.com (used for OCI CLI, ZDM monitoring) Phase 1: Pre-Migration Assessment 1.1 Network Latency and Throughput Validation Before any migration work, validate the ExpressRoute circuit performance from the ZDM host: ...

March 1, 2026 · 10 min · mardaff