|
Wiki
UniCrema
Materie per semestre
Materie per anno
Materie per laurea
Help
|
|
Uni.BDC-RipresaCaldo History
Hide minor edits - Show changes to output
Changed line 16 from:
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'', ''commit'' e ''abort''.
to:
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''
Added lines 2-3:
[[Torna alla pagina di Basi di Dati - Complementi -> BDComplementi]] ----
Added lines 1-142:
(:title Basi di Dati - Complementi - Esercizi: Ripresa a caldo:)
%titolo%''':: Basi di Dati - Complementi ::'''
%center%%sottotitolo%'''Esercizi: Ripresa a caldo'''
!!Cos'è Una base di dati non è %newwin%[[incorruttibile ed eterna->http://www.reelmovienews.com/images/gallery/indiana-jones-picture.jpg]], 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'', ''commit'' e ''abort''.
!!!!Passo 2 Ora bisogna compilare un elenco delle transazioni da rifare (REDO) e da disfare (UNDO), riportandole in una tabella così strutturata:
(:table align=center width=400px:) (:cellnr bgcolor=#d4e1f0 align=center:)'''RECORD''' (:cell bgcolor=#d4e1f0 align=center:)'''UNDO''' (:cell bgcolor=#d4e1f0 align=center:)'''REDO''' (:cellnr:)... (:cell:)... (:cell:)... (:tableend:)
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: * campo RECORD: CK( ''insieme delle transazioni attive'' ) * campo UNDO: { ''insieme delle transazioni attive'' } * campo REDO: {}
Si percorre quindi il log in avanti, e per ogni ''begin'' o ''commit'' si aggiorna la tabella.
Se ho una ''begin'': * campo RECORD: B( ''nome nuova transazione'' ) * campo UNDO: { ''transazioni già presenti + nome nuova transazione'' } * campo REDO: { ''transazioni già presenti'' } Se ho una ''commit'': * campo RECORD: C( ''nome transazione'' ) * campo UNDO: { ''transazioni già presenti - nome transazione'' } * campo REDO: { ''transazioni già presenti + nome transazione'' }
!!!!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:
(:table align=center width=400px:) (:cellnr bgcolor=#d4e1f0 align=center:)'''RECORD''' (:cell bgcolor=#d4e1f0 align=center:)'''AZIONE''' (:cellnr:)... (:cell:)... (:tableend:)
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: * campo RECORD = D(T, 0, B)\\ allora nel campo AZIONE andrà scritto = ''insert O := B'' * campo RECORD = I(T, 0, A)\\ allora nel campo AZIONE andrà scritto = ''delete O'' * campo RECORD = U(T, 0, B, A)\\ allora nel campo AZIONE andrà scritto = ''O := B''\\ Notare che in questo caso di assegna all'oggetto il valore precedente (''before'', B).
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: * campo RECORD = D(T, 0, B)\\ allora nel campo AZIONE andrà scritto = ''delete O'' * campo RECORD = I(T, 0, A)\\ allora nel campo AZIONE andrà scritto = ''insert O := A'' * campo RECORD = U(T, 0, B, A)\\ allora nel campo AZIONE andrà scritto = ''O := A''\\ Notare che in questo caso di assegna all'oggetto il valore successivo (''after'', A).
!!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'''
* Passo 1: ''individuare le transazioni attive al checkpoint''\\\ Considerando i seguenti record antecedenti il checkpoint: B(T1), B(T2), B(T3), B(T4), C(T2)\\ deduco che le transazioni attive sono: T1, T3 e T4
* Passo 2: ''compilare l'elenco delle transazioni da disfare e rifare''
(:table align=center width=400px:) (:cellnr bgcolor=#d4e1f0 align=center:)'''RECORD''' (:cell bgcolor=#d4e1f0 align=center:)'''UNDO''' (:cell bgcolor=#d4e1f0 align=center:)'''REDO''' (:cellnr:)CK(T1,T3,T4) (:cell:)T1, T3, T4 (:cell:) (:cellnr:)B(T5) (:cell:)T1, T3, T4, T5 (:cell:) (:cellnr:)C(T1) (:cell:)T3, T4, T5 (:cell:)T1 (:cellnr:)C(T4) (:cell:)T3, T5 (:cell:)T1, T4 (:tableend:)
* Passo 3: ''ripristinare il sistema''\\\ Le transazioni da disfare sono T3 e T5, mentre quelle da rifare sono T1 e T4.\\ Riempio la tabella delle UNDO partendo dal fondo e considerando le operazioni di T3 e T5:
(:table align=center width=400px:) (:cellnr bgcolor=#d4e1f0 align=center:)'''RECORD''' (:cell bgcolor=#d4e1f0 align=center:)'''AZIONE''' (:cellnr:)I(T5,O6,A6) (:cell:)delete O6 (:cellnr:)U(T3,O3,B3,A3) (:cell:)O3 := B3 (:tableend:)
-->Riempio infine la tabella delle REDO partendo dall'inizio e considerando le operazioni di T1 e T4:
(:table align=center width=400px:) (:cellnr bgcolor=#d4e1f0 align=center:)'''RECORD''' (:cell bgcolor=#d4e1f0 align=center:)'''AZIONE''' (:cellnr:)I(T1,O1,A1) (:cell:)insert O1 := A1 (:cellnr:)U(T1,O4,B4,A4) (:cell:)O4 := A4 (:cellnr:)D(T4,O5,B5) (:cell:)delete O5 (:tableend:)
!!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: # 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 # si ripercorre il log in avanti ripetendo le operazioni residenti nella porzione deteriorata, quindi riportandosi nella situazione precedente al guasto # si fa una ripresa a caldo
---- [[Torna alla pagina di Basi di Dati - Complementi -> BDComplementi]]
|
|