aws dms · 2026 migration guide

AWS Database Migration Service — move a live database to AWS with near-zero downtime.

AWS DMS replicates a running production database into RDS, Aurora, or another target while the source keeps serving traffic. This guide covers what DMS actually does, where you also need the Schema Conversion Tool for heterogeneous moves like Oracle→Aurora, the full assess→convert→full-load→CDC→cutover→validate workflow, replication instances vs DMS Serverless, the pitfalls that derail real migrations (LOBs, huge tables, schema edge cases), and what it costs. A vetted AWS partner runs it for you, MAP-funded.

cutover downtime
mins, not hrs
replication mode
full load + CDC
Oracle license cut
up to 100%
who runs it
MAP-funded partner
TL;DR
  • AWS DMS does two jobs: a one-time full load of your existing data, then ongoing change data capture (CDC) that streams every new INSERT/UPDATE/DELETE from the source until you cut over. Because the source stays live the whole time, real cutover downtime is usually minutes — the time to stop writes, let CDC drain the last transactions, and repoint the app.
  • Homogeneous migrations (Postgres→RDS Postgres, MySQL→Aurora MySQL) are mostly a DMS-only job — the engines match, so the schema carries over. Heterogeneous migrations (Oracle→Aurora PostgreSQL, SQL Server→Aurora) need the AWS Schema Conversion Tool (SCT) first to translate schema, data types, and stored procedures, and SCT flags what it cannot auto-convert. That manual remainder is the real work in a heterogeneous move.
  • DMS itself is cheap (a replication instance or DMS Serverless capacity for the migration window), but the engineering — schema conversion, CDC validation, cutover rehearsal, LOB and large-table handling — is where projects succeed or stall. CloudRoute routes you to a partner who has done your exact source→target pair and runs it under AWS MAP funding, so for qualifying migrations the cost to you is little-to-nothing.
the core mechanism

IWhat AWS DMS actually does — full load, then CDC

DMS is a managed replication service. You point it at a source database and a target database, and it moves the data between them. The thing that makes it useful for production migrations rather than just one-time copies is that it does two phases back to back: a full load of existing data, then continuous change data capture.

In the full load phase, DMS reads every row of the tables you selected and writes them into the target. This is a straight bulk copy — it can run multiple tables in parallel, and for a large database it is the slowest phase (hours to a day or two depending on volume, indexes, and the size of the replication instance).

In the change data capture (CDC) phase, DMS reads the source database's transaction log — the redo log on Oracle, the binlog on MySQL, the WAL on PostgreSQL, the transaction log on SQL Server — and replays every committed change onto the target. CDC starts capturing from a log position recorded at the moment full load began, so nothing is missed in the handoff. The target stays continuously caught up to the source, typically within seconds of replication lag.

This two-phase design is why DMS migrations have such short cutover windows. The bulk of the data and all the ongoing writes are already on the target before you cut over. The actual cutover is: stop writes on the source, wait for CDC lag to hit zero (drain the last few transactions), validate, then repoint the application connection string at the new database. For most workloads that is a window of minutes, scheduled into a low-traffic period, rather than the multi-hour outage a dump-and-restore would require.

DMS does not touch your application code, your VPC routing, or your DNS — it moves data only. The surrounding work (networking between source and AWS, the application cutover, rollback planning) sits around DMS, not inside it. That is the part a migration partner orchestrates.

the one-sentence version

DMS bulk-copies your data once (full load), then live-streams every subsequent change off the transaction log (CDC) until you flip the application to the new database — so the source never goes down during the migration and the cutover itself is measured in minutes.

homogeneous vs heterogeneous

IIThe two shapes of migration — and where SCT enters

Almost every DMS question reduces to one fork: are the source and target the same database engine, or different ones? The answer determines whether DMS alone is enough or whether you also need the AWS Schema Conversion Tool, and it is the single biggest driver of project effort and risk.

A homogeneous migration keeps the same engine: PostgreSQL→RDS for PostgreSQL, MySQL→Aurora MySQL, SQL Server on-prem→RDS for SQL Server, MongoDB→Amazon DocumentDB. Because the engines match, the schema, data types, functions, and stored procedures are already compatible. You typically migrate the schema with the engine's own native tools (pg_dump --schema-only, mysqldump --no-data) and then use DMS purely to move the data with full load + CDC. These are the fast ones — frequently a one-to-three-week engagement end to end.

