Thursday, September 24, 2026

Oracle Exadata Exascale Explained

Oracle Exadata Exascale Explained: A Practical Guide for DBAs | Punit Oracle DBA

Oracle Exadata Exascale explained: a practical guide for DBAs

What Exascale really changes, what stays the same, and how to get your team ready, in plain language with real commands.

Traditional Exadata compared with Exascale On the left, each VM cluster owns fixed ASM disk groups carved from the storage cells. On the right, all clusters share one storage pool, with vaults that have quotas instead of fixed slices. Traditional Exadata Exascale VM cluster A VM cluster B +DATAC1 / +RECOC1 fixed slice +DATAC2 / +RECOC2 fixed slice free, unusable by B Each cluster owns its own grid disks VM cluster A VM cluster B One shared storage pool (all cells) @PRODVAULT quota, access @DEVVAULT quota, access Free space belongs to everyone Clusters draw from one secured pool
The whole idea in one picture: fixed slices per cluster on the left, one shared and secured pool on the right.

Why Exascale matters now

Exascale was announced in July 2024, but 2026 is the year it moved into everyday DBA work. In August 2026, Oracle and AWS made Oracle Exadata Database Service on Exascale Infrastructure generally available through Oracle AI Database@AWS, across 22 AWS Regions. On OCI, Exascale VM storage is now an option for Exadata Database Service on Dedicated Infrastructure, and the X11M-XT storage servers support Exascale on-premises.

In short, if you support Exadata, whether on-premises, in OCI, with Cloud@Customer or in a multicloud setup, you will meet Exascale soon. This guide gets you ready.

What Exascale is, in one sentence

Exascale is a new storage architecture for Exadata that replaces per-cluster disk groups with one shared, secured storage pool that every cluster draws from on demand.

It is software, not a new hardware model. It arrived with Exadata System Software release 24.1.0.

The easy analogy: an apartment building's water supply

In traditional Exadata, every apartment (each VM cluster) has its own private water tank (its own ASM disk groups). If one tank runs dry while the neighbour's tank is full, you call a plumber (the DBA) to rearrange tanks.

With Exascale, the building has one big shared water system. Every apartment turns on the tap and gets what it needs. The building manager simply puts a meter and a lock on each apartment.

Everyday wordExascale term
The shared water systemStorage pool: all storage cells combined
Each apartment's meter and lockVault: your space, with a quota and access rules
The pipesRDMA network fabric
The apartmentsVM clusters running your databases

Architecture: pools, vaults and volumes

Three ideas explain almost everything about Exascale.

1. Storage is decoupled from clusters

Exascale separates database and Grid Infrastructure clusters from the storage servers underneath. A single Exascale deployment manages a large fleet of storage servers over the RDMA fabric. Files in a vault are spread across every cell in the pool, so each database can use the I/O bandwidth of the whole system instead of a small slice of it.

2. The vault replaces the ASM disk group

You don't carve grid disks per cluster anymore. You create vaults, give them quotas and access rules, and change them online. Isolation comes from security rather than physical partitioning: users and databases can only reach data they have privileges for.

3. Database servers stop doing storage management

With Oracle AI Database 26ai, Exascale takes over file and extent management. Native Exascale databases don't need an ASM instance on the compute nodes, so that CPU and memory go back to the database. Older database releases use Exascale Volumes, which are RDMA-enabled block volumes, typically formatted with ACFS. VMs also use Exascale Volumes for their own images instead of local disks on the database servers.

The services behind the scenes

ServiceWhat it does
EGS (Exascale Global Services)Control plane: cluster membership, pool metadata, coordination
ERS (Exascale RESTful Services)Management endpoint used by escli and cloud tooling
EDS (Exascale Data Services)File and vault metadata services
BSM / BSW (Block Store Manager / Worker)Serve Exascale Volumes to VMs
CELLSRVStill performs the actual I/O, Smart Scan and flash caching

What stays the same: Smart Scan, storage indexes, flash and XRMEM caching, and RDMA reads are all still in the data path. Exascale changes how storage is organized and provisioned, not how Exadata accelerates your SQL.

Vaults and escli in practice

A vault is basically your new disk group, with one visible difference: ASM names start with +, Exascale vault names start with @.

Old way (ASM)New way (Exascale)
+DATAC1@DATAVAULT
+RECOC1@RECOVAULT
Size fixed when grid disks are carvedSize is a quota you can change online
Managed with asmcmdManaged with escli

Everyday escli commands

escli is the Exascale command-line tool. It follows Linux habits: ls to look, mk to make, ch to change, rm to remove.

# Look around
escli lsstoragepool       # how big is the shared pool, and how full?
escli lsvault             # which vaults exist, and how much do they use?
escli lsfile @DATAVAULT   # which files live in this vault?
escli lsuser              # who has access?

# Make, change, remove
escli mkvault @DEVVAULT
escli chvault @DEVVAULT   # for example, change its size limit
escli rmvault @DEVVAULT   # careful: removes the vault

Option names for quotas and attributes can differ between Exadata System Software releases. Run escli help mkvault or check the Exascale documentation for your version, and always practise on a dev system first.

Pointing the database at a vault

-- Old ASM way
ALTER SYSTEM SET db_create_file_dest = '+DATAC1';

-- Exascale way
ALTER SYSTEM SET db_create_file_dest = '@DATAVAULT';

After that, CREATE TABLESPACE works as usual and Oracle places the files in the vault.

Update your monitoring

Space-check scripts built on v$asm_diskgroup won't cover Exascale. Add checks based on escli lsvault and escli lsstoragepool, and alert at two levels:

  • Vault level: is a vault close to its quota?
  • Pool level: is the whole shared pool filling up? Because it is shared, one runaway vault affects everyone.

Snapshots and thin clones

This is the feature most DBAs fall for. Think about the request every DBA knows: "Can you refresh DEV from PROD by tomorrow morning?" The old answer is an RMAN duplicate that copies every block, takes hours, and doubles the space.

The easy analogy: a shared textbook

Thirty students need the same 1,000-page textbook. You could photocopy it thirty times (30,000 pages). Or everyone reads the same original, and when a student wants to write on page 52, they get their own copy of just that page. That second approach is a thin clone: it shares every unchanged block with the source and stores only the blocks that change. It is created in minutes, because almost nothing is copied.

TermPlain meaningWritable?
SnapshotA frozen photo of the data at one momentNo
CloneA new working copy made from that photoYes

How you do it for PDBs

On Exascale, snapshots and clones are integrated with standard Oracle SQL. There's no sparse disk group or test master to prepare.

-- Thin clone of a PDB for dev or test
CREATE PLUGGABLE DATABASE DEVPDB FROM PRODPDB SNAPSHOT COPY;

-- Named point-in-time snapshot before a risky change
ALTER PLUGGABLE DATABASE SNAPSHOT before_patch;

Source requirements, such as whether the source PDB can stay open read-write, depend on your database version and Exascale release. Confirm them in the documentation before you build a runbook around these commands.

Where DBAs use it every day

  • Dev and test refresh in minutes instead of hours.
  • Patch testing: clone PROD, patch the clone, test safely.
  • Bug reproduction: give developers their own copy of the exact problem data.
  • Safety net: snapshot before a risky change so you have a quick fallback point.

Migrating to Exascale

The good news: moving to Exascale uses tools you already know. The right path depends mainly on your database version and how much downtime you can accept.

