I
DB sono un insieme di dati provenienti da varie fonti. Gli utenti affidano
i propri dati ad un
DBMS e si aspettano la loro protezione da perdite e danneggiamenti.
L'attendibilità e l'integrità di un
DB si focalizzano su tre punti:
- Integrità di DB: L'intero DB deve essere protetto contro i danni
come fallimenti del disco o corruzione dell'indice dei dati. Ciò può
essere fatto attraverso controlli di integrità del sistema operativo
e procedure di recupero dati.
- Integrità di elementi: I valori di specifici elementi di dati devono
essere scritti e variati solo da utenti autorizzati. Particolari
controlli di accesso proteggono il DB dalla corruzione di utenti non
autorizzati.
- Accuratezza degli elementi: Solo valori corretti devono essere scritti
in elementi di un DB. Controlli di valori di elementi possono aiutare
prevenire inserimenti di valori impropri. Inoltre, condizioni di
vincoli possono scovare valori non corretti.
Caratteristiche di protezione del sistema operativo
In un sistema operativo i file subiscono dei backup periodici, sono protetti
durante l'esecuzione da accessi esterni attraverso le facilities standard
di controllo di accesso del sistema operativo. Infine il sistema operativo
fornisce alcuni controlli di integrità per tutti i dati; controlli che fanno
parte di normali operazioni di lettura e scrittura da device di I/O.
Questi controlli forniscono sicurezza di base, ma il
DBMS deve aumentare
questi controlli.
Aggiornamento a 2-fasi
Un problema serio per un
DBMS è il fallimento del sistema nel mezzo
della modifica di dati. Se viene modificato un record mentre il sistema
fallisce, la prima parte del record può contenere il valore aggiornato, la
seconda metà quello non aggiornato. Errori di questo tipo sono
localizzati facilmente, ma quando vengono aggiornati molti record,
è difficile stabilire quanti record siano stati aggiornati e quanti siano in errore.
La soluzione a questo problema, proposta da
LAMPSON e
STORGIS e adottato in
molti
DBMS, usa un aggiornamento a 2-fasi.
Tecnica di aggiornamento
Durante la prima fase, chiamata
intent phase, il
DBMS raccoglie le informazioni
e le altre risorse di cui ha bisogno per eseguire l'aggiornamento.
Può raccogliere dati, creare record temporali, aprire file, chiudere l'accesso
ad altri utenti, e calcolare le risposte finali; in breve fa tutto il necessario
per preparare l'aggiornamento, ma non fa cambiamenti permanenti. Se il sistema
fallisce durante la prima fase, può essere fatta ripartire senza problemi.
L'ultimo evento della prima fase, chiamata operazione di
commit,
scrive un flag di conferma nel
DB. Questo flag significa che il
DBMS supera un
punto di non ritorno: dopo il commit, il
DBMS comincia a fare cambiamenti
permanenti. La seconda fase fa cambiamenti permanenti. Durante questa fase
nessun'azione prima del commit può essere ripetuta, ma le attività di
aggiornamento della seconda fase possono essere anche ripetute, come spesso
è necessario. Se il sistema fallisce durante la seconda fase, il
DB può
contenere dati incompleti, ma questi dati possono essere corretti rifacendo
tutte le attività della seconda fase. Dopo che la seconda fase è stata
completata, il
DB è completo.
Ridondanza e consistenza interna
Molti
DBMS mantengono informazioni per cercare inconsistenze interne
ai dati e correggerle. Le informazioni addizionali variano da pochi bit di
controllo a intere duplicazioni di record, secondo l'importanza dei dati.
Recupero
In aggiunta a questi processi per la correzione di errori, un
DBMS può
mantenere un
LOG degli accessi e delle modifiche fatte dagli utenti.
Quindi, in caso di fallimento, il
DB utilizza una copia di backup consistente,
sulla quale vengono applicati tutti i cambiamenti memorizzati nel
LOG di verifica.
Concorrenza e consistenza
I sistemi di
DB sono spesso sistemi multiutente. Gli accessi di due utenti
che condividono il
DB devono essere vincolati in modo da non farli
interferire l'uno con l'altro. Un semplice locking è fornito dal
DBMS. Se due
utenti cercano di leggere lo steso dato, non vi è conflitto poiché entrambi
ottengono lo stesso valore. Il problema sorge se due utenti tentano di modificare
lo stesso dato.
I monitor
Un monitor è un'unità di un
DBMS che è responsabile dell'integrità strutturale del
DB.
Un monitor può controllare valori inseriti per assicurare la loro consistenza con il resto
del
DB, o con caratteristiche di un particolare campo. Per esempio, un monitor potrebbe
rifiutare un carattere alfabetico per un campo numerico. Discutiamo diversi tipi di monitor.
Comparazione di range
Un monitor per la comparazione di range testa ogni nuovo valore per assicurare che questo valore
è all'interno di un range accettabile. Se il dato è al di fuori del range, esso viene rifiutato
e non inserito nel
DB.
La comparazione del range può essere conveniente per campi numerici. I vincoli di
range possono anche essere applicati a dati con un formato prestabilito.
La comparazione del range può essere usata per assicurare la consistenza interna di un
DB.
Quando è usata in questo modo, la comparazione avviene tra due elementi del
DB.
Controlli di questo tipo possono verificare i dati all'interno di un
DB; se si sospetta che
il
DB si è corrotto, un controllo di range di tutti i record potrebbe identificarne uno che
ha valori sospetti.
Vincoli di stato
Un vincolo di stato descrive una condizione di un intero
DB. Questi vincoli non dovrebbero
mai essere violati nel
DB, in altre parole se qualche vincolo non è rispettato, qualche valore del
DB è in errore.
Vincoli di transizione
I vincoli di stato descrivono lo stato di un
DB corretto. I vincoli di transizione descrivono
le condizioni necessarie che devono esistere prima di applicare dei cambiamenti al
DB.