📍 New Eskaton, Dhaka-1000

How to Set Up Oracle RAC on Azure: Complete Step-by-Step Guide

Running Oracle Real Application Clusters (RAC) on Microsoft Azure used to be considered "unofficial" — but with the Oracle Database@Azure partnership announced in 2023 and matured through 2026, deploying production-grade RAC on Azure is now mainstream. After leading multiple Azure-based RAC deployments for banking and pharma clients migrating from on-premise data centers, here's the complete guide I wish existed when I started.

1. Why Run Oracle RAC on Azure?

Many enterprises want the resilience of RAC with the elasticity of cloud. Azure makes sense when:

  • You're already Azure-committed across the organization (M365, Active Directory, Sentinel)
  • You need to retire aging on-premise data center infrastructure
  • You want geographic redundancy across Azure regions for DR
  • Your DevOps/IaC stack is Azure-native (Terraform, Bicep, Azure DevOps)
  • You want to avoid pure AWS dependency for multi-cloud strategy

2. Two Deployment Paths in 2026

2.1 Oracle Database@Azure (OCI in Azure Data Centers)

The official Oracle-Microsoft partnership. Real Oracle Cloud Infrastructure hardware physically deployed inside Azure data centers, accessible via low-latency private network from your Azure subscription. Includes:

  • Exadata Database Service@Azure
  • Autonomous Database@Azure
  • Base Database Service@Azure

Best for: Production-grade Oracle with full Oracle support, RAC + Data Guard + Exadata performance, single Azure bill. Currently available in select regions (Frankfurt, Dublin, Virginia, Tokyo, Sydney, etc.).

2.2 Oracle RAC on Azure IaaS (DIY)

Build RAC yourself on Azure VMs using shared storage. This guide focuses on this path because it's flexible, available everywhere, and gives you full control.

3. Azure Architecture for Oracle RAC

A production 2-node RAC on Azure IaaS typically includes:

  • 2 × Azure VMs — Standard E32s_v5 or higher (32 vCPU, 256 GB RAM minimum for production)
  • Proximity Placement Group (PPG) — keeps VMs in same data center for low-latency interconnect
  • Availability Set or Availability Zone — for hardware redundancy
  • Accelerated Networking enabled — required for cluster interconnect performance
  • Shared storage: Azure NetApp Files (ANF), Azure Shared Disks, or FlashGrid Cluster
  • Premium SSD v2 / Ultra Disk for redo logs (low-latency writes)
  • 3 Subnets: Public, Private Interconnect, Backup
  • Standard Load Balancer for SCAN floating IP failover
  • Azure DNS Private Zone for SCAN registration

4. Shared Storage Options Compared

4.1 Azure NetApp Files (ANF)

Oracle's recommended option for Azure IaaS RAC. Pros: NFS v4.1 support, Oracle-certified, dNFS support, snapshot/clone capability. Cons: Premium pricing tier required (~$0.31/GiB/month), capacity pool minimum 4 TiB.

4.2 Azure Shared Disks

Block-level shared Premium SSD attached to multiple VMs with SCSI Persistent Reservations. Pros: Native Azure storage, no third-party. Cons: Performance limits, complexity in Linux multipath configuration, ASM filter driver setup required.

4.3 FlashGrid Cluster for Azure

Third-party solution providing virtual shared storage on top of local NVMe SSDs across nodes. Pros: Excellent performance, Oracle-validated. Cons: Additional license cost.

5. Step-by-Step Setup Overview

5.1 Plan & Prerequisites

  1. Choose Azure region with Oracle Linux 8 marketplace image availability
  2. Identify Oracle DB version (19c/21c/26ai) and licensing (BYOL vs on-cloud licenses)
  3. Network design: dedicated VNet, 3 subnets (public, private interconnect, backup)
  4. NSG rules: Ports 1521 (DB), 22 (SSH), 3260 (iSCSI if used), interconnect cluster ports
  5. Create Proximity Placement Group for tight VM colocation

5.2 Provision Infrastructure (Terraform)

Use Terraform for repeatability. Key resources:

resource "azurerm_proximity_placement_group" "rac_ppg" {
  name = "rac-prod-ppg"
  resource_group_name = azurerm_resource_group.rac.name
  location = "eastus"
}

