Oracle Database@Azure: Connecting Azure Applications with Exadata
Azure application integration

Oracle Database@Azure: Connecting Azure Applications with Exadata

Provisioning Exadata in Azure takes a few clicks. Getting every VM, AKS pod, App Service and on-premises user to reach it reliably is the real project. This guide walks through the network, DNS, identity and driver settings that make the connection work, hop by hop.

Exadata Multi-Cloud Series · Azure Integration Guide
VMs AKS App Service ExpressRoute Functions Hub VNet
On this page
  1. 01 · Why Connectivity Is the Real Project
  2. 02 · How Oracle Database@Azure Places Exadata in Your VNet
  3. 03 · Designing the Network: Hub, Spokes, Peering and Routes
  4. 04 · DNS: The Hop That Breaks Most Connections
  5. 05 · Four Connection Paths, Hop by Hop
  6. 06 · Identity and Security: Entra ID, Ports and Encryption
  7. 07 · Connection Strings, Drivers and Resilience
  8. 08 · Setup Sequence and Test Plan
  9. 09 · Key Takeaways
  10. 10 · Frequently Asked Questions

01 · Why Connectivity Is the Real Project

Integration brief · Azure applications to Exadata

"The cluster is up. Why can't the application connect?"

Most Oracle AI Database@Azure projects (the service launched as Oracle Database@Azure) hit the same moment. The Exadata VM cluster shows as available in the Azure portal, the DBA has created the container database and a pluggable database, and the first application deployment fails with a timeout. The database is fine. The problem is a DNS zone that is not linked, a peering without gateway transit, or a route that sends traffic to a firewall that drops it.

That is because the Database@ model puts Exadata inside your Azure network, not behind a public endpoint. The database gets private IP addresses in a subnet of your virtual network, and every Azure workload reaches it the same way it reaches any other private service: through VNet routing, peering, network security rules and private DNS. This post shows how to fit it into a hub-and-spoke landing zone.

01Exadata gets its client IPs from a delegated subnet in an Azure VNet. Applications connect over private addresses, never over the internet.
02Every connection needs three things to line up: the name resolves, the packet is routed, and the port is allowed.
03Identity is separate from the network: Microsoft Entra ID can authenticate database users with tokens once the path works.

02 · How Oracle Database@Azure Places Exadata in Your VNet

Answer: Oracle Database@Azure runs Exadata hardware in an Oracle-operated OCI child site inside the Azure data center. You delegate a subnet in your own VNet to the service, and the VM cluster's client network interfaces, SCAN addresses and node VIPs take IP addresses from that subnet.

From the application's point of view the Exadata VM cluster looks like any other private resource in Azure. It has addresses in a subnet you created, in a VNet you own, in a region you chose. Behind it, the Exadata servers sit in Oracle's racks in the same Azure data center, managed by OCI from a parent region. Delegating the subnet to Oracle.Database/networkAttachments lets the service attach interfaces into your VNet.

The topology below is the pattern most enterprises end up with. A hub VNet holds the ExpressRoute gateway, the central firewall and the DNS Private Resolver. The database has its own spoke with the delegated subnet and a private DNS zone, and applications live in a separate peered spoke. On-premises users arrive through ExpressRoute and the hub firewall.

Azure Applications to Exadata: Hub-and-Spoke Topology On-premises Azure region (Oracle Database@Azure) Hub VNet Database spoke VNet Application spoke VNet Delegated subnet Users, batch Corporate network On-prem DNS Conditional forwarder ExpressRoute gateway Azure Firewall or NVA DNS Private Resolver Exadata VM cluster SCAN + node VIPs TCP 1521 / 2484 Private DNS zone DB host names Azure VMs App servers AKS cluster Azure CNI pods App Service VNet integration peering UDR zone link App to database over peering On-prem via ExpressRoute + hub DNS resolution path The Exadata servers run in an Oracle-operated OCI child site in the same Azure data center. The delegated subnet gives the VM cluster its client IPs inside your VNet.
Figure 1 · Hub-and-spoke placement of an Exadata VM cluster on Oracle AI Database@Azure, with app spokes and on-premises access

Follow the blue path first: VMs, AKS and App Service traffic reaches the SCAN listener over VNet peering on TCP 1521, or 2484 if you enable TLS. The orange path is on-premises traffic, which enters through the ExpressRoute gateway and is forced through the firewall by a user-defined route (UDR). The grey dashed path is DNS, which must work before either of the others.

What lives where

