Ogni volta che l'ho fatto, abbiamo fatto due passaggi ...
- fare uno snapshot e, lavorando su un altro server, utilizzarlo per determinare cosa deve essere fatto per la migrazione e scriverlo.
- una volta che hanno lo script in mano, lo snapshop viene ripristinato sul sistema di test ed è programmato per vedere se verrà eseguito entro il tempo richiesto o se sarà sintonizzato e modificato fino a quando non sarà possibile.
- far firmare agli stakeholder che nulla sembra sbagliato con i dati sul sistema di test.
Quindi, per un fine settimana, hai un'interruzione programmata:
- Venerdì sera, i sistemi che utilizzano il database vengono disattivati, viene eseguito un backup completo a freddo e gli script vengono eseguiti per migrare / modificare / qualunque cosa ai dati
- I sistemi vengono ripristinati con un indirizzo privato o in qualche modo impostati in modo che non siano aperti a chiunque, ma agli stakeholder per i test di accettazione
- Se le parti interessate approvano, il sistema viene messo online e reso pubblico; in caso contrario, il database viene ripristinato dal backup effettuato venerdì sera e si riavvia il processo.
Con il nostro programma, la gente del database di solito aveva dalle 18:00 alle 10:00 di sabato per eseguire gli script di backup e migrazione, quindi il nostro obiettivo era che funzionassero in meno di 8 ore (~ 6 di questi erano backup), quindi noi " avere del tempo per i nostri test e correzioni prima che vengano rilasciati agli stakeholder.
Le parti interessate hanno avuto la loro finestra temporale in anticipo, quindi sapevano di lasciare il weekend aperto per i test all'inizio della finestra. Avrebbero anche detto alla fine della loro finestra, in genere domenica pomeriggio, dove se tutti non avessero firmato, avremmo dovuto iniziare a tornare indietro.
Oh, e ovviamente ... se qualcuno ha avuto un cambiamento durante uno dei test di accettazione, e abbiamo fatto un cambiamento, ciò significava che tutte le sottoscrizioni degli stakeholder erano annullate e dovevano riprovare ... quindi proveremmo a dedicare loro un po 'di tempo a cercare i problemi ed eseguire le correzioni in blocco, anziché applicarle una alla volta.
Fortunatamente, le uniche volte in cui ho avuto una di quelle situazioni in cui non potevamo avere tempi di inattività significativi, i sistemi che stavo migrando erano alimentati da script, non da input dell'utente, quindi potevo solo avere due sistemi paralleli attivi e scambiarli quando le cose sono state firmate. (solo una volta c'è stato un problema, quando il mio capo ha insistito sul fatto che avessimo un backup completo, non capendo che l'intera cosa sarebbe stata ancora online a un IP diverso ... quindi cosa avrebbe dovuto essere un'interruzione di 5 minuti in un brutta giornata è diventata un'interruzione di 5 ore.)