Data

Database migration with no downtime

A successful migration is one the users never noticed.

Interface illustration, recreated for this presentation. It is not a screenshot of the final deliverable.

Context

An application that has been running for years accumulates a data estate its original schema can no longer carry: columns diverted from their purpose, free text where references belong, duplicates introduced by successive imports. Rebuilding the application means taking that data with you, and that is almost always the riskiest part of the project.

The problem

The risk is not technical in the narrow sense, it is operational.

  • A migration that fails halfway leaves the system in an inconsistent state
  • The existing data contains cases nobody had documented
  • The business cannot stop while the data is moved
  • Without reconciliation checks, nobody can state that nothing was lost

The solution

A migration treated as software: versioned, tested, replayable as many times as needed.

  • Mapping of the existing estate, including undocumented cases found along the way
  • Cleansing and normalisation before transformation, not during
  • Replayable migration scripts, producing the same result on every run
  • Systematic reconciliation: counts, totals and integrity checks between source and target
  • Full rehearsals on copies before any real execution
  • A rollback procedure defined and tested before cut-over

My role

Analysis of the existing schema, design of the target schema, writing the scripts and checks, running the rehearsals and steering the cut-over. I also built the automation that allows the whole thing to be replayed on a fresh environment.

Constraints

  • No acceptable service interruption during the migration
  • Integrity verifiable, not merely assumed
  • Replayable scripts: a partial run must never leave an intermediate state
  • Rollback possible until the last moment
  • Data volume requiring batch processing rather than a single pass

Outcome

Cut-over happened with no downtime, and the reconciliation checks make it possible to state, with figures, that nothing was lost.

  • The scripts are replayable, and therefore reusable for test environments
  • Discrepancies found in the historical data were handled explicitly, not silently
  • The new schema carries the rules the old one left to the application

Outcomes are described by the capability delivered. No commercial performance metric is claimed here: usage figures belong to the client, and I do not publish numbers I cannot substantiate.

A project of this kind?

Describe your need in a few lines. I will tell you what is feasible, what is not, and where to start.

Get in touch