DBMS distribuito - Ripristino del database
Per recuperare dall'errore del database, i sistemi di gestione del database ricorrono a una serie di tecniche di gestione del ripristino. In questo capitolo studieremo i diversi approcci per il ripristino del database.
Le strategie tipiche per il ripristino del database sono:
In caso di errori soft che provocano incoerenza del database, la strategia di ripristino include l'annullamento o il rollback della transazione. Tuttavia, a volte, la ripetizione della transazione può anche essere adottata per ripristinare uno stato coerente della transazione.
In caso di malfunzionamenti con conseguenti danni estesi al database, le strategie di ripristino comprendono il ripristino di una copia precedente del database dal backup di archiviazione. Uno stato più attuale del database si ottiene ripetendo le operazioni di cui è stato eseguito il commit dal log delle transazioni.
Ripristino da un'interruzione di corrente
L'interruzione di corrente provoca la perdita di informazioni nella memoria non persistente. Quando l'alimentazione viene ripristinata, il sistema operativo e il sistema di gestione del database vengono riavviati. Recovery Manager avvia il ripristino dai registri delle transazioni.
In caso di modalità di aggiornamento immediato, Recovery Manager esegue le seguenti azioni:
Le transazioni che si trovano nell'elenco attivo e nell'elenco non riuscito vengono annullate e scritte nell'elenco interrotto.
Le transazioni che si trovano nell'elenco prima del commit vengono ripristinate.
Non viene eseguita alcuna azione per le transazioni negli elenchi di commit o interruzione.
In caso di modalità di aggiornamento differito, Recovery Manager esegue le seguenti azioni:
Le transazioni che si trovano nell'elenco attivo e nell'elenco non riuscito vengono scritte nell'elenco interrotto. Non sono necessarie operazioni di annullamento poiché le modifiche non sono state ancora scritte sul disco.
Le transazioni che si trovano nell'elenco prima del commit vengono ripristinate.
Non viene eseguita alcuna azione per le transazioni negli elenchi di commit o interruzione.
Ripristino dal guasto del disco
Un errore del disco o un arresto anomalo del disco provoca una perdita totale del database. Per recuperare da questo arresto anomalo, viene preparato un nuovo disco, quindi il sistema operativo viene ripristinato e infine il database viene ripristinato utilizzando il backup del database e il registro delle transazioni. Il metodo di ripristino è lo stesso per le modalità di aggiornamento sia immediato che differito.
Il Recovery Manager esegue le seguenti azioni:
Le transazioni nell'elenco di commit e nell'elenco prima del commit vengono ripristinate e scritte nell'elenco di commit nel log delle transazioni.
Le transazioni nell'elenco attivo e nell'elenco non riuscito vengono annullate e scritte nell'elenco interrotto nel registro delle transazioni.
Checkpoint
Checkpointè un momento in cui un record viene scritto nel database dai buffer. Di conseguenza, in caso di crash del sistema, il Recovery Manager non deve ripetere le transazioni che sono state salvate prima del checkpoint. Il checkpoint periodico accorcia il processo di ripristino.
I due tipi di tecniche di checkpoint sono:
- Checkpoint coerente
- Checkpoint sfocato
Checkpointing coerente
Il checkpoint coerente crea un'immagine coerente del database al checkpoint. Durante il ripristino, vengono annullate o ripristinate solo le transazioni che si trovano sul lato destro dell'ultimo checkpoint. Le transazioni a sinistra dell'ultimo checkpoint coerente sono già state salvate e non devono essere elaborate di nuovo. Le azioni intraprese per il checkpoint sono:
- Le transazioni attive vengono temporaneamente sospese.
- Tutte le modifiche nei buffer della memoria principale vengono scritte sul disco.
- Un record "checkpoint" viene scritto nel registro delle transazioni.
- Il log delle transazioni viene scritto sul disco.
- Le transazioni sospese vengono riprese.
Se nel passaggio 4 viene archiviato anche il registro delle transazioni, questo checkpoint aiuta il ripristino da errori del disco e interruzioni di corrente, altrimenti aiuta il ripristino solo da interruzioni di corrente.
Checkpoint fuzzy
Nel checkpoint fuzzy, al momento del checkpoint, tutte le transazioni attive vengono scritte nel log. In caso di interruzione di corrente, Recovery Manager elabora solo le transazioni che erano attive durante il checkpoint e in seguito. Le transazioni di cui è stato eseguito il commit prima del checkpoint vengono scritte sul disco e quindi non devono essere ripetute.
Esempio di checkpoint
Consideriamo che nel sistema l'ora del checkpoint è tcheck e l'ora del crash del sistema è tfail. Siano quattro transazioni T a , T b , T c e T d tali che -
T a si impegna prima del checkpoint.
T b inizia prima del checkpoint ed esegue il commit prima del crash del sistema.
T c inizia dopo il checkpoint e si impegna prima del crash del sistema.
T d inizia dopo il checkpoint ed era attivo al momento del crash del sistema.
La situazione è rappresentata nel diagramma seguente:
Le azioni intraprese dal Recovery Manager sono:
- Non si fa nulla con T a .
- La ripetizione della transazione viene eseguita per T b e T c .
- L'annullamento della transazione viene eseguito per T d .
Recupero della transazione utilizzando UNDO / REDO
Il ripristino delle transazioni viene eseguito per eliminare gli effetti negativi delle transazioni errate piuttosto che per recuperare da un errore. Le transazioni errate includono tutte le transazioni che hanno modificato il database in uno stato indesiderato e le transazioni che hanno utilizzato valori scritti dalle transazioni errate.
Il recupero della transazione in questi casi è un processo in due fasi:
ANNULLA tutte le transazioni e le transazioni difettose che potrebbero essere influenzate dalle transazioni difettose.
RIPARA tutte le transazioni che non sono difettose ma sono state annullate a causa delle transazioni difettose.
I passaggi per l'operazione UNDO sono:
Se la transazione difettosa ha eseguito INSERT, il gestore ripristino elimina gli elementi di dati inseriti.
Se la transazione difettosa ha eseguito ELIMINA, il gestore ripristino inserisce gli elementi di dati eliminati dal registro.
Se la transazione difettosa ha eseguito l'AGGIORNAMENTO, il gestore ripristino elimina il valore scrivendo il valore prima dell'aggiornamento dal registro.
I passaggi per l'operazione REDO sono:
Se la transazione ha eseguito INSERT, il gestore recupero genera un inserimento dal registro.
Se la transazione ha eseguito DELETE, il gestore recupero genera un'eliminazione dal registro.
Se la transazione ha eseguito l'AGGIORNAMENTO, il gestore recupero genera un aggiornamento dal registro.