Step 1: decide native or volume-based

  • Oracle AI Database 23ai / 26ai: store files natively in vaults and get the full benefit, including no ASM on the compute nodes and built-in thin clones.
  • Older releases such as 19c: run on Exascale Volumes, typically with ACFS. You gain elastic, pooled storage, but not every native feature. Many teams use this as a first step and go native after upgrading.

Step 2: pick a migration method

MethodDowntimeGood for
Data Guard switchover (often driven by Zero Downtime Migration)MinutesLarge production databases
RMAN backup and restore, or duplicateHours, depends on sizeSimple moves, non-production
PDB relocate or unplug/plugLowConsolidation into a new CDB on Exascale
Data Pump export/importHigherUpgrades combined with reorganization or character set work
Online datafile move to a vaultNone for the move itselfExisting 23ai/26ai databases already on an Exascale-enabled system

Step 3: before cutover

  1. Size vault quotas with growth headroom, and set pool-level alerts.
  2. Rebuild space monitoring around escli (see above).
  3. Update backup scripts and RMAN destinations from +RECO paths to @ vaults.
  4. Run a performance baseline (AWR) before and after, so you can prove the result.
  5. Write the runbook and rehearse a full switchover on non-production.

The EBS DBA's checklist

Oracle E-Business Suite adds extra care, because certification moves more slowly than the database platform.

  1. Check certification first. Confirm your exact combination of EBS release, database version and Exascale deployment in the certification section of My Oracle Support before promising anything to the business.
  2. Expect the volume route for 19c. Many EBS 12.2 estates run on 19c, which means Exascale Volumes rather than native vault files.
  3. Thin clones are only half an EBS clone. A storage clone copies the database. You still need Rapid Clone, adcfgclone and your post-clone scripts for the application tier.
  4. Review online patching space. ADOP patch editions and patching cycles consume space. Size the vault quota to include it.
  5. Retest your custom scripts. Anything that hard-codes +DATA paths, such as cloning, archiving or purge scripts, needs updating to @ vault paths.

Where Exascale fits, and where it doesn't

Strong fit

  • Consolidation platforms hosting many small to medium databases.
  • Dev and test estates with frequent refreshes.
  • Teams wanting Exadata performance in AWS, OCI, Azure or Google Cloud without dedicated infrastructure, with pay-per-use elasticity.

Think twice

  • Very large, stable, single-tenant workloads that already fit dedicated Exadata well.
  • Applications whose certification hasn't caught up with Exascale or your target database release.

ASM to Exascale cheat sheet

Traditional ExadataExascale
ASM disk groupVault
Grid disks carved per clusterStorage pool shared by all clusters
+DATAC1@DATAVAULT
asmcmd, cellcliescli
Local VM image storageExascale Volumes
Sparse disk group and test masterBuilt-in snapshots and thin clones
v$asm_diskgroup space checksescli lsvault, escli lsstoragepool

Old Exadata: each cluster owns its own piece of storage.

Exascale: all clusters share one big, secured pool.

Vaults replace disk groups, @ replaces +, and thin clones take minutes.

Final thoughts

Exascale changes the Exadata DBA's job from carving and babysitting disk groups to managing pooled, policy-driven storage. The performance that made Exadata famous stays exactly where it was. My advice: start with a dev or test use case, get comfortable with vaults, escli and PDB snapshot clones, then plan production moves with Data Guard or ZDM.

What has your experience with Exascale been so far? Share your questions and lessons learned in the comments. I read every one.

References

Punit, Oracle DBA Specialist Lead

Oracle EBS DBA, Exadata specialist and AWS and AI learner, turning real-world database experience into practical knowledge.

Friday, July 31, 2026

Fixing Oracle EBS 12.2 Clone Failure on RHEL8 — The refhost.xml Workaround

Fixing Oracle EBS 12.2 Clone Failure on RHEL8 — The refhost.xml Workaround

Fixing Oracle EBS 12.2 Clone Failure on RHEL8 — The refhost.xml Workaround

By Punit Kumar | Oracle EBS DBA | July 2026


Background

While performing an Oracle E-Business Suite 12.2 appsTier clone from Production to UAT, I encountered a series of prerequisite check failures. The target server was running Red Hat Enterprise Linux 8.10 (RHEL8). The EBS environment had AD and TXK at Delta 17. What seemed like a straightforward clone turned into a deep dive into Oracle's FMW prerequisite certification framework.

This article documents exactly what happened, why it happened, and how I fixed it — so you don't have to spend hours figuring it out yourself.


The Environment

  • Oracle E-Business Suite 12.2
  • AD and TXK Delta 17
  • Source: Production (RHEL8)
  • Target: UAT (RHEL8)
  • Clone type: appsTier

First Error — Log File Handler Failure

The first thing I noticed in the install log was this:


OiiolLogger.addFileHandler: Error while adding file handler
java.io.FileNotFoundException: .../clone/FMW/logs/prereqcheck.log 
(Not a directory)

The Oracle Universal Installer was trying to create timestamped log files inside a path called prereqcheck.log, expecting it to be a directory. However, a previous failed clone attempt had left prereqcheck.log as a flat file. The fix was straightforward — rename the file and remove it so the next run could manage it correctly.


rm -rf /u01/applruat/fs2/EBSapps/comn/clone/FMW/logs/prereqcheck.log

Important note here — do not recreate it as a directory either. A different Java class called FMWOracleHomePreReqCheck expects to create prereqcheck.log as a file itself. If you create it as a directory, that process will fail with AC-00002. The safest approach is to simply remove it and let the clone process manage it.


Second Error — oraInventory Logs Directory Missing


ODL-52008: unable to create log directory: /u01/applruat/oraInventory/logs

The Oracle Diagnostic Logging framework could not initialize because the logs directory under oraInventory did not exist. This caused all prereq checks to show "Not executed" rather than actually running.


mkdir -p /u01/applruat/oraInventory/logs
chown -R applruat:oinstall /u01/applruat/oraInventory
chmod -R 755 /u01/applruat/oraInventory

Third Error — oraInst.loc Wrong Parameter

While checking the Oracle inventory configuration I found:


inventory_loc=/u01/applruat/oraInventory
inst_loc=dba

The parameter name inst_loc is invalid. The correct parameter is inst_group and the value should match the group that owns the oraInventory directory. I confirmed this using:


ls -ld /u01/applruat/oraInventory
id applruat

The directory was owned by oinstall group so the fix was:


cat > /etc/oraInst.loc << EOF
inventory_loc=/u01/applruat/oraInventory
inst_group=oinstall
EOF

This same wrong parameter was found on multiple environments including Production, which had been running with this misconfiguration silently for a long time.


The Main Problem — refhost.xml Missing RHEL8 Entry

After fixing the above issues the prereq checks started actually executing. The CertifiedVersions check now ran but failed with the OS not being recognized. The root cause was in this file:


$COMMON_TOP/clone/prereq/webtier/Scripts/prereq/linux64/refhost.xml

This XML file is Oracle's certification registry. It tells the OUI and FMW prereq framework which operating system versions are certified for installation. When I opened the file I found entries for RHEL4, RHEL5, RHEL6, RHEL7 — but nothing for RHEL8.

The file had a last modified date of November 2024, meaning it had not been updated despite the servers being on RHEL8.


Why Did This Happen

This is an important question. The servers had been upgraded from RHEL7 to RHEL8 at the OS level. However the EBS filesystem under /u01/applruat was completely untouched during the OS upgrade. The refhost.xml file is not part of the OS — it is part of the EBS software stack and was originally installed when the appsTier was first laid down on RHEL7.

