Skip to content

AWS Database Migration Service

These pages are a worked example rather than a general manual. They came out of one migration — a self-managed Oracle estate replicated into PostgreSQL on AWS with AWS Database Migration Service — and they keep that shape: the schemas, table names and SCNs are from that engagement, and the procedures assume Oracle as the source and PostgreSQL as the target. The mechanics generalise; the specifics should be read as illustration and adapted, not copied.

Three facts hold across everything here and are worth knowing before reading any of it.

DMS gives at-least-once delivery, not exactly-once. A task that stops and resumes, a TargetTablePrepMode of DO_NOTHING, or a target table with no primary key or unique index can each produce duplicate rows. Design the target to be idempotent and give every replicated table a primary key or unique index.

A task’s CDC start point is fixed when the task is created. AWS documents that it cannot be changed afterwards; to replicate from a different point, create a new CDC-only task. Recovery procedures that modify an existing task’s start position do not work.

CDC is not real-time. Latency varies with source workload, network, instance size and target ingestion rate, and AWS offers no latency SLA. Anything downstream that assumes sub-second freshness will be disappointed intermittently rather than consistently, which is worse.