Component Lives in Who manages it
Exadata database and storage servers OCI child site in the Azure data center Oracle (infrastructure)
VM cluster client interfaces, SCAN, VIPs Delegated subnet in your VNet You choose the range; the service assigns IPs
Hub, peering, UDRs, firewall Your Azure subscription Your network team
Private DNS zone for database host names Your subscription (or Oracle-managed default) Your platform team

03 · Designing the Network: Hub, Spokes, Peering and Routes

Answer: Put the delegated subnet in a dedicated database spoke, peer it to the hub and to application spokes, and decide early whether traffic between spokes goes direct over peering or through the hub firewall. Plan non-overlapping CIDRs for every VNet, the delegated subnet and the backup range before provisioning.

There are two common designs. In the first, application spokes peer directly with the database spoke. Latency is lowest and there are fewer moving parts, but east-west traffic bypasses your central firewall. In the second, every spoke peers only with the hub, and UDRs send spoke-to-spoke traffic through Azure Firewall or a network virtual appliance (NVA). That gives you inspection and central logging at the cost of an extra hop and firewall throughput limits.

Both are valid if chosen deliberately. Support for NSGs, UDRs and hub transit on delegated subnets has widened over time and depends on the service's advanced network features in your region, so confirm the current matrix in the Microsoft Learn documentation before you commit.

Design choice Direct spoke peering Through hub firewall
Latency Lowest: one hop Extra hop through the firewall
Inspection and logging NSG flow logs only Central firewall logs and policy
Configuration Peering per app spoke Hub peering plus UDRs on both sides
Typical use Latency-sensitive OLTP, few spokes Regulated estates, many spokes, on-prem access
Main risk Uncontrolled east-west access Asymmetric routing if UDRs miss a side

Address planning rules

Overlapping address space is the single most common reason a Database@Azure build stalls. Peering will not work between VNets with overlapping ranges, and the delegated subnet range is hard to change after the VM cluster is built. Reserve every range in your IPAM tool first and check it against on-premises ranges advertised over ExpressRoute.

Asymmetric routingIf on-premises traffic is forced through the hub firewall by a UDR in the gateway subnet, the return traffic from the database spoke must also go through the firewall. Add the matching UDR on the database side, or the firewall will drop the replies as unknown sessions.

04 · DNS: The Hop That Breaks Most Connections

Answer: Applications should connect to the SCAN host name, not to IP addresses, so DNS must resolve it from every client network. Link the private DNS zone that holds the database names to every VNet with clients, and point on-premises DNS at an Azure DNS Private Resolver inbound endpoint with a conditional forwarder.

When you create the VM cluster you choose how its host names are published: in an Oracle-managed default domain, or in a private DNS zone in your own subscription. Either way, the names only resolve from networks that can see that zone. A VM in the database spoke usually works on the first try. An AKS pod in another spoke, an App Service app and an on-premises laptop each need their own path to the same zone, and that is where most connection failures start.

For Azure workloads, link the zone to each client VNet (or to the hub, if spokes use a central DNS server or the Private Resolver). For on-premises clients, create an inbound endpoint on the DNS Private Resolver in the hub and add a conditional forwarder on your corporate DNS for the database domain. Then test from each network:

# From a VM, an AKS debug pod and an on-prem host
nslookup exa-clu1-scan.db.contoso.internal
# Expect three SCAN addresses from the delegated subnet range
tnsping exa-clu1-scan.db.contoso.internal:1521/app_svc.contoso.internal

AKS pods resolve through CoreDNS, which forwards to the node VNet's DNS server, so a custom DNS server there must forward the database domain. App Service resolves through its integrated VNet, so link the zone to that VNet too.

05 · Four Connection Paths, Hop by Hop

Answer: Every Azure client reaches Exadata through the same three hops: resolve the SCAN name, route to the delegated subnet, and pass the security rules on TCP 1521 or 2484. What changes between a VM, an AKS pod, an App Service app and an on-premises user is how each hop is configured.

The walkthrough below lines up the four client types most teams have. Read each row left to right: the yellow headers are the three questions every packet must answer, and the boxes show the setting that answers it for that client. When a team reports that "the database is down", walk this checklist one hop at a time.