AD and TXK Delta 17 was applied but this delta did not deliver an updated refhost.xml with RHEL8 certification for the FMW webtier prereq framework. RHEL8 certification for EBS 12.2 FMW components came via specific supplemental patches rather than the main AD-TXK delta rollup.

The result was that Production had been running on RHEL8 for an extended period in a technically uncertified state from the FMW prereq perspective. Nobody noticed because the running EBS system is not affected by this file at runtime — it only matters during clone, patch, and install operations.


The Fix — Adding RHEL8 to refhost.xml

The workaround is to manually add an RHEL8 certified OS block to refhost.xml by copying the existing RHEL7 redhat block and changing the version number.

First back up the original:


cp /u01/applruat/fs2/EBSapps/comn/clone/prereq/webtier/Scripts/prereq/linux64/refhost.xml \
   /u01/applruat/fs2/EBSapps/comn/clone/prereq/webtier/Scripts/prereq/linux64/refhost.xml.bak_$(date +%Y%m%d)

Then open the file and locate the CERTIFIED_SYSTEMS opening tag. Insert the following block immediately after it:


<!-- RHEL8 entry added as workaround - copied from RHEL7 block -->
<OPERATING_SYSTEM>
    <VERSION VALUE="8"/>
    <ARCHITECTURE VALUE="x86_64"/>
    <NAME VALUE="Linux"/>
    <VENDOR VALUE="redhat"/>
    <GLIBC ATLEAST="2.17">
    </GLIBC>
  <PACKAGES>
        <PACKAGE NAME="binutils" VERSION="2.23.52.0.1" />
        <PACKAGE NAME="libgcc" VERSION="4.8.2" ARCHITECTURE="x86_64"/>
        <PACKAGE NAME="libstdc++" VERSION="4.8.2" ARCHITECTURE="x86_64"/>
        <PACKAGE NAME="libstdc++-devel" VERSION="4.8.2" ARCHITECTURE="x86_64"/>
        <PACKAGE NAME="sysstat" VERSION="10.1.5" />
        <PACKAGE NAME="gcc" VERSION="4.8.2" />
        <PACKAGE NAME="gcc-c++" VERSION="4.8.2" />
        <PACKAGE NAME="ksh" VERSION="..." />
        <PACKAGE NAME="make" VERSION="3.82" />
        <PACKAGE NAME="glibc" VERSION="2.17" ARCHITECTURE="x86_64"/>
        <PACKAGE NAME="glibc-devel" VERSION="2.17" ARCHITECTURE="x86_64"/>
        <PACKAGE NAME="libaio" VERSION="0.3.109" ARCHITECTURE="x86_64"/>
        <PACKAGE NAME="libaio-devel" VERSION="0.3.109" ARCHITECTURE="x86_64"/>
  </PACKAGES>
  <KERNEL>
        <PROPERTY NAME="VERSION" VALUE="3.10.0"/>
        <PROPERTY NAME="hardnofiles" VALUE="4096"/>
        <PROPERTY NAME="softnofiles" VALUE="4096"/>
  </KERNEL>
</OPERATING_SYSTEM>
<!-- End of RHEL8 workaround entry -->

Why compat-libcap1 and compat-libstdc++-33 Were Excluded

When the prereq Packages check ran after adding the RHEL8 block (initially copied with all RHEL7 packages), two packages failed:


Checking for compat-libcap1-1.10; Not found.       Failed
Checking for compat-libstdc++-33-3.2.3; Not found. Failed

Both of these packages were dropped in RHEL8. They were legacy GCC 3.x compatibility libraries from the RHEL5 and RHEL6 era that Oracle never removed from the RHEL7 package list in refhost.xml. They are not required for EBS 12.2 FMW WebTier to function on RHEL8.

The fix was to simply not include them in the RHEL8 block. All 13 remaining packages passed cleanly as RHEL8 ships with newer versions of all of them, and the version check is a minimum baseline comparison not an exact match.


Do You Need to Change Package Version Numbers

No. The prereq check compares installed package versions against the minimum baseline defined in refhost.xml. Since RHEL8 ships with newer versions of all required packages, they will all satisfy the minimum version requirements defined in the RHEL7-era values. For example:

  • refhost.xml requires glibc 2.17 — RHEL8 has glibc 2.28, which passes
  • refhost.xml requires gcc 4.8.2 — RHEL8 has gcc 8.5.0, which passes
  • refhost.xml requires make 3.82 — RHEL8 has make 4.2.1, which passes

Apply the Same Fix to All refhost.xml Locations

There are multiple refhost.xml files in an EBS 12.2 appsTier filesystem. The pasteBinary.sh process used by the clone framework has its own independent prereq check that reads from a different location. Find all of them and apply the same fix:


find /u01/applruat/fs2 -name "refhost.xml" 2>/dev/null

Apply the RHEL8 block to each location found. If pasteBinary continues to fail on prereqs despite the refhost.xml fix, Oracle provides a built-in bypass flag:


pasteBinary.sh ... -executeSysPrereqs false

The Bigger Picture — Production Was Also Affected

After fixing UAT I checked Production and found the same issue. The Production refhost.xml also had no RHEL8 entry, and the oraInst.loc had the same wrong parameter on Production as well. Production had been running on RHEL8 with a technically uncertified FMW prereq configuration since the OS upgrade.

This is a systemic issue that affects any EBS 12.2 environment where:

  • The appsTier was originally installed on RHEL6 or RHEL7
  • The OS was subsequently upgraded to RHEL8
  • No specific Oracle patch was applied to update the FMW prereq certification files

Permanent Fix Recommendation

The manual workaround works but needs to be maintained. For a permanent fix:

  • Check MOS Note 2500278.1 for running EBS 12.2 on RHEL8
  • Check MOS Note 1369010.1 for EBS 12.2 certified platforms
  • Raise an Oracle SR requesting the specific patch that delivers RHEL8 certification in refhost.xml for your FMW version
  • Keep a backed-up copy of your patched refhost.xml outside the EBS filesystem since AD-TXK patches can overwrite it silently
  • Add a step in your clone runbook to verify RHEL8 block is present after each AD-TXK patch application

Clone Runbook Checklist for RHEL8 Environments

Before every appsTier clone on RHEL8, verify:


1. prereqcheck.log does not exist under clone/FMW/logs/
2. oraInventory/logs directory exists with correct ownership
3. oraInst.loc has inst_group=oinstall (not inst_loc)
4. refhost.xml has RHEL8 block without compat-libcap1 and compat-libstdc++-33
5. All refhost.xml locations are patched (use find command)
6. Filesystem has sufficient free space
7. Running as correct OS application user

Conclusion

What started as a clone failure turned out to be a combination of stale certification metadata, leftover files from previous failed attempts, and a misconfigured inventory pointer — all stemming from the same root cause: the EBS software stack was never formally updated to recognize RHEL8 after the OS upgrade.

The fix itself is simple once you understand what refhost.xml does and why it matters. The broader lesson is that OS upgrades on EBS servers need to be accompanied by a review of the FMW prereq certification files and Oracle inventory configuration — not just the OS packages and kernel parameters.


Oracle EBS DBA | Exadata Specialist | AWS & AI Learner

Feel free to connect or comment if you faced the same issue.

Sunday, July 26, 2026

MariaDB 11.4.4 to 11.4.12 on RHEL/OEL 8 or 9