A heterogeneous migration changes the engine: Oracle→Aurora PostgreSQL, SQL Server→Aurora PostgreSQL or Aurora MySQL, Oracle→RDS for PostgreSQL, Db2→Aurora. Here the schema is not portable. Oracle's NUMBER, DATE, CLOB, sequences, PL/SQL packages, triggers, and proprietary functions have no one-to-one PostgreSQL equivalent. This is where the AWS Schema Conversion Tool (SCT) does the heavy lifting.

The workflow ordering matters: for heterogeneous migrations you run SCT first to convert and deploy the schema onto the empty target, fix the manual items, and only then point DMS at the source to load and replicate the data into that prepared schema. DMS moves data into a schema that already exists; it is not a schema-conversion tool itself. SCT and DMS are two tools doing two jobs, and the Oracle→Aurora path needs both — which is exactly why that migration is a senior engagement, not a weekend task.

What SCT does for heterogeneous moves

Assesses convertibility first. SCT connects to the source and produces a Migration Assessment Report that scores how much of the schema converts automatically and itemizes what does not. This report is the honest readout of how hard the migration will be — a clean Oracle schema might be 90%+ auto-convertible; one stuffed with PL/SQL business logic might be 60%.

Converts the schema. SCT translates tables, indexes, views, sequences, and data types into the target dialect, and converts stored procedures, functions, and triggers from PL/SQL or T-SQL into PL/pgSQL (for Aurora/RDS PostgreSQL) or the target equivalent.

Flags the manual remainder. Anything SCT cannot auto-convert — complex PL/SQL packages, Oracle-specific features like autonomous transactions, certain analytic functions — is listed as an action item for an engineer to rewrite by hand. This manual remainder is the actual work and the actual schedule risk in a heterogeneous migration. Anyone who tells you Oracle→Aurora is "just point DMS at it" has not done one.

the end-to-end workflow

IIIThe DMS workflow, step by step

A production DMS migration follows the same six-stage arc whether it is homogeneous or heterogeneous — the heterogeneous version just spends real time inside the "convert schema" stage. Here is what each stage involves.

A migration partner runs this as a rehearsed sequence: every stage before cutover is repeatable and reversible, so the team does it on a staging target first, measures it, fixes what breaks, and only then runs the production cutover with known timings.

  • 1 — Assess — Inventory the source: size, table count, largest tables, LOB columns, foreign keys, stored procedures, and current write volume. For heterogeneous, run the SCT assessment report. Decide the target (Aurora PostgreSQL, RDS, DocumentDB) and size it. Output: a sizing + convertibility readout and a downtime budget. This maps to the AWS MAP "Assess" phase, which AWS often funds.
  • 2 — Convert schema — Homogeneous: dump and reload the schema with native tools. Heterogeneous: SCT converts the schema and code, an engineer resolves the flagged manual items, and the converted schema is deployed onto the empty target. Indexes and foreign keys are often deferred until after full load to speed the load up.
  • 3 — Full load — Provision the DMS replication instance (or DMS Serverless), create source and target endpoints, define the migration task with table mappings and transformation rules, and run the full load. DMS bulk-copies existing rows, parallelized across tables. CDC is enabled so it records the start log position before the first row moves.
  • 4 — CDC replication — After full load completes, DMS switches to streaming changes off the source transaction log and applying them to the target. Replication lag should settle to seconds. The system runs in this steady state — source live, target continuously caught up — for as long as you need to validate, which can be hours or weeks.
  • 5 — Cutover — In a scheduled low-traffic window: stop writes to the source (or put the app in read-only/maintenance mode), wait for CDC lag to reach zero so the last transactions drain, re-enable any deferred indexes/constraints, run final validation, then repoint the application at the target and resume writes. Downtime = the few minutes this takes. Keep the source intact as the rollback target.
  • 6 — Validate — Run DMS data validation (row counts and row-level checksums comparing source and target), application-level smoke tests, and a monitoring soak. Once the target is confirmed correct and stable, decommission the source, the DMS task, and the replication instance so you stop paying for them.