Four Connection Paths and What Each Hop Needs 1 Resolve the name 2 Route the packet 3 Allow the port VM in the same VNet Different subnet Zone linked to VNet Azure DNS answers System route No UDR needed NSG rules 1521 from app subnet AKS pod Peered app spoke CoreDNS to Azure DNS Zone linked to spoke VNet peering Or hub firewall + UDR Allow node / pod CIDR Azure CNI ranges App Service Regional VNet integration Zone linked to integration VNet Route all enabled Via integration subnet Allow integration subnet Outbound IP range On-prem user SQL Developer, batch Forwarder to resolver Inbound endpoint ExpressRoute Gateway transit, UDR Allow on-prem CIDRs Firewall + NSG Exadata VM cluster SCAN listener on the delegated subnet Azure workload path On-prem path over ExpressRoute A failure at any hop looks the same to the application: a timeout or ORA-12170. Test each hop separately.
Figure 2 · Resolve, route, allow: what each hop needs for a VM, an AKS pod, App Service and an on-premises user

The App Service row is the one most often missed. Without regional VNet integration and the route-all setting, outbound calls leave through the app's public outbound addresses and never reach the private SCAN IPs. The on-premises row depends on gateway transit on the peering and matching UDRs in both directions.

Client-side settings per workload

Workload Network setting Driver and config notes
Azure VM NIC in a subnet with a route to the database spoke Instant Client or full client; tnsnames.ora or EZConnect Plus
AKS Azure CNI so pods get VNet-routable addresses JDBC or ODP.NET in the image; store the wallet as a Kubernetes secret
App Service Regional VNet integration, route all enabled Connection string in app settings, secrets in Azure Key Vault
On-premises ExpressRoute with gateway transit and UDRs Same SCAN name through the DNS forwarder

06 · Identity and Security: Entra ID, Ports and Encryption

Answer: Network rules decide who can reach the listener; database authentication decides who can log in. Oracle Database on Exadata in Azure supports Microsoft Entra ID token authentication, so users and applications can sign in with Entra identities instead of local database passwords, over a TLS connection.

Keep the two layers separate in your design. At the network layer, allow only known source ranges on the database ports. At the identity layer, map Entra ID users and app roles to database schemas or global roles. The database is registered with Entra ID as an application, and you set two initialisation parameters to trust it:

ALTER SYSTEM SET IDENTITY_PROVIDER_TYPE = AZURE_AD SCOPE=BOTH;
ALTER SYSTEM SET IDENTITY_PROVIDER_CONFIG =
  '{"application_id_uri":"https://contoso.onmicrosoft.com/exa-app",
    "tenant_id":"<tenant-guid>", "app_id":"<app-guid>"}' SCOPE=BOTH;

-- Map an Entra ID app role to a shared database schema
CREATE USER app_rw IDENTIFIED GLOBALLY AS 'AZURE_ROLE=ExaAppReadWrite';

Token authentication requires a TLS (TCPS) connection, which is another reason to enable the TCPS listener early. Applications that cannot use tokens yet can keep passwords, held in Azure Key Vault rather than in config files.

Port / protocol Purpose Allow from
TCP 1521 SQL*Net to SCAN and node VIPs Application subnets, on-prem app ranges
TCP 2484 TCPS (TLS) listener, if enabled Same as above; required for Entra ID tokens
TCP 6200 ONS for Fast Application Notification Application servers using FAN-aware pools
Allow the VIPs, not only the SCANThe SCAN listener redirects each new connection to a node VIP. If your firewall or NSG rules allow only the three SCAN addresses, the first hop succeeds and the redirected connection times out. Allow the whole client address range of the VM cluster.

07 · Connection Strings, Drivers and Resilience

Answer: Use the SCAN name, a database service (never the default service), and Oracle's recommended retry and timeout settings in the connect descriptor. Enable FAN and Application Continuity on the service so that patching and node failures in the Exadata VM cluster are invisible to users.

Exadata in Azure is still a RAC cluster, and rolling patching restarts instances under the application regularly. Applications that connect to one node by IP, or ignore FAN events, see those windows as outages. A standard connect descriptor avoids that:

APP_SVC =
 (DESCRIPTION =
   (CONNECT_TIMEOUT=90)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)
   (ADDRESS_LIST = (LOAD_BALANCE=on)
     (ADDRESS = (PROTOCOL=TCP)(HOST=exa-clu1-scan.db.contoso.internal)(PORT=1521)))
   (CONNECT_DATA = (SERVICE_NAME=app_svc.contoso.internal)))

On the database side, create a dedicated service per application with high availability attributes, for example srvctl add service -db CDB1 -pdb SALESPDB -service app_svc -preferred CDB11,CDB12 -failovertype TRANSACTION -commit_outcome TRUE -notification TRUE. That enables Transparent Application Continuity behaviour for drivers that support it and publishes FAN events on the ONS port.

If the application can resolve the SCAN name, reach every node VIP and receive FAN events, Exadata in Azure behaves exactly like Exadata in your own data center, only closer to the application.