```html MariaDB Upgrade from 11.4.4 to 11.4.12 – Complete DBA Guide

MariaDB Upgrade from 11.4.4 to 11.4.12 – Complete DBA Guide

Introduction

Upgrading MariaDB in a production environment is not simply a package-update activity. A professional DBA upgrade includes database-health verification, configuration backup, physical backup, application coordination, controlled package installation, post-upgrade validation and a tested rollback plan.

This article explains how to upgrade MariaDB from 11.4.4 to 11.4.12 on a Linux server using a safe and production-focused approach.

Important: Always test the upgrade in a non-production environment before performing it on production. Confirm application compatibility, backup recovery and rollback procedures before beginning the maintenance window.

Upgrade Flow

Application Downtime
        |
        v
Pre-Upgrade Health Checks
        |
        v
Configuration and Database Backup
        |
        v
Stop Application Services
        |
        v
Stop MariaDB
        |
        v
Upgrade MariaDB Packages
        |
        v
Start MariaDB
        |
        v
Run mariadb-upgrade
        |
        v
Database and Application Validation
        |
        v
Release the Environment

Environment Details

Component Details
Current MariaDB Version 11.4.4
Target MariaDB Version 11.4.12
Operating System RHEL 8/9 or Oracle Linux 8/9
Storage Engine InnoDB
Service Name mariadb
Default Data Directory /var/lib/mysql

Phase 1: Pre-Upgrade Checks

1. Check the Current MariaDB Version

mariadb --version
mariadbd --version

From the database:

SELECT VERSION();

Expected current version:

11.4.4-MariaDB

2. Check the Operating System

cat /etc/os-release
uname -r

3. Check Installed MariaDB Packages

rpm -qa | grep -i MariaDB | sort

Save the package list:

rpm -qa | grep -i MariaDB | sort \
> /tmp/mariadb_packages_before_upgrade.txt

Typical packages may include:

MariaDB-server
MariaDB-client
MariaDB-common
MariaDB-shared
MariaDB-backup

4. Confirm the MariaDB Repository

dnf repolist | grep -i mariadb

Check whether the target version is available:

dnf --showduplicates list MariaDB-server
Confirm that the repository is pointing to the MariaDB 11.4 release series. Do not accidentally upgrade to another major release.

5. Check MariaDB Service Status

systemctl status mariadb --no-pager

6. Check Database Availability

SHOW DATABASES;

SHOW GLOBAL STATUS LIKE 'Uptime';

SHOW FULL PROCESSLIST;

SHOW ENGINE INNODB STATUS\G

7. Check Database Tables

mariadb-check --all-databases
For very large databases, perform table checks carefully because they may consume additional CPU, memory and I/O resources.

8. Check Disk Space

df -hT
df -i
du -sh /var/lib/mysql
du -sh /var/log/mariadb

Confirm sufficient free space for:

  • MariaDB package installation
  • Database backup
  • Temporary upgrade files
  • Database and operating-system logs
  • Rollback files

9. Capture Current Database Variables

mariadb -e "SHOW VARIABLES" \
> /tmp/mariadb_variables_before_upgrade.txt

mariadb -e "SHOW GLOBAL STATUS" \
> /tmp/mariadb_status_before_upgrade.txt

10. Capture Database Size

SELECT
    table_schema,
    COUNT(*) AS table_count,
    ROUND(
        SUM(data_length + index_length) / 1024 / 1024,
        2
    ) AS size_mb
FROM information_schema.tables
GROUP BY table_schema
ORDER BY size_mb DESC;

11. Review the MariaDB Error Log

journalctl -u mariadb -n 200 --no-pager

If file-based logging is configured:

grep -iE "error|warning|corrupt|crash" \
/var/log/mariadb/*.log
Resolve existing corruption, startup, recovery or storage errors before starting the upgrade. Do not use an upgrade as a workaround for an unidentified production issue.

Phase 2: Backup Before Upgrade

12. Back Up MariaDB Configuration

mkdir -p /backup/mariadb_upgrade_11.4.12/config

cp -p /etc/my.cnf \
/backup/mariadb_upgrade_11.4.12/config/

cp -pr /etc/my.cnf.d \
/backup/mariadb_upgrade_11.4.12/config/

If the following directory exists:

cp -pr /etc/mysql \
/backup/mariadb_upgrade_11.4.12/config/

13. Take a Physical Backup

mkdir -p \
/backup/mariadb_upgrade_11.4.12/full_backup

Run the backup:

mariadb-backup \
--backup \
--target-dir=/backup/mariadb_upgrade_11.4.12/full_backup \
--user=backup_user \
--password='REPLACE_WITH_SECURE_METHOD'
Avoid placing passwords directly in shell scripts or command history. Use a protected option file or enterprise secrets-management solution.

14. Prepare the Backup

mariadb-backup \
--prepare \
--target-dir=/backup/mariadb_upgrade_11.4.12/full_backup

Verify the backup metadata:

cat \
/backup/mariadb_upgrade_11.4.12/full_backup/xtrabackup_checkpoints

Confirm that the backup log contains:

completed OK!

15. Optional Logical Backup

mariadb-dump \
--all-databases \
--single-transaction \
--routines \
--events \
--triggers \
--hex-blob \
> /backup/mariadb_upgrade_11.4.12/all_databases.sql
A physical backup normally provides faster full-server recovery. A logical backup can serve as an additional recovery option for smaller environments.

Phase 3: Stop Application Activity

16. Stop Application Services

Before stopping MariaDB:

  • Stop application servers.
  • Stop batch jobs and scheduled interfaces.
  • Pause backup and maintenance jobs.
  • Disable automatic service-restart automation.
  • Notify the application and business teams.

17. Check Active Sessions

SHOW FULL PROCESSLIST;

18. Check Active Transactions

SELECT
    trx_id,
    trx_state,
    trx_started,
    trx_mysql_thread_id,
    trx_query
FROM information_schema.innodb_trx;

19. Stop MariaDB

sudo systemctl stop mariadb

Verify that the service is stopped:

sudo systemctl status mariadb --no-pager

ps -ef | grep -i mariadbd

Phase 4: Upgrade MariaDB Packages

20. Save the Existing Package List

rpm -qa | grep -i MariaDB | sort \
> /backup/mariadb_upgrade_11.4.12/packages_before.txt

21. Refresh Repository Metadata

sudo dnf clean all
sudo dnf makecache

22. Confirm the Target Version

dnf --showduplicates list MariaDB-server

23. Upgrade MariaDB Packages

sudo dnf upgrade \
MariaDB-server \
MariaDB-client \
MariaDB-common \
MariaDB-shared \
MariaDB-backup

Alternatively, after reviewing the transaction:

sudo dnf upgrade 'MariaDB-*'
Review the proposed DNF transaction carefully before accepting it. Confirm that every package is moving to the approved 11.4.12 release.

24. Confirm Installed Packages

rpm -qa | grep -i MariaDB | sort

Phase 5: Start MariaDB

25. Start the MariaDB Service

sudo systemctl start mariadb

26. Check Service Status

sudo systemctl status mariadb --no-pager

27. Review Startup Logs

sudo journalctl -u mariadb -n 200 --no-pager

Check for critical messages:

sudo grep -iE "error|warning|crash|corrupt" \
/var/log/mariadb/*.log

28. Confirm the New Version

mariadb --version

From the database:

SELECT VERSION();

Expected result:

11.4.12-MariaDB

Phase 6: Run mariadb-upgrade

sudo mariadb-upgrade

If authentication is required:

mariadb-upgrade \
--user=root \
--password

Restart MariaDB after completion:

sudo systemctl restart mariadb

Confirm status:

sudo systemctl status mariadb --no-pager

Phase 7: Post-Upgrade Validation

29. Validate Database Access

SELECT VERSION();

SELECT NOW();

SHOW DATABASES;

30. Validate All Databases

mariadb-check --all-databases

Run upgrade-related checks:

mariadb-check \
--all-databases \
--check-upgrade

31. Compare Database Size

SELECT
    table_schema,
    COUNT(*) AS table_count,
    ROUND(
        SUM(data_length + index_length) / 1024 / 1024,
        2
    ) AS size_mb
FROM information_schema.tables
GROUP BY table_schema
ORDER BY size_mb DESC;

32. Validate Users and Authentication

SELECT
    User,
    Host,
    plugin
FROM mysql.user
ORDER BY User, Host;

33. Validate Procedures and Functions

SELECT
    routine_schema,
    routine_name,
    routine_type
FROM information_schema.routines
ORDER BY routine_schema, routine_name;

34. Validate Events

SELECT
    event_schema,
    event_name,
    status
FROM information_schema.events;

35. Validate Triggers

SELECT
    trigger_schema,
    trigger_name,
    event_object_table
FROM information_schema.triggers;

36. Validate InnoDB Health

SHOW ENGINE INNODB STATUS\G

Check for:

  • InnoDB corruption
  • Crash-recovery errors
  • Deadlocks
  • Long-running transactions
  • Pending I/O
  • Lock waits

37. Test Application Connectivity

mariadb \
-h database-host \
-u application_user \
-p \
application_database

Run a basic query:

SELECT COUNT(*)
FROM critical_application_table;

Perform application smoke tests for:

  • Application login
  • Read transactions
  • Insert and update transactions
  • Batch processing
  • Reports
  • API connectivity
  • Scheduled jobs

38. Compare Configuration Before and After

mariadb -e "SHOW VARIABLES" \
> /tmp/mariadb_variables_after_upgrade.txt
diff -u \
/tmp/mariadb_variables_before_upgrade.txt \
/tmp/mariadb_variables_after_upgrade.txt
Some variable differences may be expected after a patch-level upgrade. Investigate any unexpected default-value or configuration changes.

39. Monitor Operating-System Resources

top
free -m
vmstat 1 10
iostat -xz 1 10
df -hT

40. Monitor MariaDB

SHOW GLOBAL STATUS LIKE 'Threads_connected';

SHOW GLOBAL STATUS LIKE 'Threads_running';

SHOW GLOBAL STATUS LIKE 'Aborted_connects';

SHOW GLOBAL STATUS LIKE 'Slow_queries';

SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';

SHOW GLOBAL STATUS LIKE 'Innodb_deadlocks';

Rollback Plan

A rollback should be based on restoring the approved previous version and the prepared pre-upgrade backup. Do not rely only on package downgrade.

Rollback Steps

  1. Stop MariaDB.
  2. Preserve the failed upgraded data directory.
  3. Reinstall the approved previous MariaDB packages.
  4. Restore the previous configuration files.
  5. Restore the prepared physical backup.
  6. Start MariaDB.
  7. Validate the database and application.

Example Restore

sudo systemctl stop mariadb

mv /var/lib/mysql \
/var/lib/mysql_failed_11.4.12

mkdir -p /var/lib/mysql

mariadb-backup \
--copy-back \
--target-dir=/backup/mariadb_upgrade_11.4.12/full_backup

chown -R mysql:mysql /var/lib/mysql

restorecon -Rv /var/lib/mysql

sudo systemctl start mariadb
The restore destination must be empty before using mariadb-backup --copy-back. Preserve the failed environment until the rollback is validated.

DBA Upgrade Checklist

Before Upgrade

  • Current MariaDB version confirmed
  • Target version available in the repository
  • Release notes reviewed
  • Database health checked
  • Disk space verified
  • Configuration files backed up
  • Physical backup completed
  • Backup prepared successfully
  • Restore test completed in non-production
  • Rollback procedure documented
  • Application outage approved

During Upgrade

  • Application services stopped
  • Active transactions reviewed
  • MariaDB stopped cleanly
  • Correct packages selected
  • Target version confirmed before installation
  • MariaDB started successfully
  • Error logs reviewed
  • mariadb-upgrade completed

After Upgrade

  • Version confirmed as 11.4.12
  • Database tables validated
  • Users and privileges validated
  • Application connectivity tested
  • Critical transactions tested
  • Database size compared
  • Performance compared with baseline
  • Monitoring reviewed
  • Application released to users

Common Upgrade Mistakes

  • Upgrading without a tested backup
  • Pointing the repository to the wrong major release
  • Skipping the application shutdown
  • Ignoring active transactions
  • Failing to save configuration files
  • Not checking the MariaDB error log
  • Skipping application smoke tests
  • Changing database parameters during the same maintenance window
  • Considering a successful package installation as complete validation

Interview Questions

  1. What is the difference between a minor and major MariaDB upgrade?
  2. Why should mariadb-backup be prepared before restore?
  3. What checks should be performed before upgrading MariaDB?
  4. Why should the MariaDB repository be verified before package installation?
  5. What does mariadb-upgrade do?
  6. How do you validate InnoDB after an upgrade?
  7. Why should application services be stopped before upgrading?
  8. What is the safest rollback strategy?
  9. Which logs should be reviewed after MariaDB startup?
  10. How do you compare database configuration before and after an upgrade?

Conclusion

A successful MariaDB upgrade is built around preparation, backup, controlled execution, validation and rollback readiness. The actual package installation is only one small part of the complete DBA activity.

The safest upgrade formula is:

Prechecks
+ Tested Backup
+ Controlled Change
+ Post-Upgrade Validation
+ Monitoring
+ Rollback Plan

Never release the production environment only because the MariaDB service started. Confirm database integrity, application functionality, performance and recovery readiness.

Official References

```

