DBMS distribuito - Errore e commit
Un sistema di gestione del database è suscettibile a una serie di errori. In questo capitolo studieremo i tipi di errore e i protocolli di commit. In un sistema di database distribuito, i guasti possono essere ampiamente classificati in errori soft, errori hardware e guasti di rete.
Soft fallimento
Il soft failure è il tipo di errore che causa la perdita nella memoria volatile del computer e non nella memoria persistente. Qui, le informazioni memorizzate nella memoria non persistente come la memoria principale, i buffer, le cache o i registri vengono perse. Sono anche conosciuti come crash di sistema. I vari tipi di guasti soft sono i seguenti:
- Errore del sistema operativo.
- Crash della memoria principale.
- Fallimento della transazione o aborto.
- Errore generato dal sistema come un numero intero overflow o un errore di divisione per zero.
- Fallimento del software di supporto.
- Mancanza di corrente.
Difficile fallimento
Un errore hardware è il tipo di errore che causa la perdita di dati nella memoria persistente o non volatile come il disco. Il guasto del disco può causare il danneggiamento dei dati in alcuni blocchi del disco o il guasto dell'intero disco. Le cause di un grave fallimento sono:
- Mancanza di corrente.
- Difetti nei media.
- Malfunzionamento lettura-scrittura.
- Danneggiamento delle informazioni sul disco.
- Arresto anomalo della testina di lettura / scrittura del disco.
Il ripristino da errori del disco può essere breve se è disponibile un disco nuovo, formattato e pronto per l'uso. In caso contrario, la durata include il tempo necessario per ottenere un ordine di acquisto, acquistare il disco e prepararlo.
Errore di rete
Gli errori di rete sono prevalenti nei database distribuiti o di rete. Questi comprendono gli errori indotti nel sistema di database a causa della natura distribuita dei dati e del trasferimento dei dati sulla rete. Le cause dell'errore di rete sono le seguenti:
- Errore nel collegamento di comunicazione.
- La congestione della rete.
- Danneggiamento delle informazioni durante il trasferimento.
- Errori del sito.
- Partizionamento di rete.
Protocolli di commit
Qualsiasi sistema di database dovrebbe garantire che le proprietà desiderabili di una transazione vengano mantenute anche dopo gli errori. Se si verifica un errore durante l'esecuzione di una transazione, può accadere che tutte le modifiche apportate dalla transazione non vengano salvate. Ciò rende il database incoerente. I protocolli di commit impediscono questo scenario utilizzando l'annullamento della transazione (rollback) o il ripristino della transazione (roll forward).
Punto di impegno
Il momento in cui viene presa la decisione se eseguire il commit o l'interruzione di una transazione è noto come punto di commit. Di seguito sono riportate le proprietà di un punto di commit.
È un momento in cui il database è coerente.
A questo punto le modifiche apportate dal database possono essere viste dalle altre transazioni. Tutte le transazioni possono avere una visualizzazione coerente del database.
A questo punto, tutte le operazioni di transazione sono state eseguite con successo ed i loro effetti sono stati registrati nel log delle transazioni.
A questo punto, una transazione può essere annullata in modo sicuro, se necessario.
A questo punto, una transazione rilascia tutti i blocchi da essa detenuti.
Annulla transazione
Il processo di annullamento di tutte le modifiche apportate a un database da una transazione è denominato annullamento della transazione o rollback della transazione. Questo viene applicato principalmente in caso di guasto soft.
Ripeti transazione
Il processo di riapplicazione delle modifiche apportate a un database da una transazione è denominato ripristino della transazione o roll forward della transazione. Questo viene applicato principalmente per il ripristino da un errore grave.
Registro delle transazioni
Un registro delle transazioni è un file sequenziale che tiene traccia delle operazioni di transazione sugli elementi del database. Poiché il registro è di natura sequenziale, viene elaborato in sequenza dall'inizio o dalla fine.
Finalità di un registro delle transazioni -
- Per supportare i protocolli di commit per eseguire il commit o supportare le transazioni.
- Per aiutare il ripristino del database dopo un errore.
Un registro delle transazioni viene solitamente conservato sul disco, in modo che non sia influenzato da errori soft. Inoltre, il registro viene periodicamente sottoposto a backup su un archivio di archiviazione come un nastro magnetico per proteggerlo anche da guasti del disco.
Elenchi nei registri delle transazioni
Il registro delle transazioni mantiene cinque tipi di elenchi a seconda dello stato della transazione. Questo elenco aiuta il gestore del recupero ad accertare lo stato di una transazione. Lo stato e gli elenchi corrispondenti sono i seguenti:
Una transazione che ha un record di inizio transazione e un record di commit della transazione, è una transazione confermata - mantenuta nell'elenco di commit.
Una transazione che ha un record di inizio transazione e un record di transazione non riuscita ma non un record di interruzione della transazione, è una transazione fallita - mantenuta nell'elenco fallito.
Una transazione che ha un record di inizio transazione e un record di interruzione della transazione è una transazione interrotta - mantenuta nell'elenco di interruzione.
Una transazione che ha un record di inizio transazione e un record di transazione prima del commit è una transazione prima del commit, cioè una transazione in cui tutte le operazioni sono state eseguite ma non confermate - mantenute nell'elenco prima del commit.
Una transazione che ha un record di inizio transazione ma nessun record di before-commit, commit, interruzione o fallimento, è una transazione attiva - mantenuta nell'elenco attivo.
Aggiornamento immediato e aggiornamento differito
L'aggiornamento immediato e l'aggiornamento differito sono due metodi per mantenere i registri delle transazioni.
Nel immediate updatemodalità, quando viene eseguita una transazione, gli aggiornamenti effettuati dalla transazione vengono scritti direttamente sul disco. I vecchi valori e i valori degli aggiornamenti vengono scritti nel registro prima di essere scritti nel database su disco. Al momento del commit, le modifiche apportate al disco vengono rese permanenti. In caso di rollback, le modifiche apportate dalla transazione nel database vengono eliminate e i vecchi valori vengono ripristinati nel database dai vecchi valori memorizzati nel registro.
Nel deferred updatemodalità, quando viene eseguita una transazione, gli aggiornamenti effettuati al database dalla transazione vengono registrati nel file di registro. Al momento del commit, le modifiche nel registro vengono scritte sul disco. In caso di rollback, le modifiche nel registro vengono eliminate e nessuna modifica viene applicata al database.