Oracle to Aurora PostgreSQL: A Structured Assessment Playbook

sleroy · Jul 29, 2026 · 5 min read

Oracle database migrations are never simple. But they’re increasingly necessary — license costs are punishing, modern alternatives have matured, and the “just renew” option gets more expensive every year.

I’ve led and supported enough Oracle-to-PostgreSQL assessments to know that the assessment itself is where most migrations succeed or fail. Rush it, and you’ll discover the hard problems during cutover. Do it right, and the migration becomes a well-scoped engineering project with predictable timelines.

Here’s the playbook.

Watch the 30-second summary

Auto-generated summary — read the full article below for details.


Why Migrate?

The business drivers I see most often:

  • License cost reduction — Oracle licensing is brutal, especially with RAC and partitioning
  • End of support / version upgrade pressure — upgrading Oracle is its own project
  • Cloud-first strategy — organizations standardizing on cloud-native services
  • Vendor lock-in reduction — Oracle’s commercial practices create dependency
  • AI/data strategy — unlocking data for modern analytics and ML workloads

The Assessment Framework

1. Current State Discovery

Database Inventory

For each database, document:

  • Version and Edition (Enterprise vs. Standard)
  • Size (GB)
  • Environment (Prod / Non-Prod)
  • Business criticality (High / Medium / Low)

Oracle Features in Use

This is where complexity hides. Check every one of these:

Core Features:

  • Partitioning (Range / List / Hash / Composite)
  • Materialized Views
  • Database Links (DB Links)
  • Advanced Queuing (AQ)
  • Real Application Clusters (RAC)
  • Data Guard (Active / Passive)
  • Transparent Data Encryption (TDE)
  • Flashback (Table / Database / Query)
  • Virtual Private Database (VPD) / Row Level Security

PL/SQL Complexity:

  • Package count
  • Procedure/Function count
  • Dynamic SQL (EXECUTE IMMEDIATE, DBMS_SQL)
  • Autonomous Transactions
  • Pipelined Functions
  • Bulk Operations (FORALL, BULK COLLECT)

Connectivity:

  • Peak connection count
  • Connection pooling mechanism
  • Third-party integrations

2. Feature Mapping: Oracle to Aurora PostgreSQL

Oracle FeatureAurora PostgreSQL EquivalentNotes
RAC (multi-node)Aurora Multi-AZ + Read Replicas + Custom EndpointsNo shared-nothing clustering
Data GuardAurora Global Database / Cross-Region ReplicasRPO ~1s for Global DB
TDEAWS KMS encryption at rest (default)No wallet management
PartitioningPostgreSQL declarative partitioning (PG 10+)Range, List, Hash supported
Materialized ViewsPostgreSQL Materialized ViewsNo automatic refresh — use pg_cron
GoldenGate (CDC)AWS DMS CDC / Logical Replication
PDB multi-tenancyDatabase-per-tenant / Schema-per-tenantDesign decision required
DBMS_SCHEDULERpg_cron / Amazon EventBridge + Lambda
Oracle AQAmazon SQS / SNS / EventBridgeApplication change required
DB Linkspostgres_fdw / dblink extension
VPD / RLSPostgreSQL Row-Level Security (native since PG 9.5)
FlashbackPITR / Aurora Backtrack (up to 72h)
PL/SQLPL/pgSQLSyntax translation required
Oracle TextPostgreSQL Full-Text Search (tsvector/tsquery)
Autonomous TransactionsSeparate DB connection / dblink to selfPattern change

3. Complexity Scoring

DimensionLowMediumHigh
Schema complexity<100 objects100–500>500
PL/SQL volume<50 procedures50–200>200
Oracle-specific features≤2 features3–5>5
Application couplingLoose (ORM)MixedTight (raw SQL)
Data volume<100 GB100 GB–1 TB>1 TB
Downtime tolerance>8h1–8h<1h

Score each dimension. Sum them. The total drives your effort estimate and strategy selection.


4. Migration Strategy Selection

ApproachWhen
Lift & Shift (Oracle on RDS/EC2)You need to exit the datacenter fast; modernization comes later
Re-platform (Oracle → Aurora PG)Straightforward schema, low PL/SQL complexity
Phased MigrationLarge system, migrate schema-by-schema
Big BangSmall database, acceptable downtime window
Strangler PatternMission-critical, zero-downtime, dual-write during transition

PhaseToolPurpose
AssessAWS SCT (Multiserver Assessment)Automated complexity report
AssessAWS DMS Fleet AdvisorInventory and right-sizing
ConvertAWS DMS Schema ConversionSchema + code conversion with GenAI assistance
ConvertAmazon Q DeveloperPL/SQL → PL/pgSQL AI-assisted refactoring
MigrateAWS DMS (CDC)Data migration with minimal downtime
ValidateAWS DMS Data ValidationRow-level comparison
MonitorCloudWatch Database InsightsPost-migration observability

6. High-Level Roadmap

Phase 1: Assess (2–4 weeks)
├── Run SCT Assessment
├── Application dependency mapping
├── Feature gap analysis
└── Effort estimation & business case

Phase 2: Mobilize (4–6 weeks)
├── Set up Aurora PG target environment
├── Schema conversion (iterative)
├── PoC for high-risk areas
└── Migration runbook development

Phase 3: Migrate & Modernize (6–12 weeks)
├── PL/SQL → PL/pgSQL translation
├── Application refactoring
├── Data migration (full load + CDC)
├── Performance testing & tuning
├── Cutover rehearsals
└── Production cutover

Top Risks

RiskMitigation
Complex PL/SQL not auto-convertibleAmazon Q Developer + manual SME review
Application hard-coded Oracle SQLCode scanning + staged refactoring
Performance regression post-migrationBenchmark before/after; Aurora Performance Insights
Downtime exceeds windowDMS CDC for near-zero downtime; cutover rehearsals
Multi-tenancy redesign complexityPoC early in Mobilize phase

Key Takeaways

  • The assessment is where you win or lose — never skip it
  • Run AWS SCT first to get an automated complexity baseline
  • PL/SQL translation is usually the biggest effort item — scope it accurately
  • Oracle features like RAC and AQ don’t have 1:1 equivalents — they require architectural decisions
  • Amazon Q Developer accelerates PL/SQL-to-PL/pgSQL, but complex packages still need human review
  • Use DMS with CDC for near-zero-downtime migrations — batch-and-cutover is rarely acceptable for production
  • Rehearse the cutover at least twice before the real thing

References


Any opinions in this article are my own.

comments powered by Disqus