Sunday, July 12, 2026

Oracle Exadata Architecture Explained: Smart Scan, Storage Cells, Query Offloading, and DBA Essentials

Oracle Exadata Architecture

Oracle Exadata Explained: Why It Remains a Powerful Platform for Mission-Critical Database Workloads

A practical guide to Exadata architecture, Smart Scan, Storage Cells, query offloading, Flash Cache, and essential DBA monitoring tools.

By Punit Kumar  •  Oracle Database  •  Exadata  •  Performance Tuning

Introduction

After spending years managing Oracle databases across enterprise environments—including Oracle E-Business Suite, RAC, Data Guard, AWS migrations, backup and recovery, and performance tuning—I often hear one important question:

What makes Oracle Exadata different from a traditional database infrastructure?

Many people assume that Exadata is fast only because it has powerful processors, high-speed storage, or large amounts of flash memory.

Those components certainly help, but they do not explain the most important architectural difference.

The real innovation behind Oracle Exadata is where database processing happens.

In a traditional architecture, large amounts of data are transferred from storage to the database server before filtering takes place. Exadata can push parts of SQL processing directly to intelligent Storage Cells.

Instead of moving all the data to the processing layer, Exadata moves selected processing closer to the data.

Oracle Exadata Architecture Explained: Smart Scan, Storage Cells, Query Offloading, and DBA Essentials

Understanding Traditional Database Architecture

Consider a query that needs only a few hundred matching records from a table containing billions of rows.

In a traditional storage architecture, the storage system generally provides the requested database blocks to the database server. The database server then processes those blocks and filters the required rows.

Application
↓
Database Server
↓
Storage