resource "azurerm_linux_virtual_machine" "rac_node" {
  count = 2
  name = "racnode${count.index + 1}"
  size = "Standard_E32s_v5"
  proximity_placement_group_id = azurerm_proximity_placement_group.rac_ppg.id
  zone = "${count.index + 1}"

  source_image_reference {
    publisher = "Oracle"
    offer = "Oracle-Linux"
    sku = "ol87-lvm-gen2"
    version = "latest"
  }
  # Network interfaces (public + private + backup) attached separately
}

resource "azurerm_netapp_volume" "asm_data" {
  name = "asm-data-vol"
  resource_group_name = azurerm_resource_group.rac.name
  service_level = "Ultra"
  storage_quota_in_gb = 4096
  protocols = ["NFSv4.1"]
}

5.3 OS Preparation

On both nodes:

  • Install Oracle Linux 8.7+ (or Red Hat 8) with Oracle Preinstall RPM: dnf install -y oracle-database-preinstall-19c
  • Set kernel parameters, hugepages, swap (2-4x RAM)
  • Disable firewalld and SELinux (or configure properly)
  • Set up SSH passwordless auth for oracle and grid users between nodes
  • Time sync via chrony — mandatory for cluster stability
  • Configure /etc/hosts with public, VIP, private interconnect IPs

5.4 Configure Shared Storage

If using Azure NetApp Files (NFS v4.1):

# On both RAC nodes, mount the ANF volumes
mkdir -p /u02/oradata /u03/recovery /u04/ocrvote
mount -t nfs -o rw,bg,hard,nointr,tcp,vers=4.1,timeo=600,rsize=65536,wsize=65536,actimeo=0 \
  10.0.2.4:/asm-data-vol /u02/oradata

# Add to /etc/fstab for auto-mount
echo "10.0.2.4:/asm-data-vol /u02/oradata nfs rw,bg,hard,vers=4.1,timeo=600,actimeo=0 0 0" >> /etc/fstab

For Azure Shared Disks: Configure multipath, partition, and present to ASMLib/AFD.

5.5 Configure DNS for SCAN

SCAN requires 3 IPs from the public subnet, registered in Azure DNS Private Zone. Use Azure Load Balancer with floating IP rules to handle the 3 SCAN listeners.

# /etc/resolv.conf
nameserver 10.0.0.4  # Azure DNS Private Zone resolver

# Verify SCAN resolution
nslookup prod-scan.rac.internal
# Should return 3 different IPs round-robin

5.6 Install Grid Infrastructure

  1. Run cluster verify: ./runcluvfy.sh stage -pre crsinst -n racnode1,racnode2 -fixup
  2. Launch Grid Infrastructure installer: ./gridSetup.sh
  3. Choose "Configure Oracle Grid Infrastructure for a New Cluster"
  4. Select Standalone Cluster, provide SCAN name and port (1521)
  5. Add both nodes; configure SSH connectivity
  6. Configure ASM disk groups (OCR/VOTE, DATA, RECO) using NFS or shared disks
  7. Complete installation, run root scripts on each node when prompted
  8. Verify: crsctl status resource -t

5.7 Install Oracle Database 19c Software

Install database binaries only (no DBCA yet) on both nodes:

./runInstaller -silent \
  ORACLE_HOME=/u01/app/oracle/product/19c/db_1 \
  oracle.install.option=INSTALL_DB_SWONLY \
  oracle.install.db.CLUSTER_NODES=racnode1,racnode2 \
  -waitforcompletion -responseFile /tmp/db_install.rsp

5.8 Create RAC Database with DBCA

dbca -silent -createDatabase \
  -templateName General_Purpose.dbc \
  -gdbName PRODCDB -sid PRODCDB \
  -nodelist racnode1,racnode2 \
  -storageType ASM -diskGroupName DATA \
  -recoveryGroupName RECO \
  -characterSet AL32UTF8 \
  -sysPassword 'Welcome1#' -systemPassword 'Welcome1#'

5.9 Verify the Cluster