rollback is a first-class step

Until validation passes, the original source database stays untouched and writable. If the new target misbehaves, you repoint the application back to the source — which never went anywhere — and the blast radius is the few minutes of writes that happened post-cutover. A migration without a tested rollback path is not a finished plan.

instances, endpoints, serverless

IVReplication instances, endpoints, and DMS Serverless

DMS has a small set of moving parts. Understanding them tells you what you are provisioning, what it costs, and why instance sizing is the lever that decides how fast the migration runs.

A replication instance is the managed compute that does the actual reading, transforming, and writing. You pick an instance class (the dms.r-family memory-optimized sizes are typical, e.g. dms.r6i.large up through dms.r6i.4xlarge for heavy loads) and it runs inside your VPC. Bigger instances run full load and CDC faster and hold more in-flight changes in memory, which matters for high write volumes and for LOB-heavy tables. Under-sizing the replication instance is one of the most common reasons a migration runs slow or a CDC backlog builds up.

An endpoint is a connection definition — one for the source, one for the target — holding the host, port, credentials, and engine type. You can test endpoint connectivity from the console before running anything, which catches the usual networking and security-group problems early rather than mid-load.

A migration task binds a source endpoint, a target endpoint, and a replication instance together with the rules: which schemas and tables to include (table mappings), what to rename or filter (transformation rules), the migration type (full load only, CDC only, or full load + CDC), and LOB-handling settings. A migration is usually one or more tasks running on the instance.

DMS Serverless — skip the instance sizing

DMS Serverless removes the need to pick and manage a replication instance. Instead of provisioning a fixed size, you set a capacity range in DMS capacity units and DMS automatically provisions, scales, and shuts down the underlying compute for the migration. It scales up during a heavy full load and back down during a quiet CDC tail.

When to use Serverless: you do not want to hand-tune instance sizing, your load profile is uneven, or you are running many tasks and would rather not capacity-plan each one. When a provisioned instance still wins: very large, sustained, predictable loads where a hand-picked instance class is more cost-predictable, or migrations needing fine-grained control over instance-level settings. For most teams in 2026, Serverless is the sensible default and a provisioned instance is the deliberate exception.

where migrations actually break

VThe pitfalls that derail real DMS migrations

DMS is reliable, but production databases are messy, and a handful of issues account for most stalled migrations. None of them are mysteries — they are known traps that an experienced partner plans around from day one rather than discovering at 2am during cutover.

The common thread: none of these are reasons not to use DMS — they are reasons to have someone who has hit all of them before run the migration. A partner who has done a dozen Oracle→Aurora cutovers already has the LOB strategy, the large-table segmentation, the sequence-reset checklist, and the rollback rehearsal as standard practice.

  • LOBs (large objects) — BLOB/CLOB/TEXT/BYTEA columns are the single most common source of slow or failed DMS tasks. DMS handles LOBs in one of a few modes — limited LOB (fast, but truncates anything past a fixed size, so it silently loses data if you guess the cap too low), full LOB (lossless but slow), or inline LOB (a hybrid). Choosing the mode and the chunk size wrong is a classic mistake: limited-LOB truncation corrupts data quietly, full-LOB on a huge table can crawl. Every table with LOBs needs a deliberate decision.
  • Very large tables — A billion-row table loads slowly and can dominate the whole migration timeline. Mitigations: split the table into parallel sub-tasks with range-based segmentation, drop secondary indexes and foreign keys before full load and rebuild them after, and size the replication instance up for the load phase. Trying to load a multi-hundred-GB table as one serial stream is how a "two-day" migration becomes a two-week one.
  • Schema edge cases (heterogeneous) — The items SCT cannot auto-convert — complex PL/SQL packages, Oracle sequences and identity semantics, autonomous transactions, proprietary functions, materialized-view logic — must be rewritten by hand and tested. Underestimating this manual remainder is the number-one schedule risk on Oracle→Aurora and SQL Server→Aurora projects. The SCT assessment report exists precisely so you can size this before you commit.
  • Tables without a primary key — CDC relies on uniquely identifying rows to apply UPDATEs and DELETEs. Tables with no primary key or unique index force DMS into full-row matching, which is slow and error-prone. These tables need a key added on the source, or special handling, before CDC will behave.
  • Sequences, triggers, and auto-increment drift — DMS replicates row data, not sequence state. After cutover, sequences and auto-increment counters on the target must be advanced to past the highest migrated value, or the first new INSERT collides. Triggers on the target can also double-apply logic during load and should usually be disabled during migration and re-enabled at cutover. Easy to miss, ugly when missed.
  • Source transaction-log retention — CDC reads the source's transaction log. If the source ages out (purges) log entries faster than DMS consumes them — a problem on busy databases with short retention — CDC breaks and you restart from a fresh full load. Log retention on the source has to be extended to cover the full migration window before you start.