The general flow looks like this:

  • The application submits a SQL statement.
  • The database server parses and optimizes the statement.
  • The database requests the required blocks from storage.
  • Storage sends the requested blocks to the database server.
  • The database server applies filtering, joins, and aggregation.
  • The final result is returned to the application.

When a query scans a very large amount of data, this design can generate substantial storage I/O, network traffic, CPU consumption, and memory pressure.

The Library Analogy

A simple library analogy makes this easier to understand.

Traditional Database

Imagine that you need one paragraph from a single book, but someone brings the entire library to your desk. You search through everything, find the paragraph, and then return all the books.

Oracle Exadata

In Exadata, the library staff searches the shelves, finds the required information, and delivers only the relevant pages.

That is the basic idea behind Smart Scan: filtering and selected SQL processing can happen within the Exadata Storage Cells before the data reaches the database servers.

The Three Main Pillars of Oracle Exadata

Oracle Exadata architecture can be understood through three primary layers:

1. Database Compute Nodes

The Compute Nodes are the database servers where Oracle Database instances run. In a clustered configuration, Oracle RAC provides availability and workload distribution across the nodes.

Compute Nodes are responsible for activities such as:

  • SQL parsing
  • Query optimization
  • Execution-plan generation
  • PL/SQL processing
  • Session management
  • Buffer cache management
  • RAC coordination
  • Final joins and aggregations

Compute Nodes remain the main database-processing layer, but Exadata allows eligible operations to be offloaded to the storage layer.

2. High-Speed Internal Network Fabric

The internal fabric provides high-bandwidth, low-latency communication between the database servers and Storage Cells.

Depending on the Exadata generation, the architecture may use technologies such as InfiniBand or RoCE-based networking.

Communication between Oracle Database and the Exadata Storage Server Software takes place through the iDB protocol.

This allows the database layer to send more intelligent requests to storage rather than requesting only ordinary blocks.

3. Intelligent Storage Cells

Storage Cells are one of the most important differentiators in Exadata.

Unlike traditional passive storage, Exadata Storage Cells include their own:

  • Processors
  • Memory
  • Flash storage
  • Persistent storage devices
  • Exadata Storage Server Software

This intelligence allows Storage Cells to process eligible database operations close to the physical data.

Smart Scan: The Core Exadata Capability

Smart Scan enables selected SQL operations to be offloaded from the database servers to Exadata Storage Cells.

Instead of sending every requested block to the database server, Storage Cells can inspect the data and return a reduced result set.

Smart Scan can support operations such as:

  • Predicate filtering
  • Column projection
  • Storage Index elimination
  • Bloom-filter processing
  • Some data transformations
  • Selected aggregation-related operations
  • Decompression processing

The objective is simple:

Reduce the amount of data transferred from storage to the database servers.

A Simple Smart Scan Example

Consider the following SQL statement:

SELECT employee_name,
       salary
FROM   employees
WHERE  department_name = 'Finance';

In a traditional architecture, the database server may receive a large number of blocks and apply the department filter after those blocks arrive.

With an eligible Exadata Smart Scan, the filter can be processed by the Storage Cells. Only the qualifying rows and required columns are returned to the database servers.

Storage Cell scans data
↓
Applies department_name = 'Finance'
↓
Returns employee_name and salary for matching rows
↓
Database server completes the remaining processing

Exadata Query Flow: Step by Step

Step 1: The client submits SQL

The application sends a SQL request to the Oracle Database through SQL*Net.

Step 2: The database parses the SQL

Oracle validates the statement, checks permissions, and determines whether an existing cursor can be reused.

Step 3: The optimizer creates an execution plan

The optimizer evaluates available access paths, statistics, indexes, partitions, joins, and estimated costs.

Step 4: Oracle evaluates offload eligibility

Oracle determines whether the operation can benefit from Smart Scan and storage offloading.

Step 5: The request is sent to Storage Cells

Eligible predicates and processing instructions are communicated to the Storage Cells through the Exadata storage protocol.

Step 6: Storage Cells scan and filter the data

Multiple Storage Cells can process data in parallel. Filtering and column selection occur close to the stored data.

Step 7: Reduced results return to Compute Nodes

Only the required data is transferred back to the database instances.

Step 8: Final processing is completed

The database servers complete any remaining joins, sorting, aggregation, formatting, and result delivery.

Why Storage Offloading Matters

Imagine that a query scans a one-terabyte table but requires only a small percentage of the rows and columns.

Traditional processing

Read a large amount of data
↓
Transfer database blocks to the server
↓
Filter and process data on the server

Exadata processing

Read data in parallel within Storage Cells
↓
Apply eligible filters close to storage
↓
Return a significantly reduced result set

The actual reduction depends on the SQL statement, data distribution, selected columns, predicates, execution plan, and Smart Scan eligibility.

Potential benefits include:

  • Reduced data transfer
  • Lower database-server CPU consumption
  • Reduced pressure on database-server memory
  • Less unnecessary I/O
  • Improved parallel processing
  • Faster analytical query execution

Exadata Smart Flash Cache

Exadata is not limited to large analytical scans. Smart Flash Cache also supports high-performance OLTP and mixed workloads.

Frequently accessed data can be maintained in high-speed flash storage, reducing the need to access slower persistent media.

Smart Flash Cache can help provide:

  • Lower read latency
  • Improved transaction response time
  • Higher I/O throughput
  • Faster access to frequently used blocks
  • Improved mixed-workload performance

Exadata can also use flash for logging-related optimizations, helping protect performance-sensitive write operations.

Exadata Storage Indexes

Storage Indexes are memory-based structures maintained automatically by Exadata Storage Server Software.

They record useful information, such as minimum and maximum column values, for regions of data.

When a query requests a value that cannot exist within a particular storage region, Exadata can avoid reading that region.

For example, suppose a storage region contains order dates only between January and March.

A query requesting December data may skip that region because the requested value is outside its known range.

Storage Indexes are:

  • Automatically maintained
  • Transparent to applications
  • Different from traditional Oracle indexes
  • Designed to reduce unnecessary physical I/O

Hybrid Columnar Compression

Hybrid Columnar Compression, commonly called HCC, is designed for data that benefits from high compression and efficient scanning.

Instead of compressing each row independently, HCC organizes data into Compression Units and stores similar column values together.

Potential advantages include:

  • Reduced storage requirements
  • Reduced physical I/O
  • Improved scan efficiency
  • Better compression for historical and analytical data

Compression results vary based on data characteristics, selected compression mode, and workload behavior.

HCC is generally more suitable for data that is read frequently but changed less often. DBAs should evaluate update activity, load patterns, recovery requirements, and performance objectives before selecting a compression strategy.

Oracle ASM Integration

Oracle Automatic Storage Management is a central part of Exadata storage management.

ASM provides:

  • Data striping
  • Storage mirroring
  • Automatic rebalance
  • Failure-group management
  • Online storage expansion
  • Simplified disk-group administration

Common ASM disk groups include:

  • DATA for database files
  • RECO for recovery-related files

The exact design depends on availability, capacity, backup, and recovery requirements.

When Is a Query Eligible for Smart Scan?

Not every SQL statement uses Smart Scan.

Smart Scan is commonly associated with:

  • Full table scans
  • Full partition scans
  • Direct-path reads
  • Large data scans
  • Eligible data types and SQL operations
  • Objects stored on Exadata Storage Cells

Queries may receive limited Smart Scan benefit when they use:

  • Very small index lookups
  • Single-row access patterns
  • Buffer-cache reads instead of direct-path reads
  • Unsupported expressions or data types
  • Access paths that do not perform large scans

