27.06.2014 Views

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)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!