what it costs

VIWhat DMS costs — and why the tool is the cheap part

DMS pricing surprises people in a good way: the service itself is inexpensive. The cost of a migration is overwhelmingly the engineering around it, and that is exactly the part AWS MAP funding is designed to offset.

You pay for the replication instance (per hour for the instance class, on only for the migration window — days to a few weeks, then you delete it) or for DMS Serverless capacity (per DMS capacity unit-hour, scaling with the load). You also pay for the instance's storage and for data transfer if the source is outside AWS or crosses regions. The Schema Conversion Tool itself is free to download and run. For a typical mid-size migration the raw DMS bill is often in the low hundreds of dollars for the whole engagement — a rounding error next to the value of the database.

The target database is a separate, ongoing cost — your new RDS or Aurora instance, which you would be paying for anyway as the home of the migrated workload. And for Oracle→Aurora specifically, the headline economics are not the DMS bill at all: they are eliminating Oracle licensing. Moving off Oracle to Aurora PostgreSQL can remove six- or seven-figure annual license and support costs, which is why heterogeneous migrations off Oracle have such a strong business case even though they are the hardest engineering.

The real spend is people: schema conversion, resolving SCT's manual items, building and validating the DMS tasks, rehearsing the cutover, and the on-call cutover itself. That engineering is what a partner provides — and under AWS MAP it is what AWS funds.

the CloudRoute + MAP economics

The AWS Migration Acceleration Program (MAP) funds migrations in phases — AWS frequently covers the Assess phase outright and credits a large share of the Mobilize and Migrate work, with the partner paid through MAP. For qualifying migrations (typically a meaningful post-migration AWS-spend commitment) that means the database move is run for you at little-to-no cost. Where MAP funding does not apply, CloudRoute is still a vetted-partner referral that de-risks the cutover. See how AWS credits/MAP funding works and AWS POC funding explained.

who runs it for you

VIIHow CloudRoute fits — a partner runs the DMS migration, MAP-funded

You do not have to run DMS yourself, and for anything heterogeneous you probably should not learn SCT on your production Oracle database. CloudRoute routes you to a vetted AWS partner who has done your exact source→target migration and runs it end to end.

CloudRoute is a routing layer, not an agency. You tell us the source (Oracle, SQL Server, MySQL, on-prem Postgres, MongoDB) and the target you want (Aurora PostgreSQL, RDS, DocumentDB), your rough data size, and your downtime tolerance. We match you to a partner with a track record on that specific pair and the regions you operate in, and the partner runs the full workflow — assess, SCT conversion, DMS task build, CDC validation, rehearsed cutover, post-migration soak — with you.

Because the partner is funded through AWS MAP for qualifying migrations, the cost to you is little-to-nothing: AWS pays for the assessment and credits the bulk of the migration work. You get a senior team who has hit every LOB, large-table, and sequence-reset pitfall before, instead of discovering them live. The honest version: MAP funding applies to qualifying migrations; where it does not, this is still a de-risked, vetted referral rather than you hiring blind.

If you want the persona-level detail on how migrations are scoped, funded, and run, see the CloudRoute migration track. For the surrounding AWS foundation a migration lands into — networking, accounts, guardrails — the AWS landing zone and AWS DevOps guides cover what a partner sets up around the database.

homogeneous vs heterogeneous

Homogeneous vs heterogeneous migration with DMS + SCT