A query that does not use Smart Scan is not necessarily inefficient. Small index-driven operations can already be highly efficient and may benefit more from flash caching and low-latency access.

Essential Exadata Tools for DBAs

CellCLI

CellCLI is used to administer and inspect Exadata Storage Cells.

cellcli

LIST CELL DETAIL

LIST CELLDISK

LIST GRIDDISK

LIST PHYSICALDISK

DCLI

DCLI can execute commands across multiple Exadata nodes.

dcli -g dbs_group hostname

dcli -g cell_group uptime

ExaCHK and ORAchk

These tools perform health checks and identify configuration, availability, performance, patching, and best-practice issues.

They are especially valuable:

  • Before patching
  • After patching
  • Before major migrations
  • During health reviews
  • During incident investigation

Oracle Enterprise Manager

Oracle Enterprise Manager can provide centralized visibility into:

  • Database instances
  • Oracle RAC
  • Storage Cells
  • ASM disk groups
  • Flash utilization
  • I/O performance
  • Hardware health
  • Database alerts

Useful Performance Views and Statistics

DBAs can use Oracle performance views and SQL statistics to validate offloading and Smart Scan behavior.

Useful areas include:

  • V$SQL
  • V$SQLSTATS
  • V$SQL_PLAN
  • V$SESSION
  • V$SYSTEM_EVENT
  • V$CELL
  • V$CELL_STATE
  • V$CELL_THREAD_HISTORY
  • AWR reports
  • SQL Monitor reports

Important Exadata-related statistics include:

cell physical IO bytes eligible for predicate offload

cell physical IO interconnect bytes

cell physical IO bytes saved by storage index

cell smart table scan

cell smart index scan

Comparing eligible bytes, interconnect bytes, and bytes saved can help determine how effectively Exadata reduced data movement.

Common Exadata Use Cases

Data Warehousing and Analytics

Large scans, parallel processing, HCC, Storage Indexes, and Smart Scan make Exadata well suited for analytical workloads.

OLTP and Mixed Workloads

Smart Flash Cache, low-latency storage access, RAC, and intelligent resource management support demanding transactional workloads.

Oracle E-Business Suite

Oracle EBS environments often combine online transactions, batch processing, interfaces, concurrent requests, and reporting.

Exadata can support these mixed workload patterns when capacity, SQL performance, RAC services, I/O resource management, and application configuration are properly designed.

Database Consolidation

Multiple Oracle databases can be consolidated on an engineered platform using RAC, multitenant architecture, ASM, and resource-management controls.

What an Exadata DBA Should Monitor

Working on Exadata requires both traditional Oracle DBA knowledge and engineered-system awareness.

Important monitoring areas include:

  • Database and RAC availability
  • ASM disk-group capacity
  • Storage Cell health
  • Physical disk and flash health
  • Smart Scan effectiveness
  • Interconnect throughput
  • Flash Cache utilization
  • I/O latency
  • Cell alerts
  • Exadata software versions
  • Firmware and patch consistency
  • Backup and recovery status
  • Data Guard transport and apply lag
  • SQL performance and execution-plan changes

Common Exadata Misconceptions

“Every query will automatically become faster.”

Performance depends on the workload, SQL design, data volume, execution plan, statistics, access path, concurrency, and configuration.

“Indexes are no longer required.”

Indexes remain important for selective OLTP access. Smart Scan is primarily valuable for eligible scan-intensive operations.

“Exadata eliminates SQL tuning.”

Exadata can reduce infrastructure bottlenecks, but inefficient joins, inaccurate statistics, excessive parsing, poor data models, and inefficient application logic still require tuning.

“Exadata is only useful for data warehouses.”

Exadata supports data warehouses, OLTP systems, mixed workloads, Oracle EBS, database consolidation, and other mission-critical Oracle workloads.

How to Explain Exadata in an Interview

A clear interview answer could be:

Oracle Exadata is an engineered database platform that combines Oracle Database servers, intelligent Storage Cells, high-speed networking, flash technology, and integrated management. Its major advantage is SQL processing offload. Eligible predicates, column filtering, and other operations can be processed within the Storage Cells through Smart Scan, reducing the amount of data transferred to the database servers and improving performance for large scans and mixed enterprise workloads.

Key Takeaways

  • Exadata is more than a collection of fast hardware components.
  • Its main architectural advantage is intelligent database-aware storage.
  • Smart Scan pushes eligible processing closer to the data.
  • Storage offloading reduces unnecessary data movement.
  • Smart Flash Cache supports latency-sensitive workloads.
  • Storage Indexes help avoid unnecessary storage reads.
  • HCC can reduce storage and improve scan efficiency.
  • ASM, RAC, Storage Cells, and internal networking operate as one engineered system.
  • Not every query uses Smart Scan, and SQL tuning remains essential.
  • DBAs must monitor the complete stack, not only the database instances.

Final Thoughts

Oracle Exadata represents a different approach to database infrastructure.

Traditional architectures generally move database blocks from storage to the database servers and perform most processing there.

Exadata introduces intelligent Storage Cells that understand Oracle database operations and can process eligible work close to the data.

Do not move all the data to the processing layer. Move selected processing closer to the data.

This architecture can reduce I/O, decrease network traffic, use parallel storage processing, and improve performance for large-scale Oracle workloads.

For Oracle DBAs, the best way to learn Exadata is not to memorize feature names. Start by understanding the complete query lifecycle:

Client SQL
↓
Database parsing and optimization
↓
Smart Scan eligibility decision
↓
Storage offloading
↓
Parallel filtering inside Storage Cells
↓
Reduced result returned to Compute Nodes

Once this flow is clear, features such as Smart Scan, Storage Indexes, Smart Flash Cache, HCC, ASM, and the iDB protocol become much easier to understand.

About the Author

Punit Kumar is an experienced Oracle Database professional specializing in Oracle Database Administration, Oracle E-Business Suite, RAC, Data Guard, performance tuning, cloud database architecture, AWS, and enterprise database modernization.

Topics: Oracle Exadata, Oracle Database, Smart Scan, Storage Cells, Oracle RAC, ASM, Oracle EBS, Performance Tuning, Database Architecture, Data Warehousing

Saturday, July 11, 2026

The Oracle DBA’s Guide to Surviving (and Thriving) in AWS RDS PostgreSQL

Oracle DBA to PostgreSQL

The Oracle DBA’s Guide to Surviving (and Thriving) in AWS RDS PostgreSQL

A practical field guide for experienced Oracle professionals moving from RAC, RMAN, and operating-system control to managed PostgreSQL in the AWS cloud.

1. Introduction: The Language of the Cloud

For those of us who have spent decades in the trenches of Oracle E-Business Suite, managing RAC nodes, reviewing AWR reports, and wrestling with RMAN scripts, moving to PostgreSQL on Amazon RDS can feel like learning a new dialect of a language we already speak fluently.

The grammar remains familiar. We still think about memory, storage, transactions, execution plans, availability, recovery, security, and performance. But the daily rituals have changed.

The most fundamental shift is the AWS Shared Responsibility Model. AWS manages the physical infrastructure and many routine platform tasks, while the customer remains responsible for data, access, schema design, configuration choices, SQL performance, monitoring, and recovery readiness.

In simple terms, your job moves from managing the entire server stack to managing the database service boundary.

The mindset shift: You are no longer the owner of every layer. You are the architect and operator of the layers that directly affect the business.

