Recovery
Il recovery è il processo di ripristino del database a uno stato consistente dopo un fallimento (failure)
- Obiettivo: garantire che una transazione sia completata interamente (commit) o annullata completamente (abort), senza effetti parziali sul database
- Strumento chiave: System Log, che registra tutte le operazioni delle transazioni (inizio, letture, scritture, commit, abort)
Tipi di failure e strategie di recovery
Failure catastrofici
- Crash del disco, disastri fisici
- Strategia:
- Ripristinare una copia di backup del database
- Applicare le transazioni committed registrate nel log per ripristinare lo stato più recente (REDO)
- Se invece il db non è danneggiato fisicamente ma solo inconsistente, UNDO delle operazioni che hanno causato inconsistenza
Failure non catastrofici
- Crash di sistema, errori di transazione
- Strategie:
- Aggiornamento Differito (Deferred Update):
- Le modifiche sono applicate al database solo dopo il commit
- Algoritmo NO-UNDO/REDO:
- Non serve annullare operazioni (UNDO), ma potrebbe essere necessario ripeterle (REDO) se il crash avviene dopo il commit ma prima della scrittura su disco
- Aggiornamento Immediato (Immediate Update):
- Le modifiche sono applicate al database prima del commit
- Algoritmo UNDO/REDO:
- Se la transazione fallisce, si annullano le modifiche (UNDO)
- Se il crash avviene dopo il commit ma prima della scrittura su disco, si ripetono le operazioni (REDO)
Gestione della cache
- Dirty Bit: indica se un blocco in cache è stato modificato
- Strategie di svuotamento:
- In-place updating: il blocco modificato è riscritto nella stessa posizione su disco (richiede il log per il recovery)
- Shadowing: il blocco modificato è riscritto in una nuova posizione, mantenendo sia il vecchio che il nuovo valore
Write-Ahead Logging (WAL)
- Protocollo fondamentale:
- Le entry di log (UNDO e REDO) devono essere scritte su disco prima di applicare le modifiche al database
- Garantisce che, in caso di crash, il sistema possa ripristinare lo stato consistente
Checkpoint
- Funzione: ottimizzare il processo di recovery riducendo il numero di transazioni da ripristinare