The fork that decides everything: same engine or different engine. Homogeneous is mostly a DMS-only data move; heterogeneous adds SCT, manual schema work, and real schedule risk. Here is how the two compare across the variables that actually matter.

VariableHomogeneous (e.g. MySQL→Aurora MySQL)Heterogeneous (e.g. Oracle→Aurora PostgreSQL)
Engine changeSame engine, same dialectDifferent engine and SQL dialect
Tools neededDMS only (+ native schema dump)SCT to convert schema/code, then DMS to move data
Schema portabilityCarries over directlyMust be translated; some of it by hand
Stored procs / triggersCompatible as-isPL/SQL → PL/pgSQL conversion; complex ones rewritten manually
Main effort driverData volume + LOBs + large tablesSCT's manual remainder + validation of converted code
Cutover downtimeMinutes (full load + CDC)Minutes (full load + CDC) — same cutover mechanics
Typical timeline1–3 weeks end to end6–16+ weeks depending on schema complexity
Headline business caseManaged service, less ops, scaleEliminate Oracle licensing (often six/seven figures/yr)
Risk profileLow — well-trodden pathHigher — schema edge cases dominate; assess first
Both shapes use the same DMS full-load + CDC engine and the same minutes-long cutover. The difference is entirely upstream, in the schema. The SCT assessment report is the tool that turns "how hard is the heterogeneous one?" from a guess into a number — run it before you commit a timeline.
scoping a database migration?
Get a partner who has run your exact source→target with DMS — MAP-funded
Get matched in 24h →
a recent match

Oracle → Aurora PostgreSQL, run with DMS + SCT — anonymized

inquiry · logistics SaaS, ~900 GB Oracle, EU
EU-based logistics SaaS, ~900 GB Oracle 19c behind a Java monolith, ~$280K/yr Oracle license + support

Situation: Oracle license renewal was the single largest line item on the infra budget and growing. The schema was heavy: ~40 PL/SQL packages, sequences everywhere, a handful of CLOB-heavy document tables, and three tables over 200M rows. The team wanted Aurora PostgreSQL to kill the license cost but had no in-house Oracle-to-Postgres conversion experience and could not afford more than a short maintenance window on a 24/7 product.

What CloudRoute did: Routed within 24 hours to a partner with multiple Oracle→Aurora cutovers on record. Partner ran SCT first: assessment report scored the schema ~82% auto-convertible and itemized the rest. Over the engagement they converted the schema, hand-rewrote the complex PL/SQL packages into PL/pgSQL, set DMS to full-LOB mode for the document tables and range-segmented the three large tables into parallel sub-tasks, then ran full load + CDC into the prepared Aurora schema. The whole flow was rehearsed twice on staging to measure cutover timing and confirm rollback. Filed under AWS MAP — AWS funded the Assess phase and credited the bulk of the Migrate work.

Outcome: Production cutover ran in a planned ~12-minute write-freeze: CDC lag drained to zero, sequences were advanced past the migrated max, validation checksums passed, app repointed to Aurora. Oracle license eliminated at the next renewal (~$280K/yr removed). DMS's own bill for the migration window was under $400; the engineering was MAP-funded, so cost to the customer was effectively zero.

engine: Oracle 19c → Aurora PostgreSQL · data: ~900 GB · cutover downtime: ~12 min · license saved: ~$280K/yr · cost to customer: ~$0 (MAP-funded)

faq

Common questions

