Data migration takes different forms depending on what is being moved and why. Real projects are not limited to databases: companies move files between storage systems, switch database platforms, replace business applications, and lift entire on-premises estates into the cloud.
The four main types
- Storage migration: moves files or data blocks from one storage device or technology to another.
- Database migration: moves structured data between database engines or versions.
- Application migration: moves data from one software application to another while keeping the business running.
- Cloud migration: moves data, applications or workloads from local infrastructure to the cloud.
The types overlap. Moving an on-premises Oracle database to Amazon RDS for PostgreSQL is a database migration and a cloud migration at the same time.
1. Storage migration
Performed when an organization upgrades its infrastructure or hardware, or changes storage technology for better performance, capacity or cost.
Examples
- An old, slow file server to a new storage area network (SAN) or network-attached storage (NAS)
- Local physical disks to cloud storage such as Amazon S3, Azure Blob Storage or Google Cloud Storage
- Spinning hard drives (HDD) to solid-state storage (SSD or NVMe) arrays
What to watch for
The data format usually does not change, but the team must make sure the following survive the move intact:
- Every file, with no silent truncation or corruption (verify with checksums such as MD5 or SHA-256)
- User permissions and access control lists (ACLs)
- Folder structures, file metadata and timestamps
- Paths that applications or users depend on (mapped drives, hard-coded paths, symbolic links)
Common tools: rsync and robocopy, AWS DataSync, Azure Storage Mover, and array-level replication from storage vendors.
2. Database migration
The most common type of migration, and a constant trend in the industry. It happens whenever structured data moves from one database platform or version to another.
Examples
- MySQL to PostgreSQL
- Oracle to Microsoft SQL Server
- An older SQL Server version to a newer one with better features and support
- A relational database to a NoSQL store, such as MongoDB or DynamoDB, or the reverse
Why it is complex
Databases differ in ways that do not translate automatically:
- Data types: Oracle NUMBER compared with PostgreSQL NUMERIC or INTEGER, MySQL TINYINT(1) as a boolean, and date and time precision and time zones
- Constraints: how primary keys, foreign keys, unique constraints and check constraints are defined and enforced
- Indexes: engine-specific index types, such as bitmap, GIN and full-text
- Stored procedures, triggers and functions: PL/SQL and T-SQL must be rewritten, often by hand
- SQL syntax: LIMIT compared with TOP compared with FETCH FIRST, string concatenation, auto-increment compared with sequences or identity columns
- Collation and encoding: case sensitivity and character sets such as UTF-8 and Latin-1
-- MySQL
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
is_active TINYINT(1) DEFAULT 1,
created_at DATETIME
);
-- PostgreSQL equivalent
CREATE TABLE users (
id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP
);Because of these differences, database migrations need careful schema conversion, type mapping and validation to avoid data loss or subtle corruption, such as rounded decimals, truncated strings or shifted time zones.
Common tools: AWS Database Migration Service (DMS) and Schema Conversion Tool (SCT), Azure Database Migration Service, pgloader, Ora2Pg, and native dump and restore (pg_dump, mysqldump).
3. Application migration
Moving data from one software application to another. It usually happens when an organization replaces outdated legacy tools with modern ones as it grows.
Examples
- Notion to Trello (the course's example)
- A legacy in-house CRM to Salesforce or HubSpot
- An on-premises ERP to SAP S/4HANA or Oracle NetSuite
- Jira Server to Jira Cloud
What to watch for
- Data model mapping: a Notion database page is not the same shape as a Trello card, so fields, statuses and relationships must be mapped deliberately
- Data only reachable through APIs, which brings rate limits, pagination and export limits
- Attachments, comments, history and user references, which are easy to lose
- Integrations and automations that point at the old application
- User training and change management: the process changes, not just the data
Application migrations are high-impact because many teams use the application at once, so changes are rolled out in planned stages, tested and then put into production.
4. Cloud migration
Moving data, enterprise applications or workloads from your own local (on-premises) infrastructure to the cloud, or between cloud providers.
Major providers
- Amazon Web Services (AWS)
- Microsoft Azure
- Google Cloud (GCP)
The migration strategies (the "6 Rs")
- Rehost (lift and shift): move as-is to cloud virtual machines
- Replatform: make small optimizations, such as a self-managed database moving to a managed service like RDS
- Refactor or re-architect: rebuild the application to be cloud-native (serverless, containers)
- Repurchase: replace the system with a SaaS product
- Retire: switch off what is no longer needed
- Retain: keep the system on-premises for now
Key concerns: network bandwidth for large transfers (offline appliances such as AWS Snowball exist for petabyte-scale moves), security and compliance in the new environment, cost management, and minimizing downtime during cutover.
Comparison
| Type | Typical example | Main risk |
|---|---|---|
| Storage | File server to SAN or S3 | Lost permissions or paths |
| Database | MySQL to PostgreSQL | Type mismatches, rewriting procedures |
| Application | Notion to Trello | Mapping gaps, lost history |
| Cloud | On-premises to AWS or Azure | Downtime, security, cost |
Key takeaways
- There are four main types: storage, database, application and cloud migration.
- Storage migration keeps the format but must preserve files, permissions and structure.
- Database migration is the most common and is complex because of differences in types, constraints, indexes, procedures and SQL.
- Application migration is about mapping between data models, plus change management for users.
- Cloud migration often combines the other types and follows one of the 6 Rs.