There are two real ways to move Oracle to AWS, and they are not the same decision. You can lift-and-shift to Oracle on RDS (fast, low-risk, but you keep paying Oracle) — or you can re-platform to Aurora PostgreSQL and delete the Oracle licensing line item for good. This page walks the SCT + DMS workflow honestly: schema conversion, the PL/SQL parts that fight you, CDC replication, the cutover, and the savings model that justifies the whole project. AWS MAP and database-migration funding can cover most of the cost.
Performance is rarely the reason companies leave Oracle. Oracle is an excellent database. The reason is the cost structure: per-core licensing, mandatory support renewals, expensive options, and audit exposure that grows every time you add a CPU.
Oracle Database Enterprise Edition lists at roughly $47,500 per processor license, and a single physical core often counts as more than one "processor" once Oracle's core-factor table is applied. On top of the license you pay about 22% per year in support, indefinitely. Then come the options most enterprise schemas quietly depend on — Partitioning, Advanced Compression, Diagnostics and Tuning Packs, Active Data Guard, RAC — each licensed separately, each per-core. A mid-sized Oracle estate routinely carries a seven-figure annual Oracle bill before a single new feature ships. Run it on your own metal and you add the hardware refresh, DBA headcount, and a DR standby site — and running under a hypervisor invites the recurring audit argument about whether you must license every core in the cluster, not just the ones the database touches.
AWS changes the structure in two ways. First, you can keep Oracle but stop running the metal: Amazon RDS for Oracle gives you managed Oracle (patching, backups, Multi-AZ failover) on infrastructure you rent by the hour, with Bring-Your-Own-License or license-included pricing — removing the hardware and most operational toil while leaving the Oracle license question intact. Second — the path that actually moves the cost needle — you re-platform to an open-source-compatible engine, Amazon Aurora PostgreSQL, and the Oracle license line item disappears entirely.
This is why the Oracle-to-AWS decision is really two decisions, and why the rest of this page is organized around them. Lift-and-shift to RDS for Oracle is the safe, fast move that keeps your license. Re-platform to Aurora PostgreSQL is the harder move that captures 60–90% database-cost savings. Knowing which workload deserves which path is the entire game.
In the language of the AWS 7 Rs, lift-and-shift to RDS for Oracle is Rehost/Relocate (homogeneous — same engine), and moving to Aurora PostgreSQL is Replatform/Refactor (heterogeneous — different engine). The technical difficulty, the risk, and the payoff differ by an order of magnitude.
Be deliberate about which database goes which way. The instinct to "just move everything to Aurora and save the money" runs straight into the reality that some Oracle databases are so deeply wired into PL/SQL, Oracle-specific SQL, and third-party-vendor support matrices that converting them costs more than the license they'd save. Conversely, defaulting everything to RDS for Oracle because it's easy means you carry the Oracle bill into AWS and never capture the prize.
What it is: the same Oracle engine, now managed by AWS. RDS handles patching, automated backups, point-in-time restore, and synchronous Multi-AZ standby failover. You pick an instance class, attach storage, and you have managed Oracle in hours.
How you migrate: homogeneous Oracle→Oracle moves are simple. Native Oracle Data Pump export/import for smaller databases; DMS or Data Pump over a Direct Connect / Site-to-Site VPN link for larger ones; or RDS’s ability to restore from an S3-staged backup. Because the engine is identical, application code, PL/SQL, and SQL are unchanged.
Licensing: BYOL (move your existing Oracle licenses, subject to Oracle’s cloud policy) or license-included (AWS bundles Standard Edition Two into the hourly rate). You still pay Oracle either way.
Timeline: typically 2–8 weeks per database. Limited rewrite, limited test surface.
This is the right path when the database is mission-critical and tightly coupled to Oracle features, a third-party vendor requires Oracle, the team has no PostgreSQL bandwidth, or you simply need off your own hardware now and will modernize later. It is the de-risking step, not the destination.
What it is: Amazon Aurora PostgreSQL — a PostgreSQL-compatible engine with cloud-native storage that auto-scales to 128 TiB, replicates six ways across three Availability Zones, and supports up to fifteen low-latency read replicas. No Oracle license. No Oracle support renewal. No core-factor table.
How you migrate: heterogeneous Oracle→PostgreSQL conversion via AWS SCT (schema + code) and AWS DMS (data + CDC). This is the workflow Sections III–V cover in detail, because it is where the real work lives.
Licensing: none for the engine. You pay only for Aurora compute, storage, and I/O. This is the line item that drives the 60–90% savings.
Timeline: typically 4–9 months end to end for a substantial database, dominated by PL/SQL conversion and testing rather than data movement.
This is the right path when the database carries real Oracle licensing cost, the schema and PL/SQL are tractable (SCT will tell you), the team can own PostgreSQL going forward, and the savings clearly exceed the one-time conversion effort. For most enterprises, this is the migration worth funding.
Most successful Oracle-to-AWS programs do both: lift-and-shift the genuinely hard or vendor-locked databases to RDS for Oracle to get off the metal fast and stop the audit clock, then re-platform the high-license-cost, tractable databases to Aurora PostgreSQL to capture the savings. Sequencing the easy wins first builds the credibility (and frees the budget) to fund the harder conversions.
The Schema Conversion Tool is where an Oracle→Aurora project succeeds or stalls, because SCT does something invaluable before you commit: it produces an Assessment Report that tells you, object by object, exactly how much converts automatically and what does not. That report is your project plan.
You point SCT at the source Oracle database and the target Aurora PostgreSQL endpoint, and it analyzes the entire schema: tables, indexes, views, sequences, constraints, and crucially the procedural code — packages, procedures, functions, triggers. It then converts what it can and flags what it cannot, classifying every action item by complexity (simple, medium, complex). The headline number — the percentage of objects that auto-convert — typically lands between 70% and 95%, and the spread between those two numbers is almost entirely about how much PL/SQL you have and how Oracle-specific it is.
Storage objects convert cleanly almost every time. Datatypes are mostly mechanical (Oracle NUMBER maps to PostgreSQL numeric/bigint/integer depending on precision; VARCHAR2 to varchar; CLOB to text; BLOB to bytea), and SCT handles the mapping, though it will flag NUMBER columns whose precision needs a human decision. The places SCT cannot fully automate are predictable, and they are the same places every Oracle→PostgreSQL migration spends its engineering hours.
For the genuinely hard objects, SCT can deploy an extension pack and, for some patterns, emulate Oracle functions on the PostgreSQL side rather than rewriting the logic by hand. That is a pragmatic accelerator, but treat emulated constructs as technical debt to revisit, not a free pass. The disciplined approach is to convert what auto-converts, manually rewrite the medium/complex action items into idiomatic PL/pgSQL, and reserve emulation for the long tail where a clean rewrite is not yet justified.
The single most useful output of this phase is not the converted schema — it is the number. Once you know "this database is 88% auto-convertible with 240 complex action items," you can size the project honestly. A 95%-convertible reporting database is a quick win. A 70%-convertible core-banking schema with thousands of PL/SQL lines is a real engineering program, and it may belong on Path A (RDS for Oracle) instead. SCT lets you make that call with data rather than optimism.
Oracle’s procedural language is richer than PostgreSQL’s PL/pgSQL, so the gaps are real and worth naming so they don’t surprise you mid-project:
Once the schema exists on Aurora, the Database Migration Service moves the data — and, more importantly, keeps it moving. DMS’s change-data-capture mode is what turns a terrifying weekend-long cutover into a controlled switch measured in minutes.
A DMS migration task runs in up to three modes. The full load copies existing table data from Oracle into Aurora. CDC then captures every change happening on the live Oracle database — reading the redo logs — and applies those changes to Aurora continuously. Run "full load plus CDC" and DMS first bulk-copies the data, then enters a steady state where Aurora trails production Oracle by seconds. Your source system stays fully online the entire time; users never know a migration is underway.
That replication window is the heart of low-downtime migration. You let DMS keep Aurora in sync for days or weeks while you validate, performance-test, and run the application against the new database in staging. When you are confident, the cutover is simply: stop writes to Oracle, let DMS drain the last few seconds of changes, repoint the application’s connection string to Aurora, and resume. Done carefully, the user-visible downtime is minutes.
DMS is not magic on what cannot be expressed as row changes. CDC replicates inserts, updates, and deletes; it does not migrate procedural code (SCT’s job), secondary indexes and constraints are typically created after the full load for speed, and large-object (LOB) columns need explicit LOB-handling settings that trade throughput against completeness. For very large or high-change-rate databases you size the replication instance accordingly and often parallelize across multiple tasks — standard operational care a seasoned migration partner has done many times.
DMS includes data validation that compares source and target row-by-row after load and during CDC, reporting mismatches rather than asking you to trust the pipe. For a mission-critical database this is non-negotiable: you validate row counts, checksums on critical tables, and application-level reconciliation queries before anyone signs off on cutover. The combination of DMS validation plus your own business-logic reconciliation is what lets a CFO or a regulator accept that the Aurora copy is the system of record.
The conversion and the data move are engineering. The cutover is risk management. For a database the business runs on, the migration plan is judged entirely on one question: what happens if something goes wrong at the moment of switch?
The answer is a rehearsed runbook with a rollback path that you do not have to invent under pressure. The single most important design choice is to leave the source Oracle database untouched and authoritative until after the cutover succeeds. Because DMS CDC is keeping Aurora in sync from Oracle (not the other way around), the rollback during the cutover window is trivial: if validation fails after you switch, you repoint the application back to Oracle, which never stopped being correct. You only burn that bridge once you are certain.
A typical mission-critical cutover sequence runs like this:
None of this removes risk entirely — a heterogeneous migration of a system the business depends on is genuinely hard — but the discipline of migrating non-critical databases first, rehearsing the cutover in staging, and keeping the rollback explicit converts an unbounded risk into a bounded, rehearsed, reversible event. That is precisely the experience you are paying a vetted migration partner for, and precisely what AWS MAP funds them to do well.
The conversion costs real engineering time, so the business case has to clear it. For Oracle→Aurora it almost always does, because the recurring Oracle bill it eliminates is large and perpetual while the conversion is one-time.
Build the model on three lines. First, the Oracle cost you delete: licenses (per processor, after the core-factor multiplier), the ~22% annual support renewal, the options you currently license (Partitioning, Diagnostics, RAC, Active Data Guard), plus the infrastructure and DBA effort if you run it yourself. Second, the Aurora cost you take on: compute (instance hours or Aurora Serverless v2 capacity), storage, I/O, and backups — with no license layer at all. Third, the one-time conversion cost: the SCT/DMS work, PL/SQL rewrites, testing, and cutover — the line that MAP and database-migration funding are designed to offset.
In practice, moving a workload off Oracle Enterprise Edition with options to Aurora PostgreSQL cuts database TCO by roughly 60–90%. The savings skew higher when you were paying for expensive options and a DR standby (all of which Aurora provides natively — Multi-AZ, automated backups, read replicas — without per-feature licensing) and lower when you were already on Standard Edition. The payback period on the conversion is commonly well under a year on the Oracle support renewal alone, which is why these projects survive CFO scrutiny that kills most "modernization" initiatives.
Two honest caveats keep the model credible. PostgreSQL is not a drop-in Oracle, so budget for the conversion and for a performance-tuning phase — query plans, indexing, and connection pooling all need attention on the new engine. And the savings are real only after decommission: as long as Oracle runs in parallel as a safety net, you are paying for both. Plan the decommission date explicitly, because that date is when the recurring savings actually begin.
A funded, done-for-you Oracle migration is the CloudRoute mechanism. You do not assemble an internal SCT/DMS team from scratch and absorb the cost — you get matched to a vetted AWS partner who has migrated Oracle before, and AWS funding covers most or all of the engagement.
The vehicle is the AWS Migration Acceleration Program (MAP), run through the AWS Partner Network in three phases. Assess is a TCO and readiness analysis — the partner runs SCT against your Oracle databases to produce the auto-convertibility numbers and a real cost model; this phase is frequently AWS-funded and gives you the go/no-go data before you commit a dollar. Mobilize builds the landing zone and a pilot conversion of a representative database. Migrate & Modernize is the production conversion and cutover. AWS provides credits and funding scaled to the migration’s size across these phases, and there are AWS programs specifically aimed at database migrations off commercial engines like Oracle.
The honest framing matters: MAP funding applies to qualifying migrations — typically those with a meaningful committed AWS spend after migration — and the exact amount is scoped during Assess. For a substantial Oracle estate that easily clears the bar, the migration cost can be largely or entirely AWS-funded. For smaller workloads that don’t qualify for full funding, the value is still real: a vetted partner who has done heterogeneous Oracle→Aurora migrations and de-risks the cutover, rather than your team learning SCT’s edge cases live on a production database.
CloudRoute’s role is the routing. You tell us the shape of the estate — how much Oracle, which editions and options, what the databases do, your timeline — and we match you to a partner with a genuine Oracle-migration track record and the AWS tier to file MAP. The partner runs the assessment, scopes the funding, and executes. AWS funds the engagement; the partner is paid through MAP; CloudRoute is paid a commission by the partner. You see no invoice from us.
The funding side ties directly into the AWS credits cluster — see $100K AWS credits and how AWS POC funding works for the mechanics of partner-filed AWS funding. For the platform you land on, AWS landing zone is the secure multi-account foundation a migration should target. And the migration offer page lays out exactly what a CloudRoute-routed, MAP-funded migration includes.
This is the table the whole project turns on. Oracle on RDS is fast and low-risk but keeps the license bill and the lock-in. Aurora PostgreSQL is the harder migration that captures the savings and removes the lock-in. Pick per database, not per company.
| Dimension | Oracle on Amazon RDS (lift-and-shift) | Aurora PostgreSQL (re-platform) |
|---|---|---|
| Migration type | Homogeneous (same engine) | Heterogeneous (engine change via SCT + DMS) |
| Application / code rewrite | None — PL/SQL & SQL unchanged | PL/SQL converted to PL/pgSQL; 70–95% auto, rest manual |
| Oracle license cost | You keep it (BYOL or license-included) | Eliminated entirely — no Oracle license or support |
| Database TCO vs on-prem Oracle | Lower (no hardware/DR), license remains | 60–90% lower (license deleted) |
| Typical timeline | 2–8 weeks per database | 4–9 months for a substantial database |
| Engineering risk | Low — proven, mechanical | Higher — conversion + CDC cutover + tuning |
| Vendor lock-in | Remains on Oracle | Open-source-compatible — lock-in removed |
| Managed HA / DR | RDS Multi-AZ | Aurora 6-way replication, 3 AZs, up to 15 replicas |
| MAP funding fit | Qualifies (rehost) | Strong fit (modernization — the funded prize) |
| Best for | Vendor-locked / deeply Oracle-coupled DBs; speed | High-license-cost, tractable DBs worth the conversion |
Situation: Oracle support renewal due in ten months and an Oracle audit notice already received. Engineering wanted off Oracle entirely; the CFO wanted the savings; nobody on staff had run a heterogeneous Oracle→PostgreSQL migration on databases this central. Two of the 14 databases were wired into a third-party WMS that required Oracle. The core order/shipment database carried the bulk of the license cost and ~120K lines of PL/SQL.
What CloudRoute did: Routed within 24 hours to an AWS Premier partner with a database-modernization specialization and a documented Oracle→Aurora track record. MAP Assess phase (AWS-funded) ran SCT across all 14 databases: 9 came back 90–96% auto-convertible (re-platform to Aurora PostgreSQL), 3 at 78–84% (re-platform, manual PL/SQL budget), 2 vendor-locked (lift-and-shift to RDS for Oracle, BYOL). Mobilize built the landing zone and piloted the smallest reporting DB. The core order database used DMS full-load + CDC, ran 5 weeks in sync under regression and load testing, and cut over in a 22-minute window with a tested rollback to Oracle that was never needed.
Outcome: All 14 databases migrated over ~7 months; 12 fully off Oracle, 2 on managed RDS for Oracle. Oracle decommissioned on schedule — annual database TCO down ~74% (from ~$1.4M to ~$365K on Aurora). The audit exposure on the de-Oracled workloads went to zero. The migration engagement was MAP-funded against the post-migration AWS commitment; CloudRoute’s commission was paid by the partner. The customer paid $0 for the migration itself.
estate: 14 DBs · timeline: ~7 months · license TCO cut: ~74% · core-DB downtime: 22 min · migration cost to customer: $0 (MAP-funded)
CloudRoute routes you to a vetted AWS partner who runs the SCT assessment, scopes MAP funding, and executes the Oracle→Aurora (or Oracle→RDS) migration with a de-risked cutover. AWS funds qualifying migrations. No DIY SCT learning curve on your production database.