If you need to change something in your DB wouldn't you just have a job running in the background doing the migration and have your application code handle both cases when reading the DB (migrated/unmigrated)?
For one thing in many DBs certain (often nessesary) schema changes require a global write lock.
It's much much easier to just show down for 15 minutes or less than spend hundreds of hours of engineering effort.