Swappa : Uni / Basi di Dati - Complementi - Esercizi: Ripresa a caldo
Creative Commons License

Torna alla pagina di Basi di Dati - Complementi


 :: Basi di Dati - Complementi ::

Esercizi: Ripresa a caldo

Cos'è

Una base di dati non è incorruttibile ed eterna, ma è soggetta a guasti di vario tipo e gravità. Il modello che si applica per la loro gestione è il cosiddetto fail-stop, che interrompe ogni transazione e provvede al ripristino del database fino a uno stato considerato sicuro. Se il guasto è riconducibile al sistema, ovvero viene perso solo il contenuto della memoria centrale e non di quelle di massa, avviene poi la cosiddetta ripresa a caldo, che rende di nuovo utilizzabile la base di dati.

Cosa fare

Assumiamo che già conosciate il significato dei simboli dei record che compongono il file di log.

Passo 1

Generalmente nell'esercizio viene fornita una porzione di un log, in particolare quella che termina con un guasto del sistema. Come prima cosa va ricercato il simbolo del checkpoint (CK()), ovvero quell'operazione attivata dal gestore dell'affidabilità che ha il compito di tener memoria delle transazioni attive. Se tra parentesi non sono indicate le transazioni attive, ma dei puntini di sospensione, bisogna ricavarsele ripercorrendo il log dall'inizio e considerando solo le operazioni di begin

Passo 2

Ora bisogna compilare un elenco delle transazioni da rifare (REDO) e da disfare (UNDO), riportandole in una tabella così strutturata:

RECORD UNDO REDO
... ... ...

Nella colonna Record andranno inserite solo quelle operazioni che indicano l'inizio (begin) o termine con successo (commit) di una transazione; gli abort non devono essere presi in considerazione.
Nella colonna UNDO e REDO devono essere riportate rispettivamente le transazioni da disfare e rifare, aggiornate per ogni record della prima colonna.

Per compilare la prima riga della tabella, si parte dal primo record di checkpoint partendo dal fondo e si riporta:

Si percorre quindi il log in avanti, e per ogni begin o commit si aggiorna la tabella.

Se ho una begin:

Se ho una commit:

Passo 3

Si termina l'esercizio riportando la sequenza delle operazioni da eseguire per ripristinare il sistema a prima del guasto (la ripresa a caldo vera e propria).
Si considera l'ultima riga della tabella realizzata al passo precedente e si distinguono due insiemi: quello delle transazioni nella colonna UNDO, e quelle nella colonna REDO. Per ognuno di essi verrà costruita una tabella che conterrà le istruzioni da eseguire per disfarne (o rifarne) le operazioni. Le due tabelle hanno la stessa struttura, ovvero:

RECORD AZIONE
... ...

Prima di vedere come riempire le tabelle, ricordiamo che le uniche operazioni da tenere in considerazione, e quindi riportare nella colonna Record, sono quelle di insert, update e delete.

Per compilare la tabella dell'UNDO si ripercorre il log all'indietro partendo dal fondo, e si considerano solo l'inseme delle transazioni che hanno operazioni da disfare. In particolare, se:

Per compilare la tabella del REDO si percorre il log in avanti partendo dall'inizio, e si considerano solo l'inseme delle transazioni che hanno operazioni da risfare. In particolare, se:

Esercizio svolto

Considerando il seguente log di un sistema di gestione di basi di dati, illustrare dettagliatamente i passi da compiere per effettuare la ripresa a caldo.

B(T1), B(T2), I(T1,O1,A1), D(T2,02,B2), B(T3), B(T4) U(T3,O3,B3,A3), C(T2), CK(...), U(T1,O4,B4,A4), A(T3), B(T5), D(T4,05,B5), C(T1), C(T4), I(T5,O6,A6), GUASTO

Soluzione

RECORD UNDO REDO
CK(T1,T3,T4) T1, T3, T4
B(T5) T1, T3, T4, T5
C(T1) T3, T4, T5 T1
C(T4) T3, T5 T1, T4
RECORD AZIONE
I(T5,O6,A6) delete O6
U(T3,O3,B3,A3) O3 := B3
Riempio infine la tabella delle REDO partendo dall'inizio e considerando le operazioni di T1 e T4:
RECORD AZIONE
I(T1,O1,A1) insert O1 := A1
U(T1,O4,B4,A4) O4 := A4
D(T4,O5,B5) delete O5

Nota sulla ripresa a freddo

La ripresa a freddo viene messa in atto quando al guasto del sistema si aggiunge il guasto del dispositivo. Viene realizzata in tre fasi:

  1. si accede al dump più recente, ovvero alla copia completa della base di dati memorizzata su qualche supporto stabile, e si ricopia la parte danneggiata del database
  2. si ripercorre il log in avanti ripetendo le operazioni residenti nella porzione deteriorata, quindi riportandosi nella situazione precedente al guasto
  3. si fa una ripresa a caldo

Torna alla pagina di Basi di Dati - Complementi

(Printable View of http://www.swappa.it/wiki/Uni/BDC-RipresaCaldo)