What is the difference between AWS DMS and the Schema Conversion Tool (SCT)?
They do two different jobs. DMS moves data — a full load of existing rows, then ongoing change data capture (CDC) to keep the target synced until cutover. SCT converts schema and code — tables, data types, stored procedures, triggers — from one engine's dialect to another. For a homogeneous migration (same engine, e.g. MySQL→Aurora MySQL) you only need DMS, because the schema is already compatible. For a heterogeneous migration (different engines, e.g. Oracle→Aurora PostgreSQL) you run SCT first to convert and deploy the schema, fix what SCT cannot auto-convert, and then use DMS to move the data into it.
How much downtime does a DMS migration actually require?
Usually minutes, not hours. Because DMS runs full load and then continuous CDC while the source stays live, the bulk of the data and all ongoing changes are already on the target before you cut over. The cutover itself is: stop writes on the source, wait for CDC replication lag to reach zero so the last transactions drain, run final validation, and repoint the application at the new database. For most workloads that is a few minutes scheduled into a low-traffic window. The example migration on this page cut over in about 12 minutes on a 900 GB Oracle database.
Can DMS migrate a database with zero downtime?
Near-zero, not literally zero, in the standard pattern — there is a brief write-freeze at cutover while CDC drains the final transactions and the app is repointed. True zero-downtime cutovers are possible with extra engineering (e.g. bidirectional replication or application-level dual-writes), but they add significant complexity and risk. For the vast majority of migrations, a planned few-minute window in off-peak hours is the right trade, and it is what a partner will recommend unless you genuinely cannot take any window at all.
What is DMS Serverless and should I use it?
DMS Serverless removes the need to pick and manage a replication instance. Instead of provisioning a fixed instance class, you set a capacity range and DMS automatically provisions, scales, and shuts down the underlying compute for the migration — scaling up during a heavy full load and down during a quiet CDC tail. For most teams in 2026 it is the sensible default because it eliminates instance sizing, which is one of the easiest things to get wrong. A hand-picked provisioned instance still wins for very large, sustained, predictable loads where cost predictability or fine-grained instance control matters.
Why are LOBs (large objects) such a common problem in DMS migrations?
BLOB/CLOB/TEXT columns are handled in one of a few DMS modes, and the wrong choice causes real damage. Limited-LOB mode is fast but truncates anything past a fixed size cap — so if you set the cap too low it silently loses data. Full-LOB mode is lossless but slow, and on a large table it can dominate the migration timeline. Inline-LOB is a hybrid. Every table with large objects needs a deliberate mode-and-chunk-size decision based on the actual maximum object size, which is exactly the kind of thing an experienced partner checks up front rather than discovering when validation finds truncated documents.
How long does an Oracle to Aurora migration take with DMS and SCT?
It depends almost entirely on schema complexity, not data size. A clean Oracle schema that SCT auto-converts at 90%+ can be a few weeks. A schema packed with PL/SQL packages, autonomous transactions, and proprietary functions — where SCT flags a large manual remainder — can run six to sixteen weeks or more, because engineers have to rewrite and test that code by hand. The SCT assessment report turns this from a guess into a number: run it first and it scores how much converts automatically and itemizes the rest, so the timeline is based on the actual schema rather than optimism.
What does AWS DMS cost?
The service itself is cheap. You pay for the replication instance per hour (on only for the migration window — days to a few weeks, then you delete it) or for DMS Serverless capacity per capacity unit-hour, plus storage and any cross-region or out-of-AWS data transfer. SCT is free. For a typical mid-size migration the raw DMS bill is often in the low hundreds of dollars total. The target RDS/Aurora database is a separate ongoing cost you would pay regardless. The real expense of a migration is the engineering — schema conversion, validation, cutover rehearsal — which is precisely what AWS MAP funding offsets for qualifying migrations.
Can a partner run the whole DMS migration for me, and is it really funded?
Yes. CloudRoute routes you to a vetted AWS partner who has done your specific source→target pair and runs the entire workflow — assess, SCT conversion, DMS task build, CDC validation, rehearsed cutover, and post-migration soak. For qualifying migrations the work is funded through the AWS Migration Acceleration Program (MAP): AWS frequently covers the Assess phase outright and credits the bulk of the migration, with the partner paid through MAP, so the cost to you is little-to-nothing. MAP funding applies to qualifying migrations (typically with a meaningful post-migration AWS-spend commitment); where it does not apply, CloudRoute is still a vetted-partner referral that de-risks the cutover.

Migrate your database to AWS with DMS — run by a partner, MAP-funded

Tell us your source and target. CloudRoute routes you to a vetted AWS partner who has run your exact migration with DMS and SCT — full load, CDC, rehearsed cutover, validated. For qualifying migrations AWS MAP funds the work, so the cost to you is little-to-nothing.

matched within< 24h
cutover downtimeminutes
cost to you$0 (MAP-funded)
AWS DMS — Database Migration Service guide + SCT (2026) · CloudRoute