08 · Setup Sequence and Test Plan

Answer: Build the network before the database: plan CIDRs, delegate the subnet, peer the VNets, wire DNS and open the ports, then provision the VM cluster and test each client type from its own network. Finish with a failover drill using the real application driver.

The timeline below is the order that avoids rework. The first four steps belong to the network and platform teams and can be finished before the VM cluster exists. The owner tags matter: in most delayed projects the DBA was waiting on a DNS link or firewall rule owned by another team.

Setup Sequence: From Address Plan to First Connection Step 1 Plan CIDRs Network team Non-overlapping ranges for hub, spokes, delegated subnet and the OCI backup range Step 2 Delegate subnet Network team Create the subnet and delegate it to the Oracle Database service Step 3 Peer VNets Network team Spoke to hub peering, gateway transit, UDRs through the firewall Step 4 Wire DNS Platform team Link the private zone to every client VNet, add on-prem forwarders Step 5 Open ports Security + DBA 1521 or 2484, ONS 6200 for FAN, only from known CIDRs Step 6 Test DBA + app team nslookup, tnsping, sqlplus, then a failover drill with the real driver Most delays: CIDR overlap and quota Most failures: DNS not linked to a VNet Do steps 1 to 4 before provisioning the VM cluster. The delegated subnet and its address range cannot be changed casually once the cluster is built.
Figure 3 · Six steps from address plan to first connection, with the team that owns each one

Steps 1 and 4 cause most of the trouble. A CIDR overlap found after provisioning means rebuilding the cluster, and a private DNS zone that is not linked to one client VNet looks exactly like a database outage from that application. Treat both as gating checks.

  1. Resolve from every client network. Run nslookup for the SCAN name from a VM, an AKS debug pod, the App Service console and an on-premises host. All four must return the same addresses.
  2. Test the port, not just the ping. Use tnsping or a TCP check against the SCAN name and each node VIP.
  3. Log in with the real identity. Connect with an Entra ID token or the vaulted application credential, not with SYSTEM, so you test the access path users will actually take.
  4. Run a planned failover. Relocate the service or restart one instance with srvctl while a test load runs. Watch the application for errors.

09 · Key Takeaways

  1. Exadata joins your VNet. The delegated subnet gives the VM cluster private client IPs, so Azure workloads connect over peering and private routing, not over the internet.
  2. Three hops, every time. Resolve the SCAN name, route to the delegated subnet, allow 1521 or 2484 from the client range. Most failures are DNS.
  3. Decide direct peering vs hub firewall early. Both work; mixing them by accident creates asymmetric routing that drops replies.
  4. Entra ID handles who logs in. Token authentication over TLS replaces local passwords; network rules still decide who can reach the listener.
  5. Design for RAC behaviour. SCAN name, a dedicated service, FAN and Application Continuity make rolling maintenance invisible to users.

10 · Frequently Asked Questions

How do Azure applications connect to Exadata on Oracle Database@Azure?

They connect over private IP addresses. The Exadata VM cluster takes its client addresses from a delegated subnet in an Azure VNet, and applications in the same VNet or in peered VNets reach the SCAN listener on TCP 1521, or 2484 for TLS, using a private DNS name.

Can AKS pods connect to Exadata in Azure?

Yes. Use Azure CNI so pods get VNet-routable addresses, peer the AKS VNet with the database VNet directly or through a hub, make sure CoreDNS can resolve the private DNS zone, and allow the node or pod address range on the database ports.

Does Azure App Service work with Oracle Database@Azure?

Yes, with regional VNet integration. Enable route all so outbound traffic goes through the integration subnet, link the database private DNS zone to the integrated VNet, and allow that subnet on the listener ports.

Can I use Microsoft Entra ID to log in to the Oracle database?

Yes. Oracle Database supports Entra ID token authentication. You register the database with Entra ID, set IDENTITY_PROVIDER_TYPE and IDENTITY_PROVIDER_CONFIG, map users or app roles to database schemas, and connect over TLS.

Why does my connection time out even though the SCAN address is reachable?

The SCAN listener redirects each connection to a node VIP. If firewall or NSG rules allow only the SCAN addresses, or a route to the VIPs is missing, the redirected connection times out. Allow the full client address range of the VM cluster.

About the author. ExaGuru Oracle Cloud architects design and run Exadata, ExaCC and multi-cloud Oracle estates for enterprise customers, and teach the same architectures in live, hands-on labs.

Learn this hands-on

Practice Exadata, OCI and multi-cloud architectures in live labs with a practicing consultant.