srvctl status database -d PRODCDB
crsctl status resource -t
sqlplus / as sysdba
SELECT inst_id, instance_name, host_name, status FROM gv$instance;

6. Apply Latest Release Update (RU)

Always apply the latest 19c RU after installation. Use OPatchAuto for rolling RAC patching:

$ORACLE_HOME/OPatch/opatchauto apply /path/to/RU_36912345
# Patches one node at a time, automatic rollback on failure

7. Configure Data Guard to Another Azure Region

For DR, deploy a second RAC cluster in a different Azure region (e.g., West Europe if primary is East US). Use Data Guard with broker over private peering. Compress redo for WAN: compression=enable in LOG_ARCHIVE_DEST_2.

8. Backup Strategy

  • RMAN to Azure Blob Storage via Oracle Database Backup Cloud Service module
  • Azure NetApp Files snapshots for fast crash-consistent backups
  • RMAN to a dedicated backup VM with managed disk (cheaper, slower)
  • Test restore quarterly — production is only as good as the last verified restore

9. Performance Tuning on Azure

  • Accelerated Networking: Mandatory for interconnect performance
  • Premium SSD v2: Higher IOPS at lower cost than Premium SSD
  • Hugepages: Configure 2MB hugepages for full SGA
  • NUMA pinning: Modern Azure E-series VMs are NUMA-aware; set _enable_NUMA_support=TRUE
  • dNFS: Enable Direct NFS for ANF (bypasses OS NFS client, faster)
  • RAC parameters: Tune cluster_database_instances, parallel_max_servers, db_cache_size per workload

10. Licensing & Cost Considerations

Oracle Database on Azure follows the Authorized Cloud Environment policy:

  • Per-OCPU equivalence: 2 Azure vCPUs = 1 Oracle processor license (with hyperthreading)
  • BYOL (Bring Your Own License) is most cost-effective if you already own Oracle licenses
  • Enterprise Edition required for RAC, Data Guard, Partitioning
  • Plan VM sizing to fit license budget — over-sizing VMs forces more license purchases

Approximate monthly cost for production 2-node RAC (E32s_v5 + ANF 4 TiB): $6,000-$10,000/month Azure infrastructure only. Add Oracle Enterprise Edition + RAC option licenses on top.

11. Common Pitfalls to Avoid

  • Skipping Proximity Placement Group — interconnect latency tanks performance
  • Forgetting Accelerated Networking — kills throughput
  • NSG blocking cluster ports — cluster won't form
  • Wrong storage type for redo — write latency causes log file sync waits
  • Using Standard Load Balancer Basic SKU — doesn't support what RAC needs
  • Not testing failover — quarterly DR drills are non-negotiable
  • Ignoring TIME_SYNC — clock drift causes node evictions

12. Monitoring & Operations

Combine Azure Monitor with Oracle Enterprise Manager:

  • Azure Monitor for VM, network, storage metrics
  • Oracle Enterprise Manager 13c for database health, AWR, ASH
  • Custom Log Analytics queries for alert.log parsing
  • Azure Sentinel integration for security events

13. When to Choose Oracle Database@Azure Instead

Use the official Oracle Database@Azure offering when:

  • You need Exadata-class performance
  • You want Oracle's full managed service (Autonomous Database)
  • Compliance requires Oracle-managed infrastructure
  • You're already in a region where the service is available

It costs more, but you get Oracle's expertise + Azure's billing/network integration.

Final Thoughts

Oracle RAC on Azure is no longer experimental — it's production-ready, supported, and increasingly common. The keys to success are: tight VM colocation (PPG), right storage choice (ANF for most), proper Linux preparation, and thorough cluster verification before going live. Skip any of these and you'll be debugging mysterious evictions for months.

Planning a RAC-on-Azure deployment? I help organizations design, build, and operate Oracle RAC on Azure (and OCI, AWS, and on-premise). With 18+ years of production Oracle experience and hands-on cloud RAC deployments, I bring the rare combination of database depth and cloud architecture clarity needed for these projects.

☁️ Need Oracle RAC on Azure Setup?

Full RAC deployment on Azure — architecture, sizing, installation, tuning, DR. Free consultation.

📩 Free Consultation 💬 WhatsApp

Related Articles

💬