Informatica Medica Prof. Mauro Giacomini Anno Accademico 2013-2014
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Informatica</strong> <strong>Medica</strong><br />
<strong>Prof</strong>. <strong>Mauro</strong> <strong>Giacomini</strong><br />
<strong>Anno</strong> <strong>Accademico</strong> <strong>2013</strong>-<strong>2014</strong>
Sommario<br />
• Importanza a proprietà della transazioni<br />
• Transazioni in ADO.NET<br />
• Concorrenza<br />
• Livelli di isolamento e anomalie<br />
• Locking<br />
• Transazioni annidate<br />
• Savepoint
Importanza delle transazioni<br />
• Transazione: sequenza di operazioni elementari che<br />
hanno un effetto globale su DB<br />
• Una transazione termina con successo se tutte le<br />
operazioni che la compongono terminano con<br />
successo<br />
• Fallimento di una operazione? fallisce tutta la<br />
transazione (stato del DB invariato – sempre coerente)<br />
• comitt: chiusura positiva di tutte le operazioni<br />
• rollback: annullamento di tutte le operazioni
Proprietà delle transazioni<br />
• Atomicità: entità indivisibile di esecuzione (impossibile<br />
lasciare la base di dati in uno stato intermedio)<br />
• Consistenza: non deve violare i vincoli di integrità del DB<br />
(se una operazione causa questo fallisce tutto)<br />
• Isolamento: indipendenza da tutte le altre transazioni, in<br />
modo che la loro esecuzione concorrente porti lo stato del<br />
DB allo stesso punto che una loro esecuzione sequenziale<br />
(serializzazione delle transazioni)<br />
• Persistenza: l’effetto di una transazione chiusa<br />
positivamente (commit) non deve andare perso.
Transazioni in ADO.NET<br />
• Oggetto Transaction: dipende dal provider<br />
(SqlTransaction)<br />
• Metodi:<br />
• BeginTransaction (crea un oggetto Transaction<br />
attivo)<br />
• Commit (conclusione positiva)<br />
• Rollback (conclusione negativa)<br />
• Vedi esempio nel file listati10.txt<br />
• La transazione “avvolge” le normali operazioni di<br />
lavoro sul DB
Transazioni concorrenti (1)<br />
• In ambienti multiutente ci possono essere più transazioni<br />
concorrenti.<br />
• Anomali possibili:<br />
• Letture sporche (dirty read):<br />
Start T1<br />
w(x)<br />
Rollback<br />
Start T2<br />
r(x)<br />
Commit
Transazioni concorrenti (2)<br />
• Letture ripetibili (repeatable read):<br />
Start T1<br />
r(x)<br />
r(x)<br />
Commit<br />
Start T2<br />
w(x)<br />
Commit<br />
• Letture fantasma (phantom read): T1 e T2 concorrenti,<br />
T1 legge delle righe che soddisfano una condizione, T2<br />
aggiunge righe che soddisfano la stessa condizione.<br />
Impossibile la serializzazione.
Livelli di isolamento (1)<br />
• Definisce la “visibilità” che una transazione ha sulle<br />
altre.<br />
• Quattro livelli di isolamento<br />
• Read uncommited: letture sporche, ripetibili e<br />
fantasma, consentite, nessun vincolo sulla visibilità,<br />
nessuna protezione, ma più prestazioni più alte<br />
• Read commited: letture sporche non consentite,<br />
ripetibili e fantasma sì, proibisce la lettura di righe<br />
modificate da transazioni non ancora terminate<br />
(comportamento di default)
Livelli di isolamento (2)<br />
• Repeatable read: letture sporche e ripetibili non<br />
consentite ma fantasma consentite, oltre alle limitazioni<br />
del livello precedente non consente di rileggere righe già<br />
lette e nel frattempo modificate da altre transazioni<br />
concluse con commit<br />
• Serializable: livello di isolamento totale per rendere il<br />
tutto perfettamente serializzabile<br />
• Livello di isolamento (IsolationLevel) passabile<br />
come parametro di inizializzazione del metodo<br />
BeginTransaction.
Locking<br />
• Meccanismo per preservare l’integrità e la consistenza<br />
dei dati<br />
• Lock di lettura (condivisibile)<br />
• Lock di scrittura (esclusivo)<br />
• Politica di bloccaggio dipende dal DBMS<br />
• Individuare che tipo di blocco usare in dipendenza<br />
dell’applicazione scelta (metodo pessimistico e metodo<br />
ottimistico)
Perdita di aggiornamento<br />
• Anomalia write - write<br />
Start T1<br />
r(x)<br />
w(x)<br />
Commit<br />
Start T2<br />
r(x)<br />
w(x)<br />
Commit
Savepoint<br />
• Approccio usato da SQL Server per poter utilizzare le<br />
transazione annidate<br />
• Uso del metodo Save: impostazione di un punto di<br />
salvataggio il cui nome viene passato come parametro<br />
• Il metodo Rollback, nel caso di un suo uso annullerà<br />
tutte le operazioni successive al punto di salvataggio<br />
(che sarà passato anche qui come parametro)