2. Takeaway 1: You No Longer Own the “Metal” — and That Is a Good Thing

In the on-premises Oracle world, root access and SSH access often felt like a DBA birthright. In Amazon RDS, that boundary is intentionally fixed. AWS manages the underlying host, operating system, database software installation, infrastructure replacement, and many patching and backup activities.

You manage the database-facing layer: schemas, roles, privileges, extensions, parameter groups, option choices, maintenance windows, queries, indexes, statistics, monitoring, and application connectivity.

As a senior architect, I see this as a strategic trade-off. You lose the ability to tune the kernel or inspect every operating-system process, but you gain time to focus on architecture, security, automation, cost, SQL efficiency, and business continuity.

Amazon RDS removes much of the undifferentiated infrastructure work so the DBA can spend more time improving the reliability and value of the data platform.

Success in RDS depends on knowing which controls AWS exposes, which settings require a parameter group, which changes require a reboot, and which parts of the platform are intentionally managed for you.

3. Takeaway 2: The Storage Trap — It Only Goes One Way

Oracle DBAs are accustomed to adding data files, resizing tablespaces, moving segments, reclaiming space, and reorganizing storage. Amazon RDS storage behaves differently: allocated storage can be increased, but it cannot be reduced on the existing DB instance.

If you allocate far more capacity than required, you continue paying for that allocation unless you migrate or restore the database into a differently sized replacement environment.

Production rule: Enable storage autoscaling with a carefully chosen maximum threshold, monitor FreeStorageSpace, and alert well before the database reaches a critical storage condition.

Storage autoscaling is valuable, but it should not replace capacity planning. Unexpected growth can result from table bloat, retained WAL, large temporary operations, failed maintenance, excessive logging, or an application defect.

The experienced DBA’s storage principle is straightforward: start with justified capacity, monitor aggressively, and grow deliberately.

4. Takeaway 3: Rethinking the Architecture — Undo vs. MVCC

This is one of the largest conceptual changes for an Oracle veteran. Oracle maintains older versions of changed data using Undo. PostgreSQL implements Multi-Version Concurrency Control by retaining row versions within the table structure.

When rows are updated or deleted, older row versions can remain as dead tuples until PostgreSQL reclaims or marks that space reusable. This makes VACUUM and autovacuum central to PostgreSQL health.

Poorly tuned autovacuum can lead to table and index bloat, inaccurate optimizer statistics, degraded query performance, and increased storage consumption. In an extreme case, failure to control transaction ID age can create a transaction ID wraparound risk.

Memory starting points — not universal rules

  • shared_buffers: Around 25% of RAM is a common initial guideline for a dedicated PostgreSQL host, but the final value must be tested.
  • effective_cache_size: Often estimated near 50–75% of RAM as a planner hint; it does not reserve that memory.
  • work_mem: Treat with caution because it can be allocated multiple times per query and across many concurrent sessions.
  • maintenance_work_mem: Size for maintenance operations while considering concurrent autovacuum workers.

The important lesson is not to copy a memory formula blindly. Build a total memory budget based on instance RAM, connection count, query concurrency, parallelism, maintenance activity, and operating overhead.

In PostgreSQL, autovacuum is not housekeeping. It is part of the core availability and performance architecture.

5. Takeaway 4: Multi-AZ Is Primarily for Availability — Not Automatically for Read Scaling

Oracle DBAs may associate standby databases with both disaster recovery and reporting, especially when Active Data Guard is part of the architecture. In Amazon RDS, high availability and read scaling depend on the deployment type.

RDS Option Primary Purpose Readable? Replication Model
Multi-AZ DB instance deployment High availability and automatic failover No — the standby does not serve read traffic Synchronous
Multi-AZ DB cluster High availability with two readable standby instances Yes Synchronous replication to standbys
Read replica Read scaling, reporting, and selected recovery patterns Yes Asynchronous

A traditional Multi-AZ DB instance deployment usually fails over in approximately 60–120 seconds, depending on database activity and recovery conditions. A Multi-AZ DB cluster is designed for faster failover, which AWS describes as typically under 35 seconds.

Choose the architecture based on recovery objectives, workload characteristics, read requirements, cost, regional strategy, and application retry behavior—not simply because “Multi-AZ” appears in the name.

6. Takeaway 5: The PITR Catch — Recovery Creates a New Instance

Point-in-Time Recovery in Amazon RDS is operationally simple, but it includes an important design reality: the restore creates a new DB instance. It does not rewind the existing production instance in place.

That new instance requires validation and may require the reapplication or verification of infrastructure settings and integrations surrounding the database.

Your recovery runbook should verify:

  • DB subnet group and network placement
  • VPC security groups and routing
  • DB parameter group and required static parameters
  • KMS encryption configuration
  • IAM database authentication and application roles
  • Secrets Manager entries and connection strings
  • CloudWatch alarms, log exports, and monitoring settings
  • DNS, application endpoints, and failback steps
  • Post-restore validation of data, users, extensions, and jobs
A recovery procedure you have never executed is only a document. Test PITR and application reconnection regularly.

A quarterly recovery exercise is a practical starting point for critical systems, but the frequency should be driven by compliance requirements and the business recovery-time and recovery-point objectives.

7. Takeaway 6: The Connection Crisis and the RDS Proxy Option

PostgreSQL uses a process-based connection model, and a large number of active or rapidly created sessions can consume significant memory and CPU. This becomes especially important with microservices, containers, bursty workloads, and AWS Lambda functions.

The first defense is good application-side connection management. Use persistent pools, define sensible timeouts, close abandoned sessions, and avoid setting max_connections to an unnecessarily high value.

Amazon RDS Proxy is strongly worth evaluating for workloads with frequent connection churn or unpredictable spikes. It pools and reuses database connections, helps protect the database from connection storms, and can preserve many application connections during failover events.

Important: RDS Proxy is not a substitute for SQL tuning or sound application pooling. Test for transaction pinning, session state, prepared statements, authentication design, latency, and cost before adopting it.

8. Takeaway 7: Graviton — A High-Value Cost and Performance Opportunity

AWS Graviton-powered RDS instance families use Arm-based processors and are available in several general-purpose and memory-optimized classes, including instance names with a g suffix such as db.m7g and db.r7g.

For many standard PostgreSQL workloads, Graviton can provide attractive price-performance. It should be included in the default evaluation for new deployments, but it should not be selected only from a marketing percentage.

Benchmark your actual workload, verify extension compatibility, compare CPU utilization, query latency, I/O behavior, throughput, and licensing or tooling dependencies, and then make the decision using measured cost per transaction.

Graviton is not a magic switch. It is a strong architectural option that deserves workload-based testing.

9. Conclusion: The Platform Changes, the Craft Remains

The tools change. SIDs become managed instances. RAC architecture becomes an RDS availability design. RMAN scripts become automated backups and snapshots. SSH access disappears. Parameter files become parameter groups. Operating-system troubleshooting becomes service-level observability.

Yet the core discipline of the DBA remains essential. SQL tuning, indexing, statistics, capacity planning, security, monitoring, recovery validation, and calm incident management still determine whether a system is reliable.

The best Oracle DBAs do not become less valuable in a managed database service. They become more focused. Their attention moves away from repetitive infrastructure work and toward engineering decisions that directly affect performance, resilience, security, and cost.

The platform changes; the craft does not.

Are you ready to stop managing servers and start optimizing the data platform that drives your business?

Official References

© 2026 Punit Kumar. Built as a practical guide for Oracle DBAs transitioning to AWS RDS